我使用下面的代码为ARM做一个简单的基于计数器的延迟/等待:
.thumb_func
dowait:
ldr r7,=0x200000
dowaitloop:
sub r7,#1
bne dowaitloop
bx lr
字符串
我从dwelch的blinker01 mbed_samples得到了这个函数,它在其他led Flink 类型的示例程序中工作得很好。然而,我目前正在编写的程序需要在顶部有.syntax unified
,因为我使用的是Thumb-2指令(例如:ITTEE)。
我怀疑“.syntax unified”是问题所在,因为我使用了已知工作的blinker01 example并添加了.syntax unified
,当我上传到我的董事会时,它不再工作。
虽然我还没有所有的gdb stuff figured out来证明这一点,但该函数似乎没有计数/延迟。
是否有其他方法来重写这个“delay”函数以使用unified / Thumb-2语法?
1条答案
按热度按时间oug3syen1#
当您希望指令更新标志时,需要使用
SUBS
。字符串
另一个注意事项:R7不是一个clobber寄存器,所以如果你从“C”代码中使用dowait函数,就会出现错误,因为编译器不希望R7被修改。这就是为什么我把它改成了R0。