Ich habe eine andere Frage über eine Inline-Assembly-Anweisung in Bezug auf eine Kontextwechsel. Dieser Code mag funktionieren, aber ich bin mir nicht sicher bei 100%, also übergebe ich diesen Code an die Pros von stackoverflow ;-)Kontextschalter mit Arm Inline-Assembly
Ich kompiliere mit gcc (keine Optimierung) für einen arm7TDMI. Irgendwann muss der Code einen Kontextwechsel durchführen.
/* Software Interrupt */
/* we must save lr in case it is called from SVC mode */
#define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr")
// Note : code = 0x23
Wenn ich den kompilierten Code überprüfen, erhalte ich dieses Ergebnis:
svc 0x00000023
Die Person vor mir, die codiert diese schrieb: „Wir müssen lr speichern“, aber in der Code kompiliert, ich weiß nicht Sehen Sie irgendwelche Spuren von lr gespeichert werden.
Der Grund, warum ich, dass Code denken falsch sein könnte, ist, dass der Programmablauf für einige Zeit, bevor sie in einem Reset-Ausnahme und einer der letzten, was los ist der Code auszuführen ist ein Kontextschalter ...