Arten, wie ein Interrupt generiert wird

Gast #841937
Lesenswert?

Hi zusammen,
die Frage steht sozusagen im Betreff.
So wie ich mitbekommen habe, gibt es mehrere Arten, wie ein Interrupt 
generiert wird. Die eine Methode ist wohl schneller als die andere und 
hat mit Kontext Kopie zu tun.
Wenn man unter µVision programmiert und Programmblöcke teilweise mit 
Dave bildet, da steht bei der Funktion für das Interrupt "using 
RB_LEVEL.. ".
Durch das Auskommentieren von dieser Zeile schaltet man angeblich 
zwischen den Methoden um.
Weiß einer was das für Methoden sind und worin die sich unterscheiden?

Danke im vorab
Gast #842013
Lesenswert?

Hi,

using hat aber nix mit der 'Interruptgenerierung' zu tun, sondern mit 
der ISR.
Beim C167 gibt es ein Feature, mit dem man den kompletten Registersatz 
an eine andere Adresse im RAM legen kann. Das hat den Vorteil, dass man 
nicht alle Register, die man in der ISR verwendet und die alten Werte 
wieder braucht auf den Stack sichern braucht.
Und dieses Feature benutzt Du, wenn Du hinter die ISR ein 'using' setzt.

Viele Grüße
Gast #842049
Lesenswert?

Hi,

also, nochmal.
Die Register werden über einen Pointer referenziert. Ist ein spezielles 
Register (den Namen kann ich Dir leider nicht sagen, könnte aber der 
ContextPointer sein).
Wenn Du also z.B. R1 benutzt wird der Offset von R1 auf den Wert des 
Pointers dazu addiert und diese Stelle ist R1.
Wenn Du jetzt diesen Pointer auf eine andere Adresse zeigen lässt (mit 
Hilfe von using), so hast Du einen anderen Registersatz, der nicht die 
Werte des alten Satzes beinhaltet und diese damit auch nicht 
überschreiben kann.
Deswegen brauchst Du auch die Register nicht auf den Stack sichern, da 
deren Inhalt nicht überschrieben wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren