DCD Unterricht und IRQ stack
Ich studiere das Thema der Einrichtung von einem Stapel für die verschiedenen Modi von einem ARM-Prozessor (IRQ, Supervisor, User, ...).
Da die Einrichtung verschiedene stacks erfordert die gleiche Folge von Anweisungen (im Grunde nur die stack-Adresse ändern) ich werde Sie bitten, meine Frage ist der Rückgriff auf das problem der Einstellung der IRQ-stack.
Vorausgesetzt, ich habe Folgendes definiert:
IRQ_Stack EQU 0x8000
NoInt EQU 0xC0
IRQ32md EQU 0x12
Der folgende code wird verwendet, um den setup-stack (ich Zeilennummern hinzufügen aktivieren Kommentare):
1. MOV r2, #NoInt|IRQ32md
2. MSR CPSR_c, r2
3. LDR r13_irq, =IRQ_NewStack
4. ...
5. ...
6. IRQ_NewStack:
7. DCD IRQ_Stack
Linie 1 nur Lasten r2
für den Zweck der Deaktivierung von interrupts und die Eingabe IRQ-Modus
in Zeile 2, durch das laden der Wert in CPSR_c
.
Dann, auf der Linie 3, LDR
verwendet wird, laden Sie die (32-bit) - Adresse des IRQ_NewStack
label in der stack-pointer banked in IRQ-mode.
Könntest du bitte erklären Sie mir, was ist der Zweck der Instruktion auf Zeile 7?
Las ich auf der ARM-Handbuch, dass DCD
wird verwendet, um "behalten sich eine 32-bit-Wort,". Wenn ich lese "behalten sich eine 32-bit-Wort,", ich denke, es ist wie das reservieren von Speicherplatz für ein einzelnes 32-bit-variable, was bedeutet, dass DCD
fungiert als EQU
(kann EQU
ist nur ein makro für DCD
...).
Aber, wenn dies der Fall ist, warum sollte ich reserve nur ein 32-bit-Wort für den ganzen Stapel, das wachsen kann, größer als eine 32-bit-Wort?
Dank.
- Ich denke, Sie haben einen Fehler in Ihrem code. Es sollte entweder
LDR r13_irq, =IRQ_Stack
oderLDR r13_irq, IRQ_NewStack
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den DCD Rückstellungen 1 32-bit-Wort, die Punkte auf den stack, es wird nicht der Stapel selbst.