下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高效率嵌入式程序开发在多媒体、通信等计算复杂度高的应用中,为了满足创造费用、功耗、性能以及实时性等诸多限制条件的要求,系统程序往往需要特别设计。这使得设计师在设计面对特定应用的嵌入式软件时,需要有一套切实可行的编程准则。而在实际程序设计中,工程师尤其需要考虑对变量的用法和循环程序的处理。变量用法在举行实际程序开发时,变量的用法至关重要,其中用法全局变量比向函数传递参数越发有效,这样免去了函数调用时参数入栈和出栈的需要。固然,用法全局变量会对程序有一些副作用。变量定义的次序会导致终于映像中数据布局的不同,1所示。图1 变量映像次序混乱情况由此可见,在声明变量时,需要考虑怎样最佳地控制存储器布局。
2、最好的办法是在编程的时候,把全部相同类型的变量放在一起定义。通常,工程师设法用法short或char来定义变量以节约存储器空间。在函数的局部变量数目有限的状况下,编译器会把局部变量分配给内部寄存器,每个变量占用一个寄存器。在这种状况下,用法short和char型变量不但不会节约空间,反而会带来其它的副作用。2所示:假定a是随意可能的寄存器,存储函数的局部变量。同样完成加1的操作,32位的int型变量最快,只用一条加法命令。而8位和16位变量,完成加法操作后,还需要在32位的寄存器中举行符号扩展。其中,带符号的变量,要用规律左移和算术右移两条命令才干完成符号扩展;无符号的变量,要用法一条规律与命
3、令对符号位举行清零。所以,用法32位的int或unsigned int局部变量最有效。某些状况下,函数从外部存储器读入局部变量举行计算,这时候,需要把不是32位的变量转换成32位。至于把8位或16位变量扩展成32位后,躲藏了本来可能溢出异样这个问题,需要进一步认真考虑。图2 不同类型局部变量的加法程序在程序中,常常会用法switch case语句,每一个由机器语言实现的测试和跳转仅仅是为了打算下一步要做什么,就铺张了处理器时光。为了提高速度,可以把详细的状况根据它们发生的相对频率排序。即把最可能发生的状况放在第一,发生概率小的状况放在最后,这样会削减代码平均执行时光。通常,工程师总是竭力避开用
4、法冗余变量,以精简程序。普通状况下这样做是正确的,但是也有例外,如下所示:int f(void);int g(void);file:/f()和g()不拜访全局变量errsint errs; file:/全局变量void test1(void) errs += f();errs += g();void test2(void) int localerrs = errs;/ 定义冗余的局部变量localerrs += f();localerrs += g();errs = localerrs;在第一种状况test1()里,每次拜访全局变量errs时都要先从相应的存储器下载到寄存器里,经f()或g()
5、函数调用后再存储回本来的存储器里面。在该例子中,一共要举行两次这样的下载/存储操作。而在其次种状况test2()里,局部变量localerrs被分配以寄存器,这样一来,囫囵函数就只需要一次下载/存储全局变量存储器了。尽量节约存储器拜访的次数,对于提高系统性能十分实用。循环程序的处理计数循环是程序中常用的流程控制结构。在c中,类似下面的for循环比比皆是:for(loop=1;loop=limit;loop+)这种累加计数的办法符合普通的自然思维习惯,所以比下面的递减计数办法用法更多:for(loop=limit;loop!=0; loop-)这两者在规律上并没有效率差异,但是映射到详细的体系结
6、构中,就产生了很大的不同。累加法比递减法多用了一条命令,当循环次数比较多的时候,这两段代码就会在性能上产生显然的差异。分析其本质缘由,在于当举行一个非零常数比较时,必需用特地的cmp命令来执行;而当一个变量与零举行比较时,命令可以挺直利用条件执行的特性(ne)来举行推断。无数时候循环绽开由编译器自动完成,不过应注重对中间变量或结果被更改的循环,编译程序往往否决绽开,这时候就需要工程师自己来做绽开工作了。尤其值得注重的是,在有内部命令cache的cpu上(如arm946es芯片),由于循环绽开的代码很大,往往会浮现高速缓冲存储器溢出。这时绽开的代码会频繁地在cpu的高速缓冲存储器和内存之间往返调用,又由于高速缓冲存储器速度很高,所以此时循环绽开反而会变慢。同时,循环绽开会影响矢量运算优化。arm处理器核对nz(零比较转移)有特殊的命令处理,速度十分快,假如你的循环对方向不敏感,可以由大向小循环。需要注重的是,假如指针操作用法了i值,这种办法可能引起指针索引超界的严峻错误(i = max+1)。固然你可以通过对i做加减运算来订正,但是假如这样就没有提高
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新疆维吾尔自治区奇台县第四中学2024届九年级上学期期末考试数学试卷(含答案)
- 《社会调查方法》课件
- 养老院老人疾病预防措施制度
- 保险精算分类费率课件讲解
- 收物业费保密协议书(2篇)
- 《药品采购》课件
- 《高血压规范化诊治》课件
- 2024年度食用菌产业投资基金销售合同3篇
- 2025年南阳货运上岗证模拟考试题
- 2025年洛阳货运考试题库
- 安徽工程大学《自然语言处理及应用》2022-2023学年第一学期期末试卷
- 电路分析基础知到智慧树章节测试课后答案2024年秋太原理工大学
- 2024年室内设计协议书
- 跨境TIR公路运输场景实测白皮书-中俄篇 2024
- 中储粮西安分公司招聘真题
- 2024土方开挖工程合同范本
- GB/T 44731-2024科技成果评估规范
- 企业绿色供应链管理咨询服务合同
- 食品安全事故专项应急预案演练记录6篇汇编(表格式)
- 2025年会计基础知识考试题库附答案
- 《资治通鉴》导读学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论