分析和综合方法在嵌入式系统设计中的应用
一. 背景:
项目应用背景: 开发用于电力系统的智能继电保护装置。
硬件平台: 基于32位嵌入式处理器,大容量flash存储系统,AD/DA通道,开入、开出通道,232/CAN/485总线通讯接口,键盘、液晶显示器 人机接口。
软件设计要求: 设计软件的结构框架和层次结构,划分程序功能模块。
设计过程:
从宏观上看,这套软件需要结合硬件在几乎同一时间内完成 测量、计算、控制、通讯、人机交互等5块工作,而每块工作中又有若干小的工作需要完成。甚至这些小工作也可以细分成一些更小的模块。
二. 分析设计
把上述整个软件的工作按照宏观上容易理解的方式划分为5个任务:测量任务,计算任务,控制任务,通讯任务,人机交互任务。
对各任务进行分析:
1.测量任务:
a. 装置上有16个AD采用通道用来测量不同的物理量,在某些情况下某些通道不需要工作,所以这里就需要一组参数来标志每个通道的工作使能。
b. 在采集对象频率变化的情况下,需要调整采样频率以保证精度,所以这里面就需要一套根据被测对象频率来调整采样频率的反馈系统。
c. 由于是周期性采样,装置可能在有些情况下改变每周波采样点数,所以就需要专门的程序模块针对每周波采样点数对采样脉冲产生定时器进行操作。
d. 完成所有测量任务需要做的事情后,细化到对AD控制器的操作(如启动AD读AD)和对产生采样脉冲的定时器的操作(如定时器,改变定时常数)。
2. 计算任务:
计算任务主要进行软件滤波、滤波分析(如fft)以及一些计算保护的判定算法的计算。所以计算任务再划分为滤波、谐波分析、保护判定三部分。由于这部分属于纯计算任务,没有对硬件的操作,也就没有相应的硬件驱动程序。经过对测量任务中通道的工作使能情况分析,对一些不工作的通道是不需要计算的,所以这里需要一些参数来控制计算的对象,避免进行不必要的计算。
3. 控制任务:
控制任务就是根据计算的判定结果,来控制相关输出继电器的分合,以及一些指示LED的点亮。和相关任务(如显示任务)发送消息,以使后者输入图文性质的提示。这里涉及到和硬件相关的继电器、LED驱动程序设计。
4. 通讯任务:
通讯任务是把实时测量的数据,事件记录送给远方集控计算机,并接受远方控制计算机传来的遥控命令。需要考虑通讯数据的组桢、解桢及通讯协议,和通讯数据的接收和发送过程的程序设计,以及对串口、CAN口的驱动程序的设计。需要重点考虑的是对通讯异常的处理(如通讯超时)以及在出现异常后的软件自我恢复功能。
5. 人机交互任务分为键盘处理部分和液晶显示部分。这两部分和外部操作的感觉是紧密相关的,按键的每个动作,液晶显示都有不同的反应。再从软件设计的分析划分来考虑,这两部分应该再细化为 键盘扫描任务 和 液晶显示任务。 软件扫描到的键盘码和显示画面的变化和切换,可以通过消息的传递来完成。
a. 键盘扫描的过程中需要加入软件的按键消抖模块以排除人为误按和连击的干扰。
b. 显示画面的切换可以对每个画面建立页面号和键码建立对应关系来实现。需要注意的是对画面的全局刷新和局部刷新的使用,以使画面刷新在视觉上尽可能的没有过渡过程。
c. 需要进行键盘扫描驱动程序的设计和液晶控制器驱动程序的设计。特别要做好显示点、线、面、字符、点阵字、字符串、点阵字串的功能函数的设计。
小结:
分析方法在软件设计中适合用于从顶向下的设计,分层次逐层向下设计,每层都是独立逻辑结构和程序模块,使用它的下一层提供的接口函数的功能,对它的上一层提供自己的功能。这样每一层的内部实现都具有独立性,对层内的代码进行优化、修改、维护不会对其他模块产生影响,同样在软件出现错误后,查找过程也变得有条理有层次,容易缩小查找范围。分析方法在软件设计中最大的优点在于对问题逐步划分后,可以跟集中在一个比较小的范围内对问题进行深入全面的考虑,使设计在逻辑、结构、功能上尽可能的完善,减小因为设计时考虑不够周全严密造成日后维护过程中的计划外工作量。同样良好的分析结果会使对程序代码的编写效率和正确性大大提高。
三. 综合设计:
在完成各个任务的分析后,需要考虑如何把这些任务有机的高效结合在一起,以使得整体的效率尽可能的高。
从任务的实际需要和实时系统的设计原则来看。测量任务必须严格的实时执行的,失去了实时的测量数据,实时的继电保护就失去了意义。计算任务需要在一个测量任务结束后另一个测量任务开始之前,尽可能快地执行,控制任务必须在判断出故障后尽可能快地输出。而相对应的通讯任务比起前几个任务的实时性要求要低一些,但必须保证对通讯数据接收发送的不超时。最后人机交互任务的实时性要求是最低的,因为人手和视觉对时间的感觉相对于前四个任务要迟缓一些。所以对这些任务采用基于优先级的调度策略,优先级高的尽可能快地执行,优先级低的要在其他所有优先级比它高的任务执行完后执行。优先级的顺序从高到低是:测量任务、计算任务、控制任务、通讯任务、人机交互任务。为了保证测量任务的实时执行,把测量任务放在AD采样中断中执行,由于是周期性采样,计算任务和控制任务应该在两次采样之间完成,而通讯任务和人机交互任务可以在两次采样之间剩下的时间片中执行。通讯数据采用中断的方式接收,但只在通讯中接收数据后返回中断,直到通讯任务得到时间片执行的时候才处理接收到的数据。任务调度的过程中必须注意任务实际执行过程中的实时性要求,实时性要求高的,要给高的优先级。如果任务过于庞大,可以继续把任务按功能进行划分。如人机交互任务可以分为按键扫描任务和液晶显示任务,而液晶显示任务又可以分为准备显示缓冲任务和刷新液晶任务。
小结:
在综合设计阶段必须从整体上把握所有的问题,可以不考虑其中某个问题的细节,但必须考虑这个问题的存在和这个问题在宏观上和其他问题的关系、重要性。而软件综合设计的关键在于让所有的“任务”融洽相处(都能得到执行),却等级“森严”(优先级策略)。当然综合设计的前提是需要对整个产品的需求分析进行深入理解并对软件的可扩展性、可移植性、可维护性做出考虑。
四. 分析与综合结合。
对于这个软件的设计,通过理解软件整体功能的划分,然后对各部分进行深入的分析设计,最后综合分析各部分的特性对各个任务进行综合调度设计。在这些工作做完后,还需要根据整体的执行效果对个别任务或模块进行优化,修改,测试,然后再回到整体运行中检测系统的性能,这个综合-分析-综合-分析。。。的过程需要反复多次,以使系统达到最佳的性能。