Puste pętle w WinAvr o co chodzi.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
jareks91
Użytkownik
Posty: 157
Rejestracja: 15 kwie 2005, 13:30

Puste pętle w WinAvr o co chodzi.

Post autor: jareks91 » 20 mar 2006, 21:07

Mam problem.
Chciałbym stworzyć pustą pętle przed główna pętlą programu i jeśli napisze taką pętle:

while(g_ilosc_wejsc_do_timera0<3)
{
lcd_dec(g_ilosc_wejsc_do_timera0);
}
To program po spełnieniu warunku idzie dalej. Natomiast jeśli napiszę tak:

while(g_ilosc_wejsc_do_timera0<3)
{
}
To program wchodzi do pętli i już nie chce z niej wyjść i nie wchodzi do pętli głównej. Dlaczego tak się dzieje??
Prosze o pomoc
Pozdrawiam

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 20 mar 2006, 21:39

Najprawdopodobniej g_ilosc_wejsc_do_timera0 nie jest zdeklarowana jako volatile. W takim przypadku, przy pierwszym kodzie, jeśli funkcja zostanie wykonana, kompilator zakłada, że mogła ona zmienić zawartość zmiennej i sprawdza ją ponownie. Jeśli pętla jest pusta - kompilator wczytuje zmienną tylko raz i trzyma ją cały czas w rejestrach. Jeśli jej wartość chcesz zmieniać w przerwaniach - koniecznie nadaj jej modyfikator "volatile".

jareks91
Użytkownik
Posty: 157
Rejestracja: 15 kwie 2005, 13:30

Post autor: jareks91 » 20 mar 2006, 23:13

No tak to był ten błąd.
Bardzo dziękuje
Pozdrawiam

ODPOWIEDZ