Cortex M3上的非Thumb ARM代码

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代码,但...

知道发生了什么事吗?谢谢!

Var*_*der 5

Cortex-M处理器不支持ARM模式指令.它们仅支持Thumb-2,它包含16位和32位指令的混合.无法在Cortex-M上运行ARM指令.