for循环的简单问题,求解答啦~~~路过的都来看看吧

[复制链接]
2163|24
 楼主| 火山LF 发表于 2016-9-6 10:09 | 显示全部楼层 |阅读模式
延时要嵌套for循环,请问大的数字循环在外面还是小的数字循环在外面?请问如何设置会更优化程序?

例如:我定时12s,定时器1ms记一次 ,一个定时器记12次,一个定时器记1000次 , PS:论坛的代码格式不好看
  1.     if(Dis_NoneLoadTimer1 > 12)
  2.                                 {
  3.                                         Dis_NoneLoadTimer2++;
  4.                                         if(Dis_NoneLoadTimer2 > 100)
  5.                                         {

  6.                                                 Dis_NoneLoadTimer2 = 0;
  7.                                         }

  8.                                         Dis_NoneLoadTimer1 = 0;
  9.                                 }
  10.                         }


dirtwillfly 发表于 2016-9-6 11:39 | 显示全部楼层
mS级的延时,不建议用循环,浪费资源还费电。用定时器吧
dirtwillfly 发表于 2016-9-6 14:03 | 显示全部楼层
火山LF 发表于 2016-9-6 11:51
在定时器里面直接timer++ ,然后在函数里面判断timer > 12000 吗? 这样也可以达到延时。

...

直接定时1mS就好啊
flaty 发表于 2016-9-6 14:32 | 显示全部楼层
一般单片机 都会自己给自己做个 1MS定时器 ,其他的大于1MS的 就定时器计数就可以了,,,不是要去很钟的 非的非常准确,2中方式,外边加个CPLD做个有源晶振 做个计数器,,,或者去CPU时钟计数器 也是很钟确的 。
 楼主| 火山LF 发表于 2016-9-6 15:25 | 显示全部楼层
dirtwillfly 发表于 2016-9-6 14:03
直接定时1mS就好啊

我要定时的是12s呀,定时器定时1ms让Timer+1,然后一直加到12000就是12s了

现在的问题是12000是只用一个变量来计数,还是两个变量用for循环嵌套计数,哪种做法比较好?
 楼主| 火山LF 发表于 2016-9-6 15:27 | 显示全部楼层
flaty 发表于 2016-9-6 14:32
一般单片机 都会自己给自己做个 1MS定时器 ,其他的大于1MS的 就定时器计数就可以了,,,不是要去很钟的  ...

定时器只开一个,但是计数有很多个变量,在中断外边进行比较变量大小,就可以进行定时了。

你上面那句话:不是要去很钟的 非的非常准确     
我没看懂(⊙o⊙)…
dirtwillfly 发表于 2016-9-6 15:51 | 显示全部楼层
火山LF 发表于 2016-9-6 15:25
我要定时的是12s呀,定时器定时1ms让Timer+1,然后一直加到12000就是12s了

现在的问题是12000是只用一个 ...

我一般用一个变量。具体看你的需求吧
angus118 发表于 2016-9-6 16:34 | 显示全部楼层
一般人不要if 或 delay来延时。
xgmmss 发表于 2016-9-6 16:44 | 显示全部楼层
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数。
之前见过的编程建议。
 楼主| 火山LF 发表于 2016-9-6 17:16 | 显示全部楼层
xgmmss 发表于 2016-9-6 16:44
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次 ...

对对对,我也是看过相关的这样的话,然后我忘了是大的放外面还是小的放外面
皈依 发表于 2016-9-6 18:22 | 显示全部楼层
一般来说是大的放在里面
youtome 发表于 2016-9-6 22:32 | 显示全部楼层
要精确延时,还是定时器。
youtome 发表于 2016-9-6 22:35 | 显示全部楼层
火山LF 发表于 2016-9-6 11:51
在定时器里面直接timer++ ,然后在函数里面判断timer > 12000 吗? 这样也可以达到延时。

...

定时器定时计数,这样利用率就高了。
flaty 发表于 2016-9-7 10:49 | 显示全部楼层
火山LF 发表于 2016-9-6 15:27
定时器只开一个,但是计数有很多个变量,在中断外边进行比较变量大小,就可以进行定时了。

你上面那句话 ...

恩 恩 是滴 ,,,,,不是非常准确的话,,,准确的话 比如交换机一类的 就不能这么高,,单独的做非常精确的同步时钟
flaty 发表于 2016-9-7 10:51 | 显示全部楼层
flaty 发表于 2016-9-7 10:49
恩 恩 是滴 ,,,,,不是非常准确的话,,,准确的话 比如交换机一类的 就不能这么高,,单独的做非常 ...

定时器 已经不错了,,,不占用资源,,,
typeof 发表于 2016-9-7 22:48 | 显示全部楼层
程序的for循环不是执行次数都一样?
typeof 发表于 2016-9-7 22:50 | 显示全部楼层
定时器延时推荐。
maqianqu 发表于 2016-9-8 16:49 | 显示全部楼层
楼主你测试过,这个for循环吗?
maqianqu 发表于 2016-9-8 16:53 | 显示全部楼层
for的执行次数应该都一样吧。
 楼主| 火山LF 发表于 2016-9-8 17:16 | 显示全部楼层
maqianqu 发表于 2016-9-8 16:53
for的执行次数应该都一样吧。

但是有关于优化程序的说法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

88

主题

816

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部