《ARM编程技巧》PPT课件

《ARM编程技巧》PPT课件

ID:38586654

大小:387.31 KB

页数:41页

时间:2019-06-15

《ARM编程技巧》PPT课件_第1页
《ARM编程技巧》PPT课件_第2页
《ARM编程技巧》PPT课件_第3页
《ARM编程技巧》PPT课件_第4页
《ARM编程技巧》PPT课件_第5页
资源描述:

《《ARM编程技巧》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ARM编程技巧AgendaARM编译器优化C/C++和汇编混合模式编程使用ARM编译器编码局部和全局数据讨论优化级别使用的编译器优化级别是可选择的-O0---DEBUG关闭大多数优化.最好的调试信息,最少的优化-O1---DEBUGREL多数优化选项许可给一个满意的调试,好的代码密度-O2---RELEASE(default)完全的优化有限的调试信息,最好的代码密度为代码大小或运行速度的优化,可选择:-Ospace(默认的)或-Otime.使用-g选像可包含源码级调试信息ADS编译器在所有级别中执行一些简单的优化i.e.-O0,-O1,-O2下面是一个例子

2、:即使用-O0,多余的表达式也被清除了:ATPCS标准中子程序结果返回规则结果为32位整数,R0返回结果为64位整数,R0,R1返回位数更多时,用内存来传递……自动优化intf(int*p){return(*p==*p);}armcc-c-O0fMOVr1,r0MOVr0,#1MOVpc,lr注意:在这种情况下,可使用C的关键字volatile强制使用这些变量使用“volatile”intf(volatileint*p){return(*p==*p);}armcc-cfLDRr1,[r0]LDRr0,[r0]CMPr1,r0MOVNEr0,#0MOVEQr

3、0,#1MOVpc,lrintf(int*p){return(*p==*p);}fMOVr0,#1MOVpc,lrarmcc-c这个代码用的编译级别是:-o2下面是一个冗余代码清除的例子,他只用了-o1的优化选项:冗余代码的清除intdummy(){inta=10,b=20;intc;c=a+b;return0;}armcc-c-O1dummyMOVr0,#0MOVpc,lr指令编排指令编排在高级优化选项中是有效的(-O1,-O2).指令的重新编排是为了使要运行的代码更适合对应的核为arm9和以后的处理器提高吞吐量(一般可达到4%),并防止互锁(inter

4、lock)选择处理器可决定使用的运算法则,在默认情况下,使用针对ARM9的优化方案(对ARM7的运行没有影响)例如:intf(int*p,intx){return*p+x*3;}没用指令编排(-O0)使用指令编排(-O1,-O2)ADDr1,r1,r1,LSL#1LDRr0,[r0,#0] LDRr0,[r0,#0]ADDr1,r1,r1,LSL#1 ADDr0,r0,r1;interlockonARM9ADDr0,r0,r1 MOVpc,lrMOVpc,lrarmcc–cpuarm7tdmiarmcc–cpuarm9tdmiTail-callOptimi

5、zation嵌套优化可避免在函数级里的不必要的返回在可能的情况下BL译码成B在高级优化里有效(-O1,-O2).intmain() {intx=f(); : }intf() {inty=g(); returny; }intg() { return10; }BgBLf :MOVr0,#10 MOVpc,lrBLf :STRlr,[sp,#-4]! BLg MOVr1,r0 MOVr0,r1 LDRpc,[sp],#4MOVr0,#10MOVpc,lr嵌套优化内嵌函数(inline)内嵌可通过删除子函数调用的开销来提高性能这个inline关键字显示哪个函数将被

6、内嵌在高级优化选项中,ADS1.2编译器默认自动内嵌-Oautoinline(default-O2)-Ono_autoline(defaultfor-O0,-O1)哪个函数是否被内嵌取决于:他们是否被__inline标示优化的级别-Otime/-Ospace函数被调用的次数如果函数在别的模块中不被调用,一个好的建议是用static标识函数,否则,编译器将在内嵌译码里把该函数编译乘非内嵌的加代码的长度使调试信息更复杂Example...Inlineexampleintbar(inta){a=a+5;returna;}intfoo(inti){i=bar(i)

7、;i=i-2;i=bar(i);i++;returni;}barADDr0,r0,#5MOVpc,lrfooSTRlr,[sp,#-4]!BLbarSUBr0,r0,#2BLbarADDr0,r0,#1LDRpc,[sp],#4__inlineintbar(inta){a=a+5;returna;}intfoo(inti){i=bar(i);i=i-2;i=bar(i);i++;returni;}fooADDr0,r0,#5SUBr0,r0,#2ADDr0,r0,#5ADDr0,r0,#1MOVpc,lr内嵌例子AgendaARM编译器的优化C/C++和汇

8、编混合模式编程使用ARM编译器编码局部和全局数据讨论C和汇编的混合

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。