I've got some ARM code that I'm trying to run on the Cortex M3. The majority of my code in written in Thumb, compiled from C - but for some functions I'd like to be able to run normal ARM code (as I understand it, this is possible on the M3?).
So...
Original C code and assembly:
int donothing(int a) {
return a;
}
00000068 <donothing>:
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
Compiled using arm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib
I branch to this with blx r4
- which should exchange if the base address&3 is 0, which it is.
Stepping through this in GDB, it HardFaults as soon as it gets to the line shown, even though the address contains the right data.
(gdb) p/x *0x2000934c
$2 = 0xe52db004
The code (with BLX) works perfectly for Thumb code though...
Any idea what's going on? Thanks!