Forum: Mikrocontroller und Digitale Elektronik Interruptfreigabe nach atomarem Zugriff


von Ralf G. (ralg)


Lesenswert?

Ich habe hier mal ein Ergebnis des GCC-Compilers:
1
 10e:  cd b7         in  r28, 0x3d  ; 61
2
 110:  de b7         in  r29, 0x3e  ; 62
3
 112:  2c 97         sbiw  r28, 0x0c  ; 12
4
 114:  0f b6         in  r0, 0x3f  ; 63
5
 116:  f8 94         cli
6
 118:  de bf         out  0x3e, r29  ; 62
7
 11a:  0f be         out  0x3f, r0  ; 63
8
 11c:  cd bf         out  0x3d, r28  ; 61

Nach der Reservierung einiger Bytes auf dem Stack, wird dieser neue 
Stackpointer unter Interruptsperre in die entsprechenden Register 
zurückgeschrieben. Müsste SREG nicht als letztes beschrieben werden? 
Oder dauert das sowieso eine Weile, ehe ein möglicher Interrupt davon 
weiß?

von Michael G. (mg800)


Lesenswert?

Logischer wäre es tatsächlich wenn es heißen würde

out $3e, r29
out $3d, r20
out $3f, r0

Meiner Erfahrung nach kann es je nach art des interrupts zwischen 2 und 
3 takte dauern bis die ISR aufgerufen wird bzw man zur IVT springt.

von Ralf G. (ralg)


Lesenswert?

Michael Gehring schrieb:
> Meiner Erfahrung nach kann es je nach art des interrupts zwischen 2 und
> 3 takte dauern bis die ISR aufgerufen

'kann dauern'...
Eben dazu habe ich keine konkreten Zahlen gefunden. Deshalb wundere ich 
mich ein wenig.

von (prx) A. K. (prx)


Lesenswert?

Der Befehl direkt nach dem Restore des Interrupt-Enable-Flags wird in 
jedem Fall noch ausgeführt, auch wenn bereits ein Interrupt ansteht. Das 
ist so also korrekt und reduziert die Zeit, in der Interrupts 
abgeschaltet sind, auf das Minimum.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.