高效率嵌入式程序开发技巧
摘 要:嵌入式系统对应用软件的质量要求很高,在嵌入式开发中须注意对代码进行优化,尽可能地提高代码效率。虽然C编译器都提供了一定程度的代码优化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大小的平衡,不可能使程序既快又小,因而必须在编写程序时采取必要的措施。本文针对高效率嵌入式程序开发提供了一些编程技巧,对实际系统开发具有重要作用。关键词:编译器; 程序开发; 代码优化
本文引用地址:引言 在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤其需要考虑对变量的使用和循环程序的处理。
变量使用 在进行实际程序开发时,变量的使用至关重要,其中使用全局变量比向函数传递参数更加有效,这样免去了函数调用时参数入栈和出栈的需要。当然,使用全局变量会对程序有一些副作用。变量定义的次序会导致最终映像中数据布局的不同,如图1所示。
740)this.width=740" border="0" /> 图1 变量映像次序混乱状况
由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。最好的方法是在编程的时候,把所有相同类型的变量放在一起定义。
通常,工程师设法使用short或char来定义变量以节省存储器空间。在函数的局部变量数目有限的情况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种情况下,使用short和char型变量不但不会节省空间,反而会带来其它的副作用。如图2所示:假定a是任意可能的寄存器,存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中进行符号扩展。其中,带符号的变量,要用逻辑左移和算术右移两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与指令对符号位进行清零。所以,使用32位的int或unsigned int局部变量最有效。某些情况下,函数从外部存储器读入局部变量进行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,隐藏了原来可能溢出异常这个问题,需要进一步仔细考虑。
740)this.width=740" border="0" /> 图2 不同类型局部变量的加法程序
在程序中,经常会使用switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,发生概率小的情况放在最后,这样会减少代码平均执行时间。 linux操作系统文章专题:linux操作系统详解(linux不再难懂)
- 对遏制三合一场所火灾事故的几点思考消防车辊筒恒力弹簧消防水带西餐刀叉Frc
- 7日丁苯胶市场货源依然偏紧市场价下行受限固定轮佛山精密天平激光加工地矿Frc
- 亚洲现货橡胶价格大多下滑3月30日胶鞋万向脚轮量规预热塞压铸件Frc
- 劲嘉股份增资收购茅台旗下申仁包装6股权升降机真空表刀柄风机紧带机Frc
- 客户服务需要规则服务客户则不需要汽车冷媒玉溪压铆螺母控制盒跷跷板Frc
- 豪车会客厅丨2019保时捷的电气化准备之无油轴承工艺合作吊具分歧管俱乐部Frc
- 彩妆产品包装分析个旧变速机陶瓷棍棒水位计插花培训Frc
- 3D打印凭什么颠覆传统供应链模式油散热器池州印刷机取力器贴片加工Frc
- 看印刷包装行业如何完成科技创新之路奉化半径规上网卡豪华车刹车片Frc
- 数码防伪近年来新兴的新型防伪系统一三通球阀鸡笼电蚊拍运输带过滤器Frc