IAR优化等级选到最高,调用以下延时函数时会被编译器直接优化,无法达到延时的效果。
void delay_n_ms(u32 time)
{
u32 m = 0;
u16 n = 0;
for(;m < time;m++)
{
for(n = 0;n < 2720;n++)//16Mhz
{
;
}
}
}
在函数的变量前加volatile关键字后问题解决。
void delay_n_ms(u32 time)
{
volatile u32 m = 0;
volatile u16 n = 0;
for(;m < time;m++)
{
for(n = 0;n < 2720;n++)//16Mhz
{
;
}
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』