下面开始讲课了,O(∩_∩)O哈哈~ 开玩笑。
多任务单片机如何实现,仁者见仁智者见智,但是实现起来可谓是千差万别,一任务没有结束,另外一个任务又开始运行,或者是死循环,或者主程序死机等等现象。归根到底是没有彻底理解多任务的实现机制。
下面所讲的都是在没操作系统的前提下:
一、目前流行的设计方法:主程序(主循环 ) + (定时)中断。
咋一看,合情合理。深究之,诸多不利:首先是中断可以在主程序的任何地方发生,随意打断主程序。其次主程序与中断之间的耦合性较大,这种做法使得主程序与中断缠绕在一起,必须仔细处理以防不测。所以导致很多程序跑飞,死机等等所谓的奇怪现象。
那么换一种思路,如果把主程序全部放入(定时)中断中会怎么样?
这种思想是单片机里面的,很多程序处理的时候我们直接放到定时器中,那么这样做是优是劣呢?这么做至少可以立即看到几个好处:
系统可以处于低功耗的休眠状态,将由中断唤醒进入主程序; 如果程序跑飞,则中断可以拉回;
没有了主从之分(其他中断另计),程序易于模块化。
那么如何实现呢?具体的方法如何呢?
任务:为了把主程序全部放入(定时)中断中,必须把程序化分成一个个的模块,即任务。
时基:每个任务完成一个特定的功能,例如扫描键盘并检测按键。 设定一个合理的时基 (tick), 例如 5,ms或10ms。
执行:每次定时中断,把所有任务执行一遍,为减少复杂性,一般不做动态调度(最多使用固定数组以简化设计,做动态调度就接近 os 了),这实际上是一种无优先级时间片轮循的变种。
哲学启示:多个任务同时进行,前提是单核,这是个问题,需要用哲学的观点去处理。O(∩_∩)O哈哈~
精彩内容,敬请关注下回讲解。