微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于在实际项目中如何设计软件实现延时?

关于在实际项目中如何设计软件实现延时?

时间:10-02 整理:3721RD 点击:
    在现有的很多入门教程中,程序延时都是使用delay()函数,就是让CPU在空转,什么事情都不做。这个方法在演示实验或者一些简单的应用还可以使用,但是应用到实际的复杂项目中,就不行了。这会消耗大量的CPU资源,导致程序的响应速度慢,很多信号来不及处理,导致控制异常。各位有经验的把你们的经验分享下,大家也可以讨论一下,在实际项目中,你们是如何处理这样的问题呢?有什么技巧吗?
  另加说明:在一个程序中,有的程序可以放在中断中执行,可是比如矩阵键盘怎么办?矩阵键盘的去抖延时如何实现?

有一种比较好的方式:一个硬件定时器,产生多个软件定时器,如 5ms 、10ms 、50ms 、500ms 、1s 等。
具体做法是:
在硬件定时器中断中使软件定时器计数器自加,当加到延时值时,把软件定时器标志置 1 。
在 main 函数的 while 循环中 扫描 各个软件定时器的标志,如果 为 1 则执行 相应 语句,并把标志清 0 。
感觉 这种方法 起到了 部分操作系统的功能,当然最好的方法还是用操作系统。

现在绝大数是用硬件定时的  方法如楼上所说

顶一个,同问

就是充分利用定时器了,保证任务的及时执行~  如果是上操作系统的话,在延时期间就调度到其他任务去了。
简单不复杂的项目,感觉裸奔代码效率比操作系统要高很多!

谢谢指导,十分感谢!

虽是好贴,但分享者太少了!   顺便说一下,主程序查询标志位时,要注意进入标志位后的程序执行时间,最近我也在学习寻找解决如上问题的方法,多线程的处理方法应该能满足这些要求

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top