Interrupt e registri di ATmega328

@lesto

Quando dici che i timer non avanzano all'interno delle ISR dici una cosa errata, sempre se consideriamo il timer come qualcosa di molto simile a quello descritto da me. Invece ha raggione nel caso della variabile su cui lavora millis() che viene aggiornata dentro una ISR.

C'è da fare attenzione al fatto che il core ha il TIMERx impegnato e quindi periodicamente viene esguita la ISR preposta, allora nel caso di altri timer abilitati ed in genere altre ISR interne o esterne abilitate c'è da fare attenzione a scrivere codice nella ISR che sia piiù corto possibile perche, quando il puntatore esegue la ISRx le variabili che sono aggionate in ISRy non possono essere eseguite perchè prima deve terminare ISRx.

Se si fa ammeno del core di Arduino e si usano più ISR si deve prestare la stessa attenzione.

Astro ha spiegato brevemente come si compartano di default le IRQ, forse è il caso di ricordarlo, brevemente. Le IRQ vengono notificate e se possibile eseguite, se ci sono troppe IRQ in unità di tempo le IRQ vengono annotate nello stack (che si riempe) terminata una ISR vengono eseguite quelle che sono ancora nello stack. Ogni volta che termina una ISR PC torna ad eseguire almeno fuori da ogni ISR per almeno 3 cicli di clock.

Ciao.