ARM组装延迟'函数不使用unified / thumb-2语法

时间:2011-11-10 04:05:23

标签: assembly arm delay cortex-m3

我正在使用以下代码执行简单的基于计数器的延迟/等待ARM:

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

我从dwelch的blinker01 mbed_samples获得了这个功能,这在其他led闪烁类型的示例程序中运行良好。但是,我目前正在处理的程序需要在{1}}处于顶部,因为我使用的是Thumb-2指令(例如ITTEE)。

我怀疑“.syntax统一”是一个问题,因为我采用了已知工作blinker01 example并添加了.syntax unified,当我上传到我的主板时它就不再有用了。

虽然我还没有全部gdb stuff figured out来证明这一点,但该函数似乎没有计算/延迟。

有没有不同的方法来重写这个“延迟”功能以使用统一/ Thumb-2语法?

1 个答案:

答案 0 :(得分:4)

当您希望指令更​​新标志时,您需要使用SUBS

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

另一个注意事项:R7不是clobber寄存器,因此在使用“C”代码中的dowait函数时,会出现错误,因为编译器不希望修改R7。这就是我将其改为R0的原因。

相关问题