2016-09-30 18 views
0

Es gab nicht genug Informationen über die SVC im Internet. Ich habe gelernt, wie SVC-Handler funktioniert, aber die Sache ist, ich bekomme nicht, warum es die Register R0, R1, R2, R3 und R12 auf den Stapel stapelt. es sei denn, es hat einen Zweck, den es nicht speichert, also was ist die für den Prozessor wichtige Information, die in diesen Registern vorhanden ist.SVC HANDLER: ARM Cortex m Prozessor

und irgendwelche pls schlagen vor, wie man ARM Cortex M3 lernt? Wie man beginnt zu lernen, so dass es keine Verwirrungen in den grundlegenden Dingen wie dem oben genannten geben wird. dankt Ihnen im Voraus

Antwort

0

Dies liegt daran, jedes Mal, wenn Sie eine Funktion aufrufen, die ABI, dass beschreibt:

  • Register r0 - r3 die Parameter enthalten, und kann als Scratch-Register verwendet werden. Dies bedeutet, dass die Funktion sie nicht speichern muss (Sie werden geändert)
  • Andere Register müssen von der Funktion gespeichert werden, dh sie müssen beim Zurückkehren der Funktion auf den vorherigen Wert zurückgesetzt werden.

Dies ist ähnlich für r12.

Wenn also SVC einen C-Function-Handler aufruft, werden die Register r0 - r3 durch die C-Funktion beschädigt, während andere Register verwaltet werden. In diesem Fall übernimmt die Hardware automatisch das Stapeln, so dass wir die Garantie haben (Wenn die C-Funktion korrekt ist), dass alle Register den gleichen Wert haben wie vor dem Aufruf des SVC.

Beachten Sie, dass es für SVC akzeptabel gewesen wäre zu wissen, dass diese Register beschädigt sind (Weil wir wissen, wann wir den SVC-Befehl aufrufen). Aber andere Ausnahmen (wie Unterbrechungen) haben das gleiche Verhalten, und für diese ist dies wichtig, da wir nicht wissen, wann sie passieren.

In Bezug auf ein Buch, das weiß ich dieses Buch so kann ich es empfehlen:

The Definitive Guide auf die ARM Cortex-M3, Second Edition 2nd Edition von Joseph Yiu

+0

Der eigentliche Punkt ist, dass die Ausnahme Der Eintrag _selbst_ sieht genau wie ein EABI-Funktionsaufruf aus (wobei die Hardware sich um die vom Anrufer gespeicherten Register kümmert), und daher sind Ausnahmehandler einfach reguläre C-Funktionen (beachte auch, dass es keine spezielle Ausnahme-Rückgabeanweisung gibt). – Notlikethat

+0

Herr, können Sie bitte erklären die TBB Anweisung auch ....... weil ich mit Schwierigkeiten konfrontiert bin, dass ich nicht bekomme, wie es zu dem bestimmten Fall geht und warum wir die DCB() dazwischen schreiben .. –

Verwandte Themen