嵌入式常用算法:时间触发下的嵌入式软件设计模式

在嵌入式软件开发当中,常常第一步就是设计整个系统的架构。有基于OS的,也有裸机的。我们先拿裸机说事儿,我想很多人在做单片机的裸机开发(甚至基于OS)时脑海里根本没有设计架构的想法,从来都是while(1)循环到底,能写点状态机已经算是基础扎实的人物了。那么问题来了,while(1)是什么嵌入式设计模式里是怎么给while(1)定义的。《C嵌入式编程设计模式》一书中将while(1)称之为“超循环模式”,也就是嵌入式的入门傻瓜模式。在此模式下即使有前台监听也势必会导致系统实时性傻逼,从硬件上分析:while(1)的高CPU占用率也使得功耗大大提高。当然存在即合理,超循环模式在安全性和可靠性上是非常占优势的。结构简单也易于理解,这对于安全性能要求较高的系统上还是非常具有吸引力的。

说了这么多不上代码真没意思,具体的看书吧,强烈推荐《C嵌入式编程设计模式》,在此也做一个小广告:朋友埋头2年编写的关于嵌入式设计架构书籍(基于飞思卡尔系列MCU)也即将在明年年初由清华大学出版社出版,爱好飞思卡尔的同学可以关注一下哦。

老规矩,不分析代码了,代码加起来也没几行,数据结构也很简单,静下心来一定看得懂的。这段代码在51单片机(12MHZ,12T)上实际测试在1ms的时标下,满载12个任务下的CPU使用率仅为89%,依然有11%的空闲。如果使用国产STC15系列的1T单片机情况估计刚好相反(没实际测试过,仅仅猜测)。

在看懂代码后,也许有人要问我循环调度下响应事件就迟滞了,实时性就降低了呀!那么针对这样的疑问我想说以下几点:

1:迟滞是相对的,比起超循环系统的while(1)+中断标志位+阻塞延时,轮询调度的响应速度足够快了。

2:循环调度一般情况下还是添加短任务的比较好,长任务忽略的好,至于为什么,自己去琢磨吧。

3:这段代码不是在写操作系统,只能作为嵌入式系统代码中的一部分,不要吹毛求疵,当你能1s读完红楼梦时再来喷吧。

4:任务抖动是无法避免的,除非你是抢占式核,可以抢占CPU使用权。本人汇编菜鸟,写不出来。

5:说的很明确,本代码仅限于裸机开发。

感恩,感谢…   …

使用过程中出现任何BUG请联系我本人QQ:951253606,说明bug现象以及重现过程。

寻求MCU产品开发请联系我本人QQ:951253606。

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34521 人正在系统学习中

来源:十二月的肖邦

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年6月22日
下一篇 2016年6月22日

相关推荐