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
Puste pętle w WinAvr o co chodzi.
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".