簡體   English   中英

ARM程序集“延遲”功能無法使用unified / thumb-2語法

[英]ARM assembly 'delay' function not working with unified / thumb-2 syntax

我正在使用以下代碼來執行簡單的基於計數器的延遲/等待ARM:

.thumb_func
dowait:
   ldr r7,=0x200000
dowaitloop:
   sub r7,#1
   bne dowaitloop
   bx lr        

我從dwelch的blinker01 mbed_samples中獲得了這個功能,這在其他LED閃爍類型的示例程序中運行良好。 但是我正在進行的程序需要將.syntax unified在頂部,因為我使用的是Thumb-2指令(例如ITTEE)。

我懷疑“.syntax統一”是問題,因為我采用了已知工作的blinker01示例並添加了.syntax unified ,當我上傳到我的電路板時它不再有效。

雖然我沒有找到所有gdb的東西來證明它,但這個函數似乎沒有計算/延遲。

是否有不同的方法來重寫這個“延遲”函數以使用統一/ Thumb-2語法?

如果希望指令更​​新標志,則需要使用SUBS

.syntax unified
.thumb_func
dowait:
   ldr r0,=0x200000
dowaitloop:
   subs r0,#1
   bne dowaitloop
   bx lr   

另請注意:R7不是clobber寄存器,因此在使用“C”代碼中的dowait函數時,會出現錯誤,因為編譯器不希望修改R7。 這就是我把它改成R0的原因。

暫無
暫無

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

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