[英]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.