No i tak to bywa - debuger nie załatwi sam pewnych spraw za programistę ... Tak poczytałem ten wątek ... i aż troszkę strach bierze gdy kolega autor wątku pisze np takie coś:
Cytuj:
char str_95 PROGMEM = '_';
strncmp_P(buf, str_95, 1);
Po prostu tragedia - proponuję jednak wrócić do podstaw i zastanowić się co to jest C-String, czyli string w C ... bo to nigdy w życiu nie jest stringiem, i jeśli korzystanie z funkcji strncmp_P() lub podobnych powoduje wykładanie się procka do góry nogami i jak kolega pisze powrót do main()
albo losowe działanie IF'ów to - .... to panie kochany ....
1. to nie jest żaden powrót do main tylko "pierdyknięcie stosu" bo próbujesz porównywać nie stringa tylko np pół pamięci FLASH zanim funkcja porównująca dojdzie do końca tego rzekomego stringa czyli do zera
2. to nie jest żadne losowe działanie IFów tylko mega PASKUDNY niestety czy tego chcesz czy nie babol programisty, który nie wie co to jest STRING w języku C
i na to nie pomoże żaden DEBUGER jak widać - bo już od dłuższego czasu widzę walczysz z debugerem i wciąż ten sam efekt.
---------------------------------
Przypominam już w Bluebooku masz napisane co to jest C-String .... otóż taki STRING MUSI być Qurczę zakończony znakiem NULL czyli zerem
to:
Cytuj:
char str_95 PROGMEM = '_'; // to zajmie JEDEN koci bajt !!!
nie jest żaden Qurdę string tylko jakaś definicja stałej dosłownej - w tym wypadku jednego znaku i nie ZAKOŃCZONA zerem rozumiesz ? Już pomijam że brakuje specyfikatotra const
TO jest STRING
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
no to są PODSTAWY PODSTAW z Bluebooka i bardzo dobrze tam opisane. Jeśli się tego nie zrozumie - to się będzie miało do czynienia z GIGANTYCZNYMI KASZANAMI w kodzie i dlatego tak dużo miejsca temu poświęciłem. W języku C - trzeba zrozumieć co to jest STRING.
------------------------ [ Dodano po: 3 minutach ]Stałe dosłowne, literały są często umiejscawiane w pamięci FLASH przez kompilator na samym początku przed kodem programu. Przez co za takim literałem nie zakończonym zerem mogą być kolejne znaki i kolejne aż w końcu kod programu i długo może nie być zera ... próba używania funkcji do operacji na stringach - którym daje się do jedzenia TAK NIESTRAWNE danie w postaci sztucznych zatrutych stringów - spowoduje, że procek dostanie niestrawności i wymiotów
a na poważnie to i stos może się przekręcić aby na końcu zresetować procka - a tobie się wydaje, że program wraca w jakiś dziwny tajemniczy sposób do main(). Nie - nie wraca tylko następuje najzwyklejszy okrutny restart
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]