2 Stimmen

Nicht-Daumen-ARM-Code auf Cortex M3

Ich habe ARM-Code, den ich auf dem Cortex M3 ausführen möchte. Der Großteil meines Codes ist in Thumb geschrieben und aus C kompiliert - aber für einige Funktionen möchte ich normalen ARM-Code ausführen können (soweit ich weiß, ist das auf dem M3 möglich?).

Also...

Ursprünglicher C-Code und Assembly:

int donothing(int a) {
  return a;
}

00000068 :
  68:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
  6c:   e28db000    add fp, sp, #0
  70:   e24dd00c    sub sp, sp, #12
  74:   e50b0008    str r0, [fp, #-8]
  78:   e51b3008    ldr r3, [fp, #-8]
  7c:   e1a00003    mov r0, r3
  80:   e28bd000    add sp, fp, #0
  84:   e8bd0800    ldmfd   sp!, {fp}
  88:   e12fff1e    bx  lr

Kompiliert mit arm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib

Ich springe dorthin mit blx r4 - was austauschen sollte, wenn die Basisadresse&3 0 ist, was sie ist.

Beim Durchgehen dieses Codes in GDB wird sofort ein HardFault ausgelöst, sobald er zur angezeigten Zeile kommt, obwohl die Adresse die richtigen Daten enthält.

(gdb) p/x *0x2000934c 
$2 = 0xe52db004

Der Code (mit BLX) funktioniert jedoch perfekt für Thumb-Code...

Weiß jemand, was hier los ist? Danke!

5voto

Variable Length Coder Punkte 7720

Cortex-M-Prozessoren unterstützen keine ARM-Modus-Anweisungen. Sie unterstützen nur Thumb-2, das eine Mischung aus 16- und 32-Bit-Anweisungen enthält. Es gibt keine Möglichkeit, ARM-Anweisungen auf einem Cortex-M auszuführen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X