Ich wuerde gerne im IAR Compiler im Inline-Assembler fuer STM32 aus einem Bootloader mein Hauptprogramm anspringen. Meine Idee: asm("ldr r0, =0x08008000"); [hier wird dann noch der Stack geladen und dann gesprungen] Leider sieht der Compiler/Assembler einen Syntaxerror in der Zeile am Gleichheitszeichen. Hat jemand eine Idee wie man das Problem loesen kann? Olaf
Olaf schrieb: > asm("ldr r0, =0x08008000"); Du kannst keinen 32Bit-Wert in einem Thumb2-Befehl unterbringen. Der ist nämlich maximal 32-bit breit. Merkst du was? Du könntest zum Beispiel die Konstante 0x08008000 im Code (hinter dem Sprung) ablegen und relativ zum PC laden. Gruß Oliver
Eumel schrieb: > weil in r0 nur 8 bit passen? Erm ... nein? Eine Fehlermeldung wäre hilfreich und welche Instructions aktiv sind ARM32, Thumb, Thumb2?
Oliver J. schrieb: > Du kannst keinen 32Bit-Wert in einem Thumb2-Befehl unterbringen. Der ist > nämlich maximal 32-bit breit. Merkst du was? > > Du könntest zum Beispiel die Konstante 0x08008000 im Code (hinter dem > Sprung) ablegen und relativ zum PC laden. Das macht LDR Reg,const bereits. Es ist eine Pseudoinstruktion. Bei MOV Reg,const wäre das richtig.
Maxx schrieb: > Das macht LDR Reg,const bereits. Es ist eine Pseudoinstruktion. > Bei MOV Reg,const wäre das richtig. Ah ok.
Wenn IAR die =xxx Syntax nicht mag, dann eben auf diesem Weg: mov r0, #0x8000 movt r0, #0x0800 oder identisch damit, wenn der IAR wenigstens das mag: mov32 r0, #0x08008000 Braucht aber Thumb2, geht also nicht beim Cortex M0.
> oder identisch damit, wenn der Assembler wenigstens das mag: > mov32 r0, #0x08008000 Okay, das hat er genommen.... Olaf
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.