工具/软件:TI C/C++编译器
我使用延迟函数 SysCtlDelay()来延迟毫秒,该函数的实现方式如下:
void SlepMillisecond (U16 u16milisecond) { SysCtlDelay (SysCtlClockGet ()/ 3000 * u16milisecond);//1ms }
void
SysCtlDelay (uint32_t ui32Count)
{
_asm (" subs r0、#1\n"
" bne.n SysCtlDelay\n"
" BX lr");
}
在正常情况下、工作正常。 但是、当我更改一些预编译宏(由我自己定义)时、此函数将输出双倍延迟时间。 我确信 预编译的宏 不会影响此代码。
我使用示波器检查时钟是否正常。 我还检查了 anothter 函数 执行时间、但是预编译的宏是更改的、执行时间是相同的、除了函数 SysCtlDelay()。
我单步执行此函数来调试反汇编、 在这两种情况下执行的汇编指令数是相同的。 因此、我真的不明白为什么 在相同代码和相同时钟的情况下它会有不同的结果?
编译器环境:IAR Embedded Workbench 7.0


