Gor*_*ams 2 assembly arm thumb cortex-m
我有一些ARM代码,我试图在Cortex M3上运行.我用Thumb编写的大部分代码都是用C语言编写的 - 但对于某些函数,我希望能够运行普通的ARM代码(据我所知,这在M3上是可行的吗?).
所以...
原始C代码和汇编:
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
Run Code Online (Sandbox Code Playgroud)
编译使用 arm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib
我转而使用blx r4- 如果基地址&3为0,它应该交换.
在GDB中逐步执行此操作,即使地址包含正确的数据,它也会一旦到达显示的行,就会进入HardFaults.
(gdb) p/x *0x2000934c
$2 = 0xe52db004
Run Code Online (Sandbox Code Playgroud)
代码(使用BLX)适用于Thumb代码,但...
知道发生了什么事吗?谢谢!