2016-11-22 3 views
0

Ich versuche, ein einfaches RTOS, das für arm926ejs geschrieben wurde, in Arm-Cortex-A9 zu portieren. Während der Kontextschalter Bezug genommen wird, stieß ich auf die folgenden Anweisungen,STR- und LDR-Anweisung in ARM-Assembly

_userIntrStackPtr: 
    .word 0x0 

STR  sp,_userIntrStackPtr 

LDR  r0,__userStackPtr2Ptr 

Aber, wenn ich versuche, den Code zu kompilieren, ich den Fehler

Error: internal_relocation (type: OFFSET_IMM) not fixed up 

Kann jemand bitte die oben Anweisung erklären? Auch als ich andere Codes bezog, sah ich ähnliche Anweisungen wie,

LDR  r0,=__userStackPtr2Ptr 

Was ist der Unterschied zwischen diesen beiden Methoden? Wie kann ich diese Etiketten mit dem Befehl str und ldr verwenden? Ich bin nicht gut mit der Montage. Bitte helfen Sie ..

Antwort

2

Die angegebene Form der Anweisungen verwendet PC relative Adressierung und einige Assembler können Einschränkungen für sie, wie die Symbole in den gleichen Abschnitt, so dass der Offset bekannt ist. Der oben genannte Code funktioniert allerdings mit gnu assembler 2.24.51.20131021. Ich schätze, Sie haben nicht den tatsächlichen MCVE bereitgestellt.

Für den zweiten Teil der Frage: die = lädt die Adresse an, damit Sie eine andere LDR/STR müssen die Speicheroperation auszuführen. Zum Beispiel:

LDR r0, =_userIntrStackPtr 
STR sp, [r0] 
LDR r0, =__userStackPtr2Ptr 
LDR r0, [r0] 
+0

Danke für die Antwort Spaßvogel. Ich habe die Abschnitte geändert und jetzt ist der Fehler weg. Obwohl alles in den Textbereich des Linkers gehörte, war einer in .text und der Rest in .text.vectors. Ich habe jetzt beide auf .text und seine Zusammenstellung geändert. Ich habe die Arbeit nicht getestet, aber der Fehler ist weg. – Ajeesh

Verwandte Themen