Hvad kan man forvente, hvis koden i timeren afbryder ISR ikke afsluttes, før afbrydelsen kaldes igen? For eksempel Timer0 ISR (TIMER0_COMPA_vect) {} på Uno. Dette er til fejlfindingsformål i et komplekst program. Tak.
Hvad kan man forvente, hvis koden i timeren afbryder ISR ikke afsluttes, før afbrydelsen kaldes igen? For eksempel Timer0 ISR (TIMER0_COMPA_vect) {} på Uno. Dette er til fejlfindingsformål i et komplekst program. Tak.
PS skal du være opmærksom på, at ISR-makroen som standard slukker for global afbrydelse (cli) i begyndelsen af funktionen og sætter den tilbage i slutningen. Du kan genaktivere afbrydelser inde i ISR, men du skal være meget forsigtig her, da afbrydelser kan indlejres og forårsage stack-overløb.
Du kan genaktivere afbrydelser inde i ISR , men det betyder kun, at anden afbrydelse kan afbryde denne ISR, men aldrig den samme vektor. (dvs. kun en ISR pr. vektor kan køre på samme tid). Så i dit tilfælde kan timeren ISR ikke afbrydes af den samme timerafbrydelse.
Det kaldes først, før den aktuelle afbrydelse er afsluttet. Så snart den aktuelle afbrydelsesfunktion vender tilbage, vil den afventende afbrydelse udløse og kalde ISR igen.