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条回答
坐看风
1楼-- · 2019-07-20 10:01
本帖最后由 坐看风 于 2018-8-3 16:23 编辑
Yyyyy羊 发表于 2018-8-2 17:29
加了volatile的变量,如果要得到变量的值,直接从地址取。目的是防止被优化,是这个意思吧?

volatile声明的变量是告诉编译器这个值随时随地都可能发生改变,每次读取都必须从根地址读取,防优化也可以这么理解吧
但是我看楼主的问题和volatile一点关系没有啊
jkd405
2楼-- · 2019-07-20 11:52
 精彩回答 2  元偷偷看……
Yyyyy羊
3楼-- · 2019-07-20 15:31
jkd405 发表于 2018-8-2 16:46
就应该执行10次,这是内部循环,不是多次执行这个函数

啥意思啊?
qiuzhicheng
4楼-- · 2019-07-20 16:34
 精彩回答 2  元偷偷看……
Yyyyy羊
5楼-- · 2019-07-20 17:45
 精彩回答 2  元偷偷看……
qiuzhicheng
6楼-- · 2019-07-20 21:11
Yyyyy羊 发表于 2018-8-2 17:29
加了volatile的变量,如果要得到变量的值,直接从地址取。目的是防止被优化,是这个意思吧?

我想知道你为什么认为变量 i 没加volatile,循环就不能执行10次的呢

一周热门 更多>