ImageVerifierCode 换一换
格式:PPT , 页数:56 ,大小:428.50KB ,
资源ID:2743499      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2743499.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(八、嵌入式程序设计与分析.ppt)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

八、嵌入式程序设计与分析.ppt

1、1嵌入式系统设计与实例开发嵌入式系统设计与实例开发ARMARM与与 C/OS-C/OS-第八讲第八讲 程序设计与分析程序设计与分析北京航空航天大学北京航空航天大学嵌入式机电控制研究室嵌入式机电控制研究室2本节提要本节提要1 13 32 2程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步3嵌入式软件的要求l功能性要求:满足系统所要求的功能。功能性要求:满足系统所要求的功能。l时限性要求:满足系统的实时性要求。时限性要求:满足系统的实时性要求。l存储器要求:适应系统内存总量要求。存储器要求:适应系统内存总量要求。l功耗要求:满足系统能耗的要求。功耗要求:满足系统能耗的要

2、求。4嵌入式编程语言的选择l高级语言:高级语言:C C、C+C+、JAVAJAVA、AdaAda等。等。l汇编语言:硬件体系结构相关。汇编语言:硬件体系结构相关。5程序的编译执行过程6嵌入式C编译环境 嵌入式嵌入式C C交叉编译环境一般都包括汇编器、链接器和定位器。交叉编译环境一般都包括汇编器、链接器和定位器。l汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令位级表示。位级表示。l链接器是用来将不同的模块(编译或汇编过的文件)链接成目标链接器是用来将不同的模块(编译或汇编过的文件)链接成目标文件。文件。l定位器则允许将代码和数据放

3、置在目标处理器的指定内存空间。定位器则允许将代码和数据放置在目标处理器的指定内存空间。7汇编程序l汇编完成汇编语言到二进制代码的转换。汇编完成汇编语言到二进制代码的转换。l标记处理方法:标记处理方法:l第一次扫描代码以决定每个标记的地址。第一次扫描代码以决定每个标记的地址。l第二次用第一次中的标记值汇编指令,产生二进制代码。第二次用第一次中的标记值汇编指令,产生二进制代码。8符号表 ADD r0,r1,r2Label1 ADD r3,r4,r5 CMP r0,r3Label2 SUB r5,r6,r7assembly codeLabel1 0 x8Label2 0 x10symbol tabl

4、e9编译过程高级编程语言语法分析、生成符号表和语义分析独立于机器的优化指令级优化和代码生成汇编代码10ARM开发环境包含的C/C+编译器11编译=翻译+优化编译结合了翻译和优化两个环节编译结合了翻译和优化两个环节l翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。l优化一方面产生更好的指令顺序,另一方面从整体上考虑程序优化一方面产生更好的指令顺序,另一方面从整体上考虑程序效率。效率。l编译过程中,高级语言被拆分成语句和表达式。编译过程中,高级语言被拆分成语句和表达式。12编译技术语句翻译a*b+5*(c-d)expressionDFG*

5、-*+abcd5132341算术表达式的代码翻译ADR r4,aMOV r1,r4ADR r4,bMOV r2,r4MUL r3,r1,r2DFG*-*+abcd5ADR r4,cMOV r1,r4ADR r4,dMOV r5,r4SUB r6,r4,r5MUL r7,r6,#5ADD r8,r7,r3code14控制代码的产生if(a+b 0)x=5;elsex=7;a+b0 x=5x=715321控制代码的翻译ADR r5,aLDR r1,r5ADR r5,bLDR r2,bADD r3,r1,r2BLE label3a+b0 x=5x=7LDR r3,#5ADR r5,xSTR r3,r

6、5B stmtent label3 LDR r3,#7ADR r5,xSTR r3,r5stmtent.18编译技术ARM过程调用标准(APCS)APCSAPCS,ARM ARM 过程调用标准过程调用标准(ARM Procedure Call Standard)ARM Procedure Call Standard),提提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自它们可以编译自 C C、Pasca

7、l Pascal,也可以是用汇编语言写成的。也可以是用汇编语言写成的。APCS APCS 定义了定义了:lr0-r3 pass parameters into procedure.Extra parameters are put on stack frame.lr0 holds return value.lr4-r7 hold register values.lr11 is frame pointer,r13 is stack pointer.19编译技术数据结构 编译程序必须对相关数据结构的引用翻译成对原始存储器的编译程序必须对相关数据结构的引用翻译成对原始存储器的引用,通常需要在运行时进行

8、地址计算。引用,通常需要在运行时进行地址计算。l一维数组一维数组l二维数组二维数组l结构体结构体 A0A1Field1Field2A0,0A0,1A1,0A1,020编译技术表达式简化1.1.A*B+A*CA*B+A*CA*A*(B+CB+C)2.for(i=0;2.for(i=0;i8+1i8+1;i+);i+)for(i=0;for(i=0;i9i9;i+);i+)21编译技术死代码清除l死代码是指永远不会被执行的代码,在编译时要能够识别这些代死代码是指永远不会被执行的代码,在编译时要能够识别这些代码,并将其从程序中清除掉。码,并将其从程序中清除掉。l死代码大都是一些调试信息。死代码大都是

9、一些调试信息。22编译技术循环变换l循环是重要的程序结构,经常占用大量的循环是重要的程序结构,经常占用大量的CPUCPU的计算时间,在编程的计算时间,在编程时需要优化;时需要优化;l循环展开:循环展开:l循环合并:循环合并:l循环折叠:循环折叠:for(i=0;iN;i+)ai=bi*5;for(j=0;jN;j+)wj=cj*dj;for(i=0;iN;i+)ai=bi*5;wi=ci*di;for(i=0;i4;i+)ai=bi*ci;for(i=0;i2;i+)ai*2=bi*2*ci*2;ai*2+1=bi*2+1*ci*2+1;23编译技术寄存器分配寄存器分配选择寄存器变量的分配以使

