簡體   English   中英

Cortex M3上的非拇指ARM代碼

[英]Non-Thumb ARM code on Cortex M3

我有一些要在Cortex M3上運行的ARM代碼。 我的大部分代碼都是用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

使用arm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib

我用blx r4分支到它-如果基地址&3是0,它應該交換。

在GDB中逐步執行此操作,即使地址包含正確的數據,它也會在到達顯示的行時立即進行HardFaults處理。

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

該代碼(帶有BLX)可完美地用於Thumb代碼...

知道發生了什么嗎? 謝謝!

Cortex-M處理器不支持ARM模式指令。 它們僅支持Thumb-2,其中包含16位和32位指令的混合。 無法在Cortex-M上運行ARM指令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM