




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式程序的优化 嵌入式程序的优化【1】 摘要:针对嵌入式系统的特点,介绍了几种在嵌入式系统程序设计中优化C语言代码的方法,从而提高系统的性能。 关键词:C程序设计;程序优化;代码优化 Abstract:Accordingtothecharacteristicsofembeddedsystem,thepaperintroducedwaysofClanguagecodeoptimizationinembeddedsystemdesignsoasenhancetheperformanceofthesystem. Keywords:Cprogramdesign;processoptimization;codeoptimization 随着数字信息技术和网络技术高速发展嵌入式系统已经广泛渗透到科学研究领域、各类产业和商业文化艺术以及人们的日常生活中,嵌入式计算机是完成某些特定功能的计算机系统,并且软硬件可裁剪。 具有形态和性能更加小型化,多功能,低功耗等特点,已成为当今计算机技术发展的一个重要标志! 程序优化是指对解决同一问题的几个不同的程序,进行比较、修改、调整或重新编写程序,把一般程序变换为语句最少、占用内存量少、处理速度最快、外部设备分时使用效率最高的最优程序。 1嵌入式程序优化遵循的原则 嵌入式程序优化主要有以下3个原则: 等效原则:实现的功能需一致。 有效原则:使得运行速度快或占用存储空间小,或兼得。 经济原则:要付出较小的成本。 2嵌入式程序优化的主要实施方法 分别为:算法优化、编译优化以及代码优化。 2.1算法优化 选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;发掘问题的本来意义,从不同的角度思考面对的问题,使用适合于问题的的算法;尝试打破一些规则,发掘和怀疑自己的某些假定,恢复问题的本来面目。 2.2编译优化 目前很多编译器都可实现代码优化功能,且提供的代码也很紧凑。 使用编译器,能得到性能不错的代码。 然而,机器不能像人类那样有创造性。 所以,我们还需要手工来做一些事情。 C语言代码的优化是很难,且很需要技巧的工作。 大部分编译器可以生成为处理器进行过特殊优化处理的代码,如果进行修改,会造成特殊优化的破坏导致失效。 所以,在决定优化代码之前,一定要测试一下,是自己的代码更好还是编译器生成的代码好。 在嵌入式软件开发过程中应挑选优化能力较强的编译器,使其发挥代码优化功能,来生成高效的代码,提高程序的运行效率。 2.3代码优化 1)变量的处理 编程过程中,解决初始化的问题,最好使用英文单词的缩写来代表变量。 用缩写的好处可以加快程序的运行速度并减少占用的内存。 再一个就是变量类型的选取,选取的范围越小也可以提高运行速度和降低内存的占有,不过算术运算时容易产生溢出。 函数调用越频繁时,为提高代码的效率,可以把声明的局部变量通过编译器放入寄存器中,而不是放入堆栈。 变量值很大,要使用变量作返回值,会很费时间。 使用参数作为返回值时间上会快些,因为没有变量返回的复制时间的问题。 但安全性上和函数重复使用上差,因为参数返回破坏了参数值。 最好在编译时,小的变量用指针返回,小的常量用变量返回,大的常量用参数或静态方法返回。 还有就是使用全局变量比函数传参数效率更高,不过要牺牲程序的重入和模块化,它是因为节约了参数入栈和出栈的时间。 2)适当的使用宏 在嵌入式系统中,使用宏代替函数的方法来满足性能要求,是在传递参数较多而函数较短的情况下不错的选择。 对宏的使用和定义需要谨慎,它可以实现类似函数的功能,又不像函数需要调用返回的好方法,它实质上并不是函数,需要考虑到展开后难以预料的结果。 如果宏的参数是复合结构,因为它只是简单的替换,这里就要考虑操作符的优先级问题,单个参数内部各部分之间相互作用的操作符优先级低于各个参数之间的操作符优先级,在替换之后,我们需要括号保护宏参数,否则会产生预想不到的情形。 如果宏的参数是一个函数,展开时会对其参数多次取值,那么就有可能被调用多次从而达到不一致的结果,并有可能产生严重错误。 3)数组的处理 (1)数组在使用前需要对其先初始化。 数组的范围在初始化时空着不添,在执行时将由数组自动加入,可以提高程序的运行速度。 由于事先定义的范围可能过大,造成存储的浪费。 (2)大部分情况下,数组索引用指针运算来替换,可以得到既快又短的代码。 指针运算一般占用空间少,运行速度更快。 尤其是使用多维数组时效果更明显。 一下是两段作用相同,效率不同的代码: 数组索引指针运算 for(;)p=array a=arrays+;for(;) a=*(p+); 指针方法的优点就是array的地址每次装入地址p后,每次循环中,只需对p增量操作。 在数组索引方法中,每次循环中都必须进行基于s值求数组下标的复杂运算。 4)避免使用除法 ARM指令集没有整数除法指令,通常除法指令由C语言库中的函数执行。 对于不同的分子和分母,一个32位除法通常需要20至140个时钟周期,执行除法函数的时间由一个固定时间加上每一位相除的时间。 由于除法操作较费时,所以应该避免使用除法。 我们知道,除法运算是乘法运算的逆运算,可通过改变表达式,把除法运算改成乘法运算。 因为无符号数除法的速度要高于有符号数的除法,如果其中有一个是无符号操作数最好使用无符号除法指令。 5)使用合适的数据类型 采用尽可能小的数据类型:可以用字符型定义的变量,就不要拿整型来定义,能拿整型定义的就不要拿长整型来定义,能不拿浮点型就不要拿浮点型来定义。 当然,一定要防止“溢出”现象,若超过变量的取值范围后,系统并不会给出“出错信息”,要靠我们的细心和经验来确保结果的正确。 在确定表达式是float型和浮点型变量需注意:许多C编译器把实型常量视为双精度处理,降低了运算速度换来了更精确的结果,所以我们最好用“.F”、“.f”为后缀及在函数声明时使用float型。 使用有符号整型变量时,要考虑是否有必要使用有符号的变量,一些情况下,有符号的运算比较快,但有时却相反。 例如:把整型转化为浮点型时,用大于16位的有符号整型比较快。 因为x86构架中没有提供从无符号整型转化到浮点型的指令,因为在整数运算中需计算商和余数,所以用无符号类型比较快。 6)使用寄存器变量 当一个变量被频繁读/写时,要花费许多存取时间,反复访问内存。 可以使用CPU寄存器变量来提高效率,它可以直接进行读/写,不需要访问内存。 循环体内反复使用的变量和循环次数较多的循环控制变量都可定义为寄存器变量。 静态存储方式的变量都不能定义为寄存器变量,因为寄存器变量属于动态存储方式,所以只有局部自动变量和形参才可以定义为寄存器变量。 寄存器变量的说明符是register。 下面是一个采用寄存器变量的例子: registeri,sum=0; for(i=1;i10)intx=11; elseif(x=min&x3结论 嵌入式程序的性能优化与软件的开发周期、开发成本、软件的可读性之间通常存在矛盾。 在编程时,应尽量优化自己的程序,减少不必要的运算,如果有多种编程方式可完成同一功能,应尽量选择一种使程序最简洁,高效的方法。 参考文献: 1刘锋,张晓林.浅析嵌入式程序设计中的优化问题J.单片机与嵌入式系统应用,2006(12). 2王翠娥.浅析嵌入式C程序设计的优化J.信息与电脑(理论版),2009(12). 3刘剑鸣.嵌入式程序设计中C/C+代码的优化J.微计算机信息,2003(12). 4金丽,包志华,陈海进.基于ARM嵌入式系统的C程序优化设计方法J.南通大学学报:自然科学版,2006(3). 5曾振河.在ARM实时系统中提高程序执行的效率J.漳州职业技术学院学报,2008(1). 6潭浩强.C程序设计M.2版.北京:清华大学出版社,1999. 7陈波,石旭刚,史故臣.嵌入式C语言在系统开发中的代码优化J.计算机时代,2008(11). 8王军安.浅析嵌入式系统的软件优化设计J.计算机工程与应用,2004(3). 9覃征,王志
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汽车置换服务及二手车价值鉴定专项合作协议
- 2025年高端客户专属定制旅游产品与服务合同
- 2025年绿色节能家居产品研发与质量监督服务合同
- 2025年绿色能源领域CEO可持续发展聘用合同模板
- 2025年绿色有机蔬菜直供农场冷链配送服务合同
- 2025医用耗材集中采购与临床安全性能评价服务合同
- 2025年高端医疗设备产品召回及客户权益保障服务协议
- 2025年互联网数据中心绿色节能运维服务采购合同
- 2025年绿色智能家居装修工程劳务外包及智能设备集成服务合同
- 2025年餐饮行业员工薪酬福利体系与劳动合同规范
- 蓝天救援队规定管理制度
- 银监会手机租赁管理办法
- 常见上肢骨折护理常规
- 2025建筑安全员考试题库
- 从2025年河南中考语文试卷中分析阅读理解如何提分
- 军工领域涉密项目保密风险评估及防控措施
- 2025发展对象考试题库附含参考答案
- 公共打印区域管理办法
- 杭州预付消费管理办法
- 2025年中国淋膜纸市场调查研究报告
- 【课件】破茧 逐光-2026届新高三启航主题班会:挑战极限成就梦想(含规划指南、学法指导、心理护航)
评论
0/150
提交评论