Hi, Ich will inline-Assembler-Code in eine C-Datei einfügen. 1. Frage: Kann man ARM und Thumb-Code miteinander vermischen? 2. Frage: Wie kann ich zwischen ARM und Thumb-Code hin und herschalten (mit welchem Befehl) liebe Grüße
Liege ich mit dieser Annahme richtig: 1. Eine Funktion kann nur im ARM oder im Thumb-Modus sein. Eine Mischung aus beiden Befehlssätzen in einer Funktion ist nicht möglich. 2. Die unterschiedlichen Funktionen aber können unterschiedlichen Modis angehören. D. h. während Funktion-1 z. B. im ARM-Modus ist, kann Funktion-2 im Thumb-Modus sein. Lieg ich richtig?
>1. Frage: Kann man ARM und Thumb-Code miteinander vermischen? Das Zauberwort heißt: Interworking Geht aber nicht auf allen ARM Prozessoren. Welchen hast du denn? >2. Frage: Wie kann ich zwischen ARM und Thumb-Code hin und herschalten >(mit welchem Befehl) Das entnimmst du der Doku deines ARM Kernes. Für einen ARM7TDMI sieht es folgender Maßen aus:
1 | The operating state of the ARM7TDMI core can be switched between ARM |
2 | state and Thumb state using the BX instruction. |
[Quelle: ARM7TDMI Technical Reference Manual Revision: r4p1] Gruß Oliver
Hi, In der Doku steht auch, dass man die Direktiven "THUMB" bzw. "ARM" verwenden soll, doch diese erkennt mein ARM Compiler Toolchain in Microvision nicht. Kann mir da jemand bitte weiterhelfen? liebe Grüße
D. h. also, dass ich in einer Funktion ARM und Thumb-Code nicht vermischen kann, sondern eine Funktion nur im ARM oder nur im Thumb-Modus sein kann oder?
Was aber verwirrend ist, dass da steht: Inline Assembler nicht verfügbar, wenn für Thumb-State kompiliert wird. Das stimmt aber nicht, in Microvision kann ich auch inline-Assemblercode angeben, obwohl ich für Thumb-State kompiliere. Könnt ihr mich da bitte aufklären?
In einer Funktion wird man Thumb und ARN Code nicht vermischen können. Im Uv kann man für jedes File in den Options ARM oder Thumb anklicken. Grüsse
Und was ist mit der "Branching-Technik": Also langsam versteh ich den Assembler von Keil wirklich nicht. Kann mir bitte jemand erklären wieso das hier nicht geht: 1. int main(void) { __asm { ; Dies ist ein simpler Kommentar } } --> Der Kommentar führt zum Syntax-Error 2. int main(void) { __asm { start: MOV r1, #2 MOV r2, r1 LDR r0, =thumbMode+1 MOV lr, pc BX r0 thumbMode: MOV r0, #3 MOV r1, r0 BX lr } } --> Hier wird nach BX r0 leider nicht zur Stelle "thumbMode" gesprungen. Sondern wo ganz anders hin im Speicher. Please help me :(
Ludwig schrieb: > MOV lr, pc Tja, wohin soll denn die Reise gehen? Hast du dir nen Gedanken gemacht,wohin PC zum aktuellen Zeitpunkt hinzeigt? W.S.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.