在网上发现这个贴子非常好!不多说了自己看吧!有原文。如何设计复杂的多任务程序田开坤湖北师范学院物电学院电工电子中心435002 tkaikun@163.com 我们在入门阶段,一般面对的设计都是单一的简单的任务,流程图可以如图1 所示,通常会用踏步循环延时来满足任务需要。面对多任务, 稍微复杂的程序设计, 沿用图 1 的思想, 我们会做出如图2 所示的程序,在大循环体中不断增加任务, 通常还要用延时来满足特定任务节拍,这种程序设计思想它有明显的不足, 主要是各个任务之间相互影响,增加新的任何之后, 以前很好的运行的任务有可能不正常, 例如数码管动态扫描, 本来显示效果很好的驱动函数,在增加新的任务后出现闪烁,显示效果变差了。初始化任务体 1 延时任务体 2 任务体 ? 任务体 N 变量任务体 0 图 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 所示的流程图,各个任务流程独立...