IAR调试stm8单片机时延时函数被优化的问题
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
{
;
}
}
}