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!