高效率嵌入式程序开发
2017-11-03 |
rar |
0.4 MB |
次下载 |
1积分
无链接信息!
资料介绍
摘 要:嵌入式系统对应用软件的质量要求很高,在嵌入式开发中须注意对代码进行优化,尽可能地提高代码效率。虽然C编译器都提供了一定程度的代码优化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大小的平衡,不可能使程序既快又小,因而必须在编写程序时采取必要的措施。本文针对高效率嵌入式程序开发提供了一些编程技巧,对实际系统开发具有重要作用。
关键词:编译器; 程序开发; 代码优化
引言
在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤其需要考虑对变量的使用和循环程序的处理。
变量使用
在进行实际程序开发时,变量的使用至关重要,其中使用全局变量比向函数传递参数更加有效,这样免去了函数调用时参数入栈和出栈的需要。当然,使用全局变量会对程序有一些副作用。变量定义的次序会导致最终映像中数据布局的不同,如图1所示。
图1 变量映像次序混乱状况
由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。最好的方法是在编程的时候,把所有相同类型的变量放在一起定义。
通常,工程师设法使用short或char来定义变量以节省存储器空间。在函数的局部变量数目有限的情况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种情况下,使用short和char型变量不但不会节省空间,反而会带来其它的副作用。如图2所示:假定a是任意可能的寄存器,存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中进行符号扩展。其中,带符号的变量,要用逻辑左移和算术右移两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与指令对符号位进行清零。所以,使用32位的int或unsigned int局部变量最有效。某些情况下,函数从外部存储器读入局部变量进行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,隐藏了原来可能溢出异常这个问题,需要进一步仔细考虑。
图2 不同类型局部变量的加法程序
在程序中,经常会使用switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,发生概率小的情况放在最后,这样会减少代码平均执行时间。
关键词:编译器; 程序开发; 代码优化
引言
在多媒体、通信等计算复杂度高的应用中,为了满足制造费用、功耗、性能以及实时性等诸多限制条件的要求,嵌入式系统程序往往需要特殊设计。这使得设计师在设计面向特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤其需要考虑对变量的使用和循环程序的处理。
变量使用
在进行实际程序开发时,变量的使用至关重要,其中使用全局变量比向函数传递参数更加有效,这样免去了函数调用时参数入栈和出栈的需要。当然,使用全局变量会对程序有一些副作用。变量定义的次序会导致最终映像中数据布局的不同,如图1所示。
图1 变量映像次序混乱状况
由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。最好的方法是在编程的时候,把所有相同类型的变量放在一起定义。
通常,工程师设法使用short或char来定义变量以节省存储器空间。在函数的局部变量数目有限的情况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种情况下,使用short和char型变量不但不会节省空间,反而会带来其它的副作用。如图2所示:假定a是任意可能的寄存器,存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法指令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中进行符号扩展。其中,带符号的变量,要用逻辑左移和算术右移两条指令才能完成符号扩展;无符号的变量,要使用一条逻辑与指令对符号位进行清零。所以,使用32位的int或unsigned int局部变量最有效。某些情况下,函数从外部存储器读入局部变量进行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,隐藏了原来可能溢出异常这个问题,需要进一步仔细考虑。
图2 不同类型局部变量的加法程序
在程序中,经常会使用switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要做什么,就浪费了处理器时间。为了提高速度,可以把具体的情况按照它们发生的相对频率排序。即把最可能发生的情况放在第一,发生概率小的情况放在最后,这样会减少代码平均执行时间。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 高效率升压DC/DC电压调整器HX3608产品说明 9次下载
- 嵌入式Linux驱动程序开发 6次下载
- 嵌入式开发(一):嵌入式开发新手入门 77次下载
- 一种高效率小功率开关电源设计 24次下载
- 高效率开关电源的设计及应用 14次下载
- 嵌入式Linux应用程序例程 16次下载
- 高效率低待机QR模式适配器的设计 19次下载
- 高效率反激变换器设计技巧 12次下载
- 基于嵌入式Linux应用程序开发详解 12次下载
- 基于ARM的嵌入式系统程序开发要点(六)--开发高效程序的技巧 4次下载
- 基于ARM的嵌入式系统程序开发要点(1) 7次下载
- 浅谈磁性槽楔在高效率电机中的应用 3次下载
- 嵌入式Linux应用程序开发详解 60次下载
- 编写高效率的testbench 16次下载
- 高效程序的奥秘 0次下载
- 用C语言构建高效的嵌入式程序 262次阅读
- 如何为嵌入式软件开发选择编译器 560次阅读
- 高效率微型封装降压型µModule器件 443次阅读
- LFPAK88是提高效率的捷径 448次阅读
- 嵌入式代码高效运行指南 570次阅读
- 如何用AWTK和AWPLC快速开发嵌入式应用程序 1095次阅读
- 嵌入式开发的产品有哪些_嵌入式开发的流程 1w次阅读
- 把软件项目管理方法引入嵌入式系统的开发之中的设计浅析 1904次阅读
- 嵌入式软件开发编程规范介绍 3970次阅读
- 嵌入式软件开发的这些编程规范你了解吗 3652次阅读
- 在Nios II平台下搭建RTEMS嵌入式开发简析 1393次阅读
- 大神教你:嵌入式系统C++代码的变成技巧 3436次阅读
- 什么是嵌入式开发板_学嵌入式用什么开发板 6532次阅读
- 嵌入式C实现延时程序的不同变量的区别 几种Linux嵌入式开发环境的简单介绍 1376次阅读
- 基于反相SEPIC的高效率降压/升压转换器的实现 1776次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多