关于在实际项目中如何设计软件实现延时?
时间:10-02
整理:3721RD
点击:
在现有的很多入门教程中,程序延时都是使用delay()函数,就是让CPU在空转,什么事情都不做。这个方法在演示实验或者一些简单的应用还可以使用,但是应用到实际的复杂项目中,就不行了。这会消耗大量的CPU资源,导致程序的响应速度慢,很多信号来不及处理,导致控制异常。各位有经验的把你们的经验分享下,大家也可以讨论一下,在实际项目中,你们是如何处理这样的问题呢?有什么技巧吗?
另加说明:在一个程序中,有的程序可以放在中断中执行,可是比如矩阵键盘怎么办?矩阵键盘的去抖延时如何实现?
另加说明:在一个程序中,有的程序可以放在中断中执行,可是比如矩阵键盘怎么办?矩阵键盘的去抖延时如何实现?
有一种比较好的方式:一个硬件定时器,产生多个软件定时器,如 5ms 、10ms 、50ms 、500ms 、1s 等。
具体做法是:
在硬件定时器中断中使软件定时器计数器自加,当加到延时值时,把软件定时器标志置 1 。
在 main 函数的 while 循环中 扫描 各个软件定时器的标志,如果 为 1 则执行 相应 语句,并把标志清 0 。
感觉 这种方法 起到了 部分操作系统的功能,当然最好的方法还是用操作系统。
现在绝大数是用硬件定时的 方法如楼上所说
顶一个,同问
就是充分利用定时器了,保证任务的及时执行~ 如果是上操作系统的话,在延时期间就调度到其他任务去了。
简单不复杂的项目,感觉裸奔代码效率比操作系统要高很多!
谢谢指导,十分感谢!
虽是好贴,但分享者太少了! 顺便说一下,主程序查询标志位时,要注意进入标志位后的程序执行时间,最近我也在学习寻找解决如上问题的方法,多线程的处理方法应该能满足这些要求