Witam,
Już przy dwóch projektach zdarzyła mi się podobna sytuacja dlatego postanowiłem zapytać użytkowników elektrody czy być może spotkali się z takim problemem.
Używam AVRStudio z AVR-GCC, zauważyłem niepoprawne zachowanie programu przy włączonej optymalizacji kodu. Nie jest to związane z błędną definicją zmiennych
Uwaga - zarówno w jednym jak i drugim przypadku błąd usuwało lub zmieniało jego charakter dopisanie jakiegokowliek (!!!!!) kodu o dość dowolnej długości i we wmiarę dowolnym miejscu programu. Mogły to być instrukcje nie mające wpływu na działanie programu, np jakieś obliczenia na nieużywanych zmiennych, niepotrzebne wywołanie funkcji itp. Tak jakby miało to związek z umiejscowieniem poszczególnych fragmentów w pamięci flash.
Przykład z praktyki: program nie działa z włączoną optymalizacją. Zachowuje się w nietypowy sposób - jedna ze zmiennych w pętli głównej "blokuje się" jeśli wywołam pewną funkcję i pozwolę jej dłużej pracować (funkcja nieblokująca na zasadzie maszyny stanu, wywoływana z każdym obrotem pętli).
Zablokowanie zmiennej w pętli głównej polega na tym, że warunki przypisujące tej zmiennej określone wartości nie są w stanie jej modyfikować.
Teraz dopisuję w głównej pętli np taką linijkę:
itoa(testflag,temp,10);
i w magiczny sposób program po skompilowaniu działa poprawnie, choć zmienna temp nie jest nigdzie używana. zmienna testflag przestaje się "blokować".
To jeszcze nic, dopisuję LCD_Home() zamiast itoa i też program zaczyna działać normalnie. To samo dzieje się jak dopiszę kilka inkrementacji jakiejkolwiek zmiennej. Wszystko co zwiększa długość kodu magicznie leczy program.
Czy ktoś się z tym spotkał? Mam drugi raz podobny przypadek. W innym projekcie z kolei chodziło o blokowanie losowymi wartościami jednej z komórek tablicy. Pomagało dopisanie kilku linijek dowolnego kodu bądź zwiększenie rozmiaru tablicy z 48 na 100 elementów, mimo że była to ostatnia definiowana tablica w RAMie. Tablica była statyczna globalna. Również w tym przypadku wyłączenie optymalizacji leczyło program.
Już przy dwóch projektach zdarzyła mi się podobna sytuacja dlatego postanowiłem zapytać użytkowników elektrody czy być może spotkali się z takim problemem.
Używam AVRStudio z AVR-GCC, zauważyłem niepoprawne zachowanie programu przy włączonej optymalizacji kodu. Nie jest to związane z błędną definicją zmiennych
Uwaga - zarówno w jednym jak i drugim przypadku błąd usuwało lub zmieniało jego charakter dopisanie jakiegokowliek (!!!!!) kodu o dość dowolnej długości i we wmiarę dowolnym miejscu programu. Mogły to być instrukcje nie mające wpływu na działanie programu, np jakieś obliczenia na nieużywanych zmiennych, niepotrzebne wywołanie funkcji itp. Tak jakby miało to związek z umiejscowieniem poszczególnych fragmentów w pamięci flash.
Przykład z praktyki: program nie działa z włączoną optymalizacją. Zachowuje się w nietypowy sposób - jedna ze zmiennych w pętli głównej "blokuje się" jeśli wywołam pewną funkcję i pozwolę jej dłużej pracować (funkcja nieblokująca na zasadzie maszyny stanu, wywoływana z każdym obrotem pętli).
Zablokowanie zmiennej w pętli głównej polega na tym, że warunki przypisujące tej zmiennej określone wartości nie są w stanie jej modyfikować.
Teraz dopisuję w głównej pętli np taką linijkę:
itoa(testflag,temp,10);
i w magiczny sposób program po skompilowaniu działa poprawnie, choć zmienna temp nie jest nigdzie używana. zmienna testflag przestaje się "blokować".
To jeszcze nic, dopisuję LCD_Home() zamiast itoa i też program zaczyna działać normalnie. To samo dzieje się jak dopiszę kilka inkrementacji jakiejkolwiek zmiennej. Wszystko co zwiększa długość kodu magicznie leczy program.
Czy ktoś się z tym spotkał? Mam drugi raz podobny przypadek. W innym projekcie z kolei chodziło o blokowanie losowymi wartościami jednej z komórek tablicy. Pomagało dopisanie kilku linijek dowolnego kodu bądź zwiększenie rozmiaru tablicy z 48 na 100 elementów, mimo że była to ostatnia definiowana tablica w RAMie. Tablica była statyczna globalna. Również w tym przypadku wyłączenie optymalizacji leczyło program.
