Salta al contenuto
Note per Studenti Esercizio 10 · sostenibilità di tre sorgenti di interruzione con e senza nesting (temi d'esame gennaio, luglio e settembre 2026)

Esercizio 10sostenibilità di tre sorgenti di interruzione con e senza nesting (temi d'esame gennaio, luglio e settembre 2026)

Esame
In questa pagina 6

Testo (temi d'esame gennaio 2026 problema P2, terzo appello 13 luglio 2026 problema P2, quarto appello 15 settembre 2026 problema P2). Un microcontrollore gestisce 3 sorgenti di interruzione. Trascurando tutti i ritardi e considerando i tempi di latenza intrinseci già inclusi nelle durate indicate, si determini per ciascuna tabella: (a) se il sistema è sostenibile senza nesting; (b) se è sostenibile con nesting; (c) la massima durata possibile per la ISR2, con nesting e a parità di tutti gli altri dati; (d) la massima frequenza possibile per IRQ1, sempre con nesting e a parità di tutti gli altri dati.

Sorgente Priorità gennaio 2026 Td/TpT_d/T_p [µs] luglio 2026 Td/TpT_d/T_p [µs] settembre 2026 Td/TpT_d/T_p [µs]
IRQ1 1 3 / 10 3 / 12 2 / 10
IRQ2 2 5 / 20 5 / 18 3 / 10
IRQ3 3 25 / 500 25 / 200 4 / 10

Teoria usata: Sistemi di interruzioni - latenza, nesting e sostenibilitàCon $N$ sorgenti, ciascuna ISR $i$ ha durata $T_{d,i}$ (spesso già comprensiva della latenza intrinseca $T_{LI}$ e dell'istruzione in corso) e periodo minimo $T_{p,i}$. Condizione necessaria: $\sum_iT_{d,i}/T_{p,i}<1$ (la percentuale di impegno della CPU è la somma). Condizione di intervallo per ogni $i$ (priorità 1 = massima): $T_{d,i}+\sum_{k<i}n_k,T_{d,k};[+\max(T_{RC},\max_{j>i}T_{d,j})\text{ senza nesting}]\le T_{p,i}$, con $n_k=\lceil T_{p,i}/T_{p,k}\rceil$. Latenza massima della priorità $n$: con nesting $T_{LI}+\sum_{i<n}T_{ex,i}$; senza nesting si aggiunge $\max_{j>n}T_{ex,j}$.Sistemi di interruzioni - latenza, nesting e sostenibilità →, Sottosistema di I-O - polling, interruzioni e DMALe periferiche si collegano al bus con una interfaccia che ha registri di dati (DREG), controllo (CREG) e stato (SREG); nei µC e DSP sono mappati in memoria (si leggono e scrivono come locazioni). Poiché le periferiche sono asincrone e lente, la sincronizzazione avviene per polling (inefficiente), per interruzioni (la più usata) o per DMA (costoso, per grandi quantità di dati). Una interruzione: completa l'istruzione, salva il contesto (PC e registro di stato, spesso altro), esegue la ISR, ripristina. Le sorgenti si distinguono con ISR di stato, interruzioni vettorizzate o daisy-chaincollegamento delle periferiche in catena, in cui il segnale di riconoscimento passa dall'una all'altra; le NMI non sono mascherabili.Sottosistema di I-O - polling, interruzioni e DMA →.

Condizioni da verificare

(1) Utilizzo: ∑iTd,i/Tp,i<1\sum_iT_{d,i}/T_{p,i}<1 (condizione necessaria). (2) Per ogni ii (priorità 1 = massima): Td,i+∑k<ink Td,k+[max⁡j>iTd,j]≤Tp,iT_{d,i}+\sum_{k<i}n_k\,T_{d,k}+\big[\max_{j>i}T_{d,j}\big]\le T_{p,i}, con nk=⌈Tp,i/Tp,k⌉n_k=\lceil T_{p,i}/T_{p,k}\rceil; il termine tra parentesi quadre c'è solo senza nesting (qui TRC=0T_{RC}=0).

Gennaio 2026

Utilizzo 310+520+25500=0,60<1\frac3{10}+\frac5{20}+\frac{25}{500}=0{,}60<1.

  • (a) Senza nesting: IRQ1: 3+max⁡(5,25)=28>103+\max(5,25)=28>10 ✗. No. La ISR3, lunga 25 µs e non interrompibile, può ritardare IRQ1 oltre il suo periodo di 10 µs.
  • (b) Con nesting: IRQ1: 3≤103\le10 ✓; IRQ2: 5+n1⋅35+n_1\cdot3, n1=⌈20/10⌉=2n_1=\lceil20/10\rceil=2: 11≤2011\le20 ✓; IRQ3: 25+n1⋅3+n2⋅525+n_1\cdot3+n_2\cdot5 con n1=⌈500/10⌉=50n_1=\lceil500/10\rceil=50, n2=⌈500/20⌉=25n_2=\lceil500/20\rceil=25: 25+150+125=300≤50025+150+125=300\le500 ✓. Sì.
  • (c) Massima Td,2T_{d,2}: da IRQ2: Td,2+6≤20⇒Td,2≤14T_{d,2}+6\le20\Rightarrow T_{d,2}\le14; da IRQ3: 25+150+25 Td,2≤500⇒Td,2≤1325+150+25\,T_{d,2}\le500\Rightarrow T_{d,2}\le13. 13 µs (condizione dell'IRQ3).
  • (d) Massima frequenza di IRQ1: IRQ1: Tp,1≥3T_{p,1}\ge3; IRQ2: 5+⌈20/Tp,1⌉⋅3≤20⇒⌈20/Tp,1⌉≤5⇒Tp,1≥45+\lceil20/T_{p,1}\rceil\cdot3\le20\Rightarrow\lceil20/T_{p,1}\rceil\le5\Rightarrow T_{p,1}\ge4; IRQ3: 25+⌈500/Tp,1⌉⋅3+25⋅5≤500⇒⌈500/Tp,1⌉≤116⇒Tp,1≥500116=4,3125+\lceil500/T_{p,1}\rceil\cdot3+25\cdot5\le500\Rightarrow\lceil500/T_{p,1}\rceil\le116\Rightarrow T_{p,1}\ge\frac{500}{116}=4{,}31 µs. f1,max=14,31 μs=232 kHzf_{1,max}=\frac1{4{,}31\ \mu s}=\mathbf{232\ kHz}.

Luglio 2026

Utilizzo 312+518+25200=0,25+0,278+0,125=0,653<1\frac3{12}+\frac5{18}+\frac{25}{200}=0{,}25+0{,}278+0{,}125=0{,}653<1.

  • (a) Senza nesting: IRQ1: 3+max⁡(5,25)=28>123+\max(5,25)=28>12 ✗. No.
  • (b) Con nesting: IRQ1 3≤123\le12 ✓; IRQ2: 5+⌈18/12⌉⋅3=5+6=11≤185+\lceil18/12\rceil\cdot3=5+6=11\le18 ✓; IRQ3: 25+⌈200/12⌉⋅3+⌈200/18⌉⋅5=25+17⋅3+12⋅5=136≤20025+\lceil200/12\rceil\cdot3+\lceil200/18\rceil\cdot5=25+17\cdot3+12\cdot5=136\le200 ✓. Sì.
  • (c) Massima Td,2T_{d,2}: IRQ2: Td,2+6≤18⇒≤12T_{d,2}+6\le18\Rightarrow\le12; IRQ3: 25+51+12 Td,2≤200⇒Td,2≤10,3325+51+12\,T_{d,2}\le200\Rightarrow T_{d,2}\le10{,}33. 10,310{,}3 µs.
  • (d) Massima frequenza di IRQ1: IRQ2: 5+⌈18/Tp,1⌉⋅3≤18⇒⌈18/Tp,1⌉≤4⇒Tp,1≥4,55+\lceil18/T_{p,1}\rceil\cdot3\le18\Rightarrow\lceil18/T_{p,1}\rceil\le4\Rightarrow T_{p,1}\ge4{,}5; IRQ3: 25+⌈200/Tp,1⌉⋅3+60≤200⇒⌈200/Tp,1⌉≤38⇒Tp,1≥20038=5,2625+\lceil200/T_{p,1}\rceil\cdot3+60\le200\Rightarrow\lceil200/T_{p,1}\rceil\le38\Rightarrow T_{p,1}\ge\frac{200}{38}=5{,}26 µs. f1,max=190 kHzf_{1,max}=\mathbf{190\ kHz}.

Settembre 2026

Utilizzo 210+310+410=0,9<1\frac2{10}+\frac3{10}+\frac4{10}=0{,}9<1.

  • (a) Senza nesting: IRQ1: 2+max⁡(3,4)=6≤102+\max(3,4)=6\le10 ✓; IRQ2: 3+2⋅1+4=9≤103+2\cdot1+4=9\le10 ✓ (n1=⌈10/10⌉=1n_1=\lceil10/10\rceil=1); IRQ3: 4+2+3=9≤104+2+3=9\le10 ✓. Sì.
  • (b) Con nesting: IRQ1 22; IRQ2 55; IRQ3 4+2+3=94+2+3=9: tutte ≤10\le10 ✓. Sì (qui il nesting non serve, perché le ISR sono brevissime).
  • (c) Massima Td,2T_{d,2}: IRQ2: Td,2+2≤10⇒≤8T_{d,2}+2\le10\Rightarrow\le8; IRQ3: 4+2+Td,2≤10⇒Td,2≤44+2+T_{d,2}\le10\Rightarrow T_{d,2}\le4. 4 µs.
  • (d) Massima frequenza di IRQ1: IRQ3: 4+⌈10/Tp,1⌉⋅2+3≤10⇒⌈10/Tp,1⌉⋅2≤3⇒⌈10/Tp,1⌉=1⇒Tp,1≥104+\lceil10/T_{p,1}\rceil\cdot2+3\le10\Rightarrow\lceil10/T_{p,1}\rceil\cdot2\le3\Rightarrow\lceil10/T_{p,1}\rceil=1\Rightarrow T_{p,1}\ge10 µs. f1,max=100 kHzf_{1,max}=\mathbf{100\ kHz} (a 100 kHz l'utilizzo è già 90%: è il valore corrente).
senza nesting con nesting Td,2maxT_{d,2}^{max} f1maxf_{1}^{max}
gennaio 2026 no sì 13 µs 232 kHz
luglio 2026 no sì 10,3 µs 190 kHz
settembre 2026 sì sì 4 µs 100 kHz

Errori comuni

  • Verificare solo ∑Td/Tp<1\sum T_d/T_p<1 (60% e 65% ma non sostenibili senza nesting).
  • Dimenticare di raccogliere nell'IRQ3 tutte le occorrenze delle sorgenti di priorità maggiore nel suo periodo (nk=⌈Tp,3/Tp,k⌉n_k=\lceil T_{p,3}/T_{p,k}\rceil).
  • Fermarsi alla prima condizione quando si cerca un massimo: va presa la più restrittiva (qui sempre quella dell'IRQ3).
  • Usare nk=⌊Tp,i/Tp,k⌋n_k=\lfloor T_{p,i}/T_{p,k}\rfloor senza arrotondare per eccesso.

Versione ripasso

Testo. Tre sorgenti (Td/TpT_d/T_p in µs): gennaio 3/10, 5/20, 25/5003/10,\,5/20,\,25/500; luglio 3/12, 5/18, 25/2003/12,\,5/18,\,25/200; settembre 2/10, 3/10, 4/102/10,\,3/10,\,4/10. Sostenibilità senza e con nesting, Td,2maxT_{d,2}^{max}, f1maxf_1^{max} (2026).

Teoria collegata