设计总则一、一、设计总则
1.程序质量的评估
程序的优劣可以从两个方面进行评估,定量指标和定性指标。
定量指标包括:
1)程序代码执行效率;
2)程序占用资源多少。
定性指标包括:
1)可调试性,即是否方便排除程序语法错误;
2)可测试性,即是否方便验证程序功能的正确性;
3)可维护性,即是否方便程序的修改和升级;
4)可移植性;
5)可读性。
2、程序架构
为了便于维护和移植,推荐使用层次化的软件设计方法。可把整个软件分为三层:应用层、界面层和底层驱动层。各层之间的关系如下图所示。
层次化设计说明:
1)底层驱动层主要包含直接和硬件相关的驱动程序,如数码管显示、按键、峰鸣器、继电器和电机控制等。底层的各个模块间要保持各自的独立性,不产生直接的数据交互,底层也不直接访问应用层,如果有需要,都要通过界面层进行数据交互。
2)界面层主要提供数据交互,为应用层和底层驱动之间以及底层驱动层各模块之间提供数据的交互。
3)应用层主要完成具体功能的实现,它要通过界面层控制底层驱动层各模块来完成所需功能,而不能越过界面层直接访问底层驱动层。所有的用户接口要在应用层来实现.
4)一个好的架构必须将底层硬件包装起来,为应用程序提供一组丰富的函数操作(bufferorparameter),例如在中断的处理中,应用程序不需要资料中断的堆栈如何保护不需要知道地址操作,只需要读取中断产生的旗标动作.
5)在即时性软件系统里面,对达到高效率的实时性与反应力,所以程序使用大量的事件触发方式来设计任务.事件有可能来自外部的触发(key,rxdata,sensordetect,…)也可能是系统内部自行产生的(Timer,alarm,flag),与事件触发方式相对应的是定时查询方式(polling),一般来说polling效率较差因为有多余的动作而且系统反应时间与查询polling时间间隔有关,但是在小型的MCU系统里面用Polling方式反而简单许多
3、设计基本原则
1)尽量减少各个子程序功能模块间的耦合度(耦合度是指一个程序的执行对另一个程序的影响力),保证各自的独立性。一般情况下,建议子程序模块功能的划分要尽可能细化,功能尽量单一,减少子程序模块间的数据交互。
2)在满足功能需求的情况下,可适当牺牲代码的执行速度,以保证程序的透明度。
3)主要子程序模块间的交互,要通过特定的界面跟应用层进行沟通,可使用FIFO(Firstin,Firstout)或是Buffer两种方式。每种子程序模块都可以有自己的FIFO。例如: