Witam!
Trafiłem na dziwny problem i w zasadzie nie mogę się doszukac na google jasnej odpowiedzi, może ktoś pomoże:
mam taki kod:
SIGNAL(SIG_OVERFLOW0) { counter++; }
I on działa ok.
Mam taki kod:
SIGNAL(SIG_OVERFLOW0) { proc(); }
void proc(void) { counter++; }
I nie działa poprawnie. Teraz pytanie zanim zaczne kombinowac z symulatorem: czy wolno z wnętrza przerwań wołać funkcje ? Wydaje mi się, że nie ma problemu ze stosem, jednak z nieznanych mi przyczyn procesor idzie w maliny w tym drugim przypadku. Rejestry w przerwaniu używane w funkji "proc()" są przechowywane (przynajmniej tak widze analizując listing).
Wywoływanie funkcji z głownego kodu działa poprawnie.
Problem jest podczas używania flagi -O1 oraz O2 kompilatora, jesli zmienie na bez optymalizacji lub O3/O4 działa poprawnie (ale jest 2x dłuzszy kod więc to żadne rozwiązanie :( ). Kompilator avr-gcc w wersji
3.4.1.