提高嵌入式应用软件程序效率与质量的研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4卷第3期广东轻工职业技术学院学报
V o.l 4 N o.3
2005年9月
J OURNAL OF GUANGDONG I N DU STRY TECHN I CAL COLLEGE
Sep.t 2005
收稿日期:2005-05-10
作者简介:聂勇军(1976-),男,硕士。
提高嵌入式应用软件程序效率与质量的研究
聂勇军1
王 品2
廖启征
2
(1.广州航海高等专科学校轮机系,广东广州510725;2.北京邮电大学自动化学院,北京100876)
摘 要:结合基于L C /OS-II 的餐饮PDA 应用软件的开发工作,从改善程序设计方法与合理划分实时任务两方面论证了如何提高程序效率与质量。测试结果表明,这些方法是有效的。
关键词:嵌入式系统;程序效率;实时任务
中图分类号:TP 24 文献标识码:A 文章编号:1672-1950(2005)03-0028-03
在多任务嵌入式系统中,嵌入式系统的资源(CP U 、存储器等)有限,具有专用性[1]
,并且必须处
理很多并发事件,因此,对重要性各不相同的任务进行统筹兼顾的合理调度是保证每个任务及时执行的关键,而单纯通过提高处理器速度是无法完成的,且是没有效率的,这种任务调度只能由优化编写的系统软件来完成,因此提高嵌入式应用软件程序的效率、软件代码的质量和可靠性显得非常重要
[2]
。
本文将结合基于L C /OS-II 的餐饮PDA 应用软件的开发工作,讨论如何提高嵌入式应用软件程序效率与质量。
1 嵌入式系统介绍
当前通行的较为复杂的嵌入式系统构成如图1
所示。
图1 嵌入式系统构成图
从图示可知嵌入式操作系统处于中间层[3]
,它
管理硬件资源并向应用软件提供调用接口,组织多
个应用程序共享嵌入式系统的各种资源。同时还提供信号量、邮箱之类的通信机制。而且嵌入式操作
系统不同于一般意义的计算机操作系统,它有占用空间小执行效率高、便于定制和软件要求固化存储等特点。嵌入式操作系统的另一特点就是针对不同的平台,一般需要经过针对专门平台的移植,操作系统才能正常工作。
下面通过一个例子来说明如何设计一个基于L C /OS-II 的嵌入式应用软件。
2 项目介绍
本项目要实现如下功能:通过手持点菜设备PDA 快速进行短信的编辑、显示、向远程数据库上传短信和从远程数据库下载短信。餐饮PDA 是一个嵌入式系统,作为电子点菜系统,它可以让用餐者自主地根据PDA 上显示的菜单按键点菜,PDA 将点菜信息发送到后台服务器,并反馈给用餐者。
2.1 项目任务
本系统采用的硬件开发环境是:ARM 嵌入式开发板,用于AR M 7TD M I 的JTAG 仿真器,PC 电脑一台;软件环境是:PC 操作系统2000,嵌入式操作系统UC /OS -II ,ARM SDT2151集成开发环境,仿真
器驱动程序,超级终端通信程序,USB 下载程序。
工作的第一步是移植UC /OS-II 至ARM,详细
移植过程见文献[1,5]
。接下来要确定需要实现的任务,再对各任务模块进行程序设计。
在PDA 上软件要完成如下任务:(1)硬件驱动任务
第3期聂勇军等:提高嵌入式应用软件程序效率与质量的研究29
软件要实现对键盘、LCD、串口等硬件的驱动,以便对键盘、LCD、串口能够进行有效地控制。
(2)输入法选择任务
软件要实现输入方式的选择,包括数字和字符的选择与切换。其中包括键盘的字符软件映射、键盘输入的缓冲、显示器的显示、字符位置控制、及相关的字符控制函数的设计。
(3)短信编辑任务
软件要实现短信的编辑,包括字符输入、字符删除、字符换行以及换页等。
(4)串口接收、发送任务
在串口中断程序中,应设置一个信号量,一旦串口接收到一个短信结束符号时(这个短信结束符号是根据协议的约定而设置),这个信号量就激活串口接收程序,从而把短信接收下来,并在LCD上显示出来。
2.2应用程序设计
程序主要流程:
(1)主体流程:M a i n进行系统初始化,创建M a i n_task任务,启动系统,运行M a i n_task任务。
(2)M a i n_task:定义及初始化变量,调用I n-i tInterface初始化界面,然后进入消息循环,等待键盘,串口中断的消息。
(3)K ey_Scan_Task任务:键盘扫描
(4)OnK ey函数:响应键盘,接收输入的信息。
(5)I n itI nterface函数:进行界面初始化。
(6)Dyna m ic_D isp lay_Task流程:实现数码管的显示
(7)Led_Fresh_task任务:LCD刷新
最后用ARM STD2.5编译、下载并调试编写好的程序,通过USB将已生成的发行版本的.bi n文件下载到开发板运行即可。
3改善程序设计方法提高嵌入式应用程序效率
考虑到嵌入式系统芯片的ROM程序存储空间有限、需要满足众多功能模块的正常运行等情况,在设计嵌入式软件时尽量按照以下的原则来进行。3.1减少函数调用
函数调用会占用相当一部分CP U时间,加大RAM的需求量。它包括堆栈的切换、返回地址、寄存器的保护等等。当然,减少函数调用可能会削弱软件设计的模块化,也会加大程序的代码量。而在嵌入式系统中,程序的代码大小也是一个非常值得注意的问题。这样,我们就必须要在软件的实时性和程序的代码量大小之间做出一个折衷选择。对于响应速度有要求的软件模块,一般要减少函数调用,以减少函数切换占用的时间,提高软件的响应速度。例如在中断程序中,必须减少中断程序的功能,尽量不调用函数,并以汇编语言进行编写。
3.2恰当使用汇编语言
对于与硬件接口的函数,要尽量用汇编语言编写,以减少代码执行时间。与硬件接口的函数使用汇编语言编写,与使用C语言编写的程序比较,速度可以提高将近50%。
另外,使用汇编语言编写中断服务程序,速度一般也可以提高20%到50%。同时,使用汇编语言编写的程序,代码量一般也比使用C语言编写的代码量要小。但缺点是汇编语言编写的程序移植性较差。3.3注重算法对效率的影响
程序的运行效率与详细设计阶段确定的算法直接相关。在详细设计阶段确定的算法被翻译转换成源程序代码后,算法效率反映为程序的执行速度和程序代码的存储容量。
转换过程中的指导原则是:
(1)在编写程序前,尽可能化简有关的算术表达式和逻辑表达式;
(2)尽量避免使用多维数组;
(3)尽量避免使用指针和复杂的表;
(4)采用/快速0的算术运算;
(5)不要混淆数据类型,避免在表达式中出现类型混杂;
(6)尽量采用整数算术表达式和布尔表达式;
(7)选用等效的高效率算法。
3.4使循环体内工作量最小化
减小循环体内工作量,可以提高程序运行速度。因此要仔细检查算法中的嵌套的循环,尽可能将某些语句或表达式移到循环外面从而提高程序的效率。3.5关键变量使用寄存器变量
寄存器变量是保存在CPU内部寄存器中的,其访问速度要比访问内存变量快得多。若将寄存器变量用于关键的内层循环控制变量,则可以提高执行效率。这是因为:第一,变量如果保存在CP U的内部寄存器中,那么它的访问时间必然比访问保存在