微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时执行的程序相关问题讨论

定时执行的程序相关问题讨论

时间:10-02 整理:3721RD 点击:
最近yundou我看到了一种程序定时执行的设计方法,当然还是裸机跑的,没上OS,定时就是用定时器,重点是定时器的回调函数中程序的实现,我看到很多单片机程序直接全局变量满天飞,然后在主程序中用这些全景变量去当成判断条件,然后实现不同的定时。
按照上面方法实现程序效率肯定高,不过一旦程序功能丰富起来,代码量增大,可维护性就降低了,后来我又看到另一种定时方法,定时器会同时提供一套定时任务注册机制,比如我需要app()函数每5秒执行一次,则调用定时器注册函数app_timer_register(TIMER_5S, app);来实现。
两种方式的临界点在哪?何时用何事?

别想太多,可以看看《从单片机初学者到单片机工程师》

没有统一的变量管理,程序会很混乱。

单片机执行的任务大致分为三类:定时任务;触发任务;中断任务。定时任务比较普遍,如果接口封装成定时器接口使用方便,便于管理。
我的定时器接口实现方式是:用两个硬件定时器A和B,其中A作为1ms时基信号,确保定时精确,另外B由A的中断程序触发,定时极短,来完成定时器结构体的刷新,定时时间到达则执行对应的回调函数。只要所有定时任务时间小于1ms 则不会出问题。

这样,你还不如直接上OS呢,你那也是定个了小小的OS了。

项目组都是搞单片机的,OS有点接受不了,而且前期的应用都是按前后台逻辑写的。

你分的也太细了,不都是中断吗

《从单片机初学者迈向单片机工程师》挺实用

Os需要最底层的任务切换,这个就不用,简单的前后台对于几个任务很方便,多了管理不方便,无法解决延时占用cpu问题,我的思路是从《单片机编程魔法师》和linux内核解析中得到的,参考Qt中的timer类,目的是统一逻辑接口,软硬件分开,这样对于单个项目没什么突出优势,但对于同一类项目,不同的平台只需修改底层函数,保证调用的api相同,希望能听到你的回复。

照你说,当延时小于系统时钟节拍时,uCOS也无法解决延时占用CPU时间啊

老大,把你发现的资料上传上来共享大家都一起学习一下!谢谢!最近也在研究这个问题

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

网站地图

Top