STM32/STM8技术william hill官网
直播中

9年用户 165经验值
擅长:嵌入式技术 模拟技术 控制/MCU
私信 关注
[讨论]

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

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

回帖(6)

cuyebiren

2016-12-12 16:14:13

最佳答案

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

王栋春

2016-12-12 20:31:32
现在绝大数是用硬件定时的  方法如楼上所说
举报

1467946658

2016-12-12 20:38:55
顶一个,同问
举报

周大侠

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

2017-1-3 14:37:38
引用: cuyebiren 发表于 2016-12-12 16:14
有一种比较好的方式:一个硬件定时器,产生多个软件定时器,如 5ms 、10ms 、50ms 、500ms 、1s 等。
具体做法是:
在硬件定时器中断中使软件定时器计数器自加,当加到延时值时,把软件定时器标志置 1 。

谢谢指导,十分感谢!
举报

张全斌

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

更多回帖

发帖
×
20
完善资料,
赚取积分