void delay_ms(u16 nms)有疑问

2019-07-20 06:56发布

void delay_ms(u16 nms)
{
    u32 i;
    for(i=0;i<nms;i++)
    {
        delay_us(1000);
    }   
}

我用的例程是F4的串口例程,编译器优化等级是2,有用到delay_ms(10)。用到delay_ms函数里的变量i是没有加volatie的,我认为delay_us(1000)只执行一次才对啊,为什么还会执行10次?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
Yyyyy羊
1楼-- · 2019-07-20 21:21
qiuzhicheng 发表于 2018-8-2 17:36
我想知道你为什么认为变量 i 没加volatile,循环就不能执行10次的呢

因为编译器一看,发现10次循环都是做相同的一件事情啊,为什么不能做一次就完成呢?
qiuzhicheng
2楼-- · 2019-07-21 01:50
 精彩回答 2  元偷偷看……
Yyyyy羊
3楼-- · 2019-07-21 07:32
 精彩回答 2  元偷偷看……
qiuzhicheng
4楼-- · 2019-07-21 13:11
。。。
for(u8 i=0;i<10;i++)
{
    delay_us(1000);
}
delay_us(1000);这个函数执行多少次?
蒋某某
5楼-- · 2019-07-21 17:04
 精彩回答 2  元偷偷看……
qiousanxi
6楼-- · 2019-07-21 18:18
i,没有被优化掉。 nms = 10 为什么不会执行10次

一周热门 更多>