Cytuj:
Czy masz w switch sekcję default?
Nie mam, ponieważ na razie nie mam nic takiego, co mogłoby się tam wykonywać. Dla pewności spróbowałem dodać pusty default: {}; i nic to nie zmieniło.
Cytuj:
wyrażenia, funkcje czy inne bloki programu które nigdy nie zmieniają wartości są zamieniane przez kompilator w stałą
Podejrzewałem, że może chodzić o coś takiego. Faktycznie, w funkcji main() tablica saved_state nie jest nigdy modyfikowana (tylko w przerwaniu), a to jedyna "zmieniająca się" rzecz w funkcji debounce().
Z funkcji button_press zostało tyle:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak temu zaradzić?
------------------------
Edit: oczywiście z wyłączoną optymalizacją (i usunięciem inline) wszystko działało poprawnie, ale nie tędy droga - zwłaszcza, że korzystam z funkcji delay.
Dzięki podpowiedzi poszperałem i znalazłem częściowe rozwiązanie - mogę zadeklarować tablicę z modyfikatorem volatile i f. button_press() nie zostaje usunięta. Jednak wewnątrz debounce(), usuwana jest zmienna debounced_state.
Czy volatile to jedyne wyjście?