10、所需的寄存器总数最少;寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;w=a+b;x=c+w;y=c+d;a r0b r1c r2d r0w r3x r0y r3timeabcdwxy123t=1t=2t=324本节提要本节提要1 13 32 2程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步25程序优化lOptimizing for execution time.Optimizing for execution time.lOptimizing for energy/power.Optimizing for energy/power.lOptimizing

11、 for program size.Optimizing for program size.26影响程序运行时间的主要因素l源代码:编写高效优化的高级语言源代码可以缩短程序运行的时间。源代码:编写高效优化的高级语言源代码可以缩短程序运行的时间。l编译器:编译器负责把高级语言代码转换成机器代码程序,不同的编译编译器:编译器负责把高级语言代码转换成机器代码程序,不同的编译器会导致代码效率的不同。器会导致代码效率的不同。l硬件的体系结构:硬件的体系结构对程序的运行时间有较大的影响,如硬件的体系结构:硬件的体系结构对程序的运行时间有较大的影响,如CPUCPU内部寄存器的数量、高速缓存的大小和组织、系统

12、的内存大小等。内部寄存器的数量、高速缓存的大小和组织、系统的内存大小等。l操作系统:操作系统决定了任务调度与内存管理等对程序执行时间有重操作系统:操作系统决定了任务调度与内存管理等对程序执行时间有重要影响,结合硬件的体系结构,决定了系统的中断响应时间。要影响,结合硬件的体系结构,决定了系统的中断响应时间。27程序优化的基本策略1.1.高级程序设计:选择适当的算法与数据结构,避免使用可能会渐高级程序设计:选择适当的算法与数据结构,避免使用可能会渐进产生较差性能的算法与编码技术。进产生较差性能的算法与编码技术。2.2.基本编码原则:避免采用限制编译器优化的因素,从而令编译器基本编码原则:避免采用限

13、制编译器优化的因素,从而令编译器产生高效的代码;产生高效的代码;l消除连续的函数调用:如将计算移动循环外。消除连续的函数调用:如将计算移动循环外。l消除不必要的存储器引用:引入临时变量来保存中间结果,只消除不必要的存储器引用:引入临时变量来保存中间结果,只有当最后的值计算出来时,才将结果存放到数组或全局变量中。有当最后的值计算出来时,才将结果存放到数组或全局变量中。3.3.低级优化:低级优化:l尝试各种与数组代码相对的指针形式。尝试各种与数组代码相对的指针形式。l通过展开循环降低循环开销。通过展开循环降低循环开销。l通过迭代分割的技术,找到使用流水线优化的功能单元的方法。通过迭代分割的技术,找

14、到使用流水线优化的功能单元的方法。28程序剖析(Profiling)1.1.程序剖析用来分析程序的各个部分需要多少程序剖析用来分析程序的各个部分需要多少CPUCPU时间,程序剖析时间,程序剖析一边可以在现实的基准数据上运行实际的程序,一边进行剖析。一边可以在现实的基准数据上运行实际的程序,一边进行剖析。2.2.GPROFGPROFUNIXUNIX提供的剖析程序:提供的剖析程序:l确定程序中每个函数花费了多少确定程序中每个函数花费了多少CPUCPU时间。时间。l计算每个函数被调用的次数,以调用函数来分类。计算每个函数被调用的次数,以调用函数来分类。29Amdahl定律 AmdahlAmdahl定

15、律主要用于描述提高系统某一部分性能对整个系统性能定律主要用于描述提高系统某一部分性能对整个系统性能的影响;的影响;例:设一个系统执行某个应用程序需要时间例:设一个系统执行某个应用程序需要时间T Toldold,而系统的某个部分而系统的某个部分运行所需要时间的百分比为运行所需要时间的百分比为a a,如果性能提高了如果性能提高了k k倍,则这个部分倍,则这个部分原来需要时间原来需要时间aTaToldold,而现在需要时间而现在需要时间(aTaToldold)/K)/K。因此,整个程序因此,整个程序执行时间为执行时间为:T Tnewnew=(1-a)T1-a)Toldold+(aT+(aToldol

16、d)/k)/k =T =Toldold(1-a)+a/k(1-a)+a/k 所以程序加速比为所以程序加速比为:S=TS=Toldold/T Tnewnew=1/(1-a)+a/k=1/(1-a)+a/k 即:如果以前占系统即:如果以前占系统60%60%时间的部分性能提高了时间的部分性能提高了3 3倍(倍(k=3)k=3),则程则程序加速比为序加速比为1.671.67。所以要想提高整个系统的速度,光大幅度提高。所以要想提高整个系统的速度,光大幅度提高某一部分的速度是不够的。某一部分的速度是不够的。30影响程序性能的要素程序的执行时间程序的执行时间=程序路径程序路径+指令耗时指令耗时l路径是被程序(或者说它等价于程序的高级语言表示)执行的指令序列。路径是被程序(或者说它等价于程序的高级语言表示)执行的指令序列。l指令耗时基于被程序路径跟踪的指令序列,它考虑数据相关性、流水线行指令耗时基于被程序路径跟踪的指令序列,它考虑数据相关性、流水线行为和高速缓存。为和高速缓存。31本节提要本节提要1 13 32 2程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步32嵌入式L

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1