软件延时:for循环中使用不同的参数,延时有很大的差异

2019-03-23 18:36发布

while(1)
    {
     GPIO_SetBits(GPIOG, GPIO_Pin_1);

      //延时1ms的程序
         for(count =0 ; count < 6; count++)
    {
            for(i = 0; i < 1000; i++);
    }
      
    //SET TO LOW
    GPIO_ResetBits(GPIOG, GPIO_Pin_1);
   
    //延时1ms的程序
         for(count =0 ; count < 6; count++)
    {
        for(i = 0; i < 1000; i++);
    }
}






while(1)
    {
      GPIO_SetBits(GPIOG, GPIO_Pin_1);
      //延时1ms的程序
         for(count =0 ; count < 1; count++)
    {
            for(i = 0; i < 6000; i++);
    }
       GPIO_ResetBits(GPIOG, GPIO_Pin_1);
    //延时1ms的程序
         for(count =0 ; count <1; count++)
    {
        for(i = 0; i < 6000; i++);
    }

  }
只是修改了一下参数,G1脚高电平持续的时间,变化很大,这是什么原因呢?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
桔梗望
2019-03-24 01:07
/          for(count =0 ; count < 6; count++)
    {
        for(i = 0; i < 1000; i++);
    }

         for(count =0 ; count < 1; count++)
    {
        for(i = 0; i < 6000; i++);
    }
它们判断的所执行的时间是不一样的,不是简单的6*1000*指令周期或则1*6000*指令周期,两种写法在翻译成汇编之后的代码是不一样多的。
对于这两个来说,内层for循环执行一次所需要的时间是一样的,但是,因为外层for循环的次数不同,那么从内层跳到外层判断的次数就不同,第一个为7次,第二个为2次,(应该是这样,表示不是这个专业的,C不怎么好)就是因为这个,在跳转的时候,跳转一次所用的时间并不是一个指令周期的时间,假设为X,那么真正的时间或许应该是6*(1000+X)+X,1*(6000+X )+X,这里只能说或许是这样,具体是啥样,我还是不清楚,或许你用不同的编译器编译出来它们还有差别,更有甚者我在学51的时候,同样的for循环嵌套使用,前后两次编译出来得到的结果不一样。建议哈,要求不高的定时函数,可以用for写,最好是不要嵌套,如果实在不够,可以多调用几次嘛,while也行啊。要求高的还是用定时器写,准确,还不容易跑飞。有些函数,别人写好的,里面的参数还是不要改得好,自己写,有助于自己学习。

一周热门 更多>