Forum: Mikrocontroller und Digitale Elektronik ARM Assembler Programmierer anwesend?


von Olaf (Gast)


Lesenswert?

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

von Eumel (Gast)


Lesenswert?

weil in r0 nur 8 bit passen?

von Oliver J. (skriptkiddy)


Lesenswert?

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

von Frank M. (aktenasche)


Lesenswert?

:D

von Maxx (Gast)


Lesenswert?

Eumel schrieb:
> weil in r0 nur 8 bit passen?

Erm ... nein?

Eine Fehlermeldung wäre hilfreich und welche Instructions aktiv sind 
ARM32, Thumb, Thumb2?

von Oliver J. (skriptkiddy)


Lesenswert?


von Maxx (Gast)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

Maxx schrieb:
> welche Instructions aktiv
Er hat einen STM32 --> Thumb2

von Maxx (Gast)


Lesenswert?

Danke

von Oliver J. (skriptkiddy)


Lesenswert?

Maxx schrieb:
> Das macht LDR Reg,const bereits. Es ist eine Pseudoinstruktion.
> Bei MOV Reg,const wäre das richtig.
Ah ok.

von Eumel (Gast)


Lesenswert?

Ach, STM32...... war AVR blind.

von (prx) A. K. (prx)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.