如何设计复杂的多任务程序
我们在入门阶段,一般面对的设计都是单一的简单的任务,流程图可以如图 1 所示,通
常会用踏步循环延时来满足任务需要。
面对多任务,稍微复杂的程序设计,沿用图 1 的思想,我们会做出如图 2 所示的程序,
在大循环体中不断增加任务,通常还要用延时来满足特定任务节拍,这种程序设计思想它有
明显的不足,主要是各个任务之间相互影响,增加新的任何之后,以前很好的运行的任务有
可能不正常,例如数码管动态扫描,本来显示效果很好的驱动函数,在增加新的任务后出现
闪烁,显示效果变差了。
(原文件名:1.JPG)
图1 单一任务简单流程图 图2 多任务简单流程图
很明显,初学者在设计程序时,需要从程序构架思想上下功夫,在做了大量基本模块练
习之后,需要总结提炼自己的程序设计思路(程序架构思想)。
首先我们来理解“任务”,所谓任务,就是需要 CPU 周期“关照”的事件,绝大多数任
务不需要 CPU 一直“关照” ,例如启动 ADC 的启动读取。甚至有些任务“害怕”CPU 一直
“关照”例如 LCD 的刷新,因为 LCD 是显示给人看的,并不需要高速刷新,即便是显示的
内容在高速变化,也不需要高速刷新,道理是一样的。这样看来,让CPU做简单任务一定很
浪费,事实也是如此,绝大多数简单任务,CPU都是在“空转” (循环踏步延时) 。对任务总
结还可以知道,很多任务需要 CPU 不断“关照” ,其实这种“不断”也是有极限的,比如数
码管动态扫描,能够做到40Hz 就可以了,又如键盘扫描,能够做到20Hz(经验值),基本上
也就不会丢有效按键键值了,再如LCD刷新,我觉得做到 10Hz 就可以了,等等。看来,绝
大多数任务都是工作在低速频度。而我们的CPU一旦运行起来,速度又很快,CPU本身就是
靠很快的速度执行很简单的指令来胜任复杂的任务(逻辑)的。如果有办法把“快”的 CPU
分成多个慢的CPU,然后给不同的任务分配不同速度的CPU,这种设想是不是很好呢!确实
很好,下面就看如何将“快”的CPU划分成多个“慢”的 CPU。
根据这种想法,我们需要合理分配CPU资源来“关照”不同的任务,最好能够根据任务
本身合理占用CPU资源,首先看如图 3 所示的流程图,各个任务流程独立,各任务通过全局
变量来交互信息,在流程中有一个重要的模块“任务切换”,就是任务切换模块实现 CPU 合
理分配,这个任务切换模块是怎么实现的呢?
猜您喜欢
评论