嵌入式程序设计与分析

上传人:1537****568 文档编号:359549306 上传时间:2023-08-31 格式:PPT 页数:56 大小:262KB
返回 下载 相关 举报
嵌入式程序设计与分析_第1页
第1页 / 共56页
嵌入式程序设计与分析_第2页
第2页 / 共56页
嵌入式程序设计与分析_第3页
第3页 / 共56页
嵌入式程序设计与分析_第4页
第4页 / 共56页
嵌入式程序设计与分析_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《嵌入式程序设计与分析》由会员分享,可在线阅读,更多相关《嵌入式程序设计与分析(56页珍藏版)》请在金锄头文库上搜索。

1、1嵌入式系统及开发嵌入式系统及开发讲义讲义第八讲第八讲 程序设计与分析程序设计与分析2本节提要本节提要1 13 32 2程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步3嵌入式软件的要求l功能性要求:满足系统所要求的功能。功能性要求:满足系统所要求的功能。l时限性要求:满足系统的实时性要求。时限性要求:满足系统的实时性要求。l存储器要求:适应系统内存总量要求。存储器要求:适应系统内存总量要求。l功耗要求:满足系统能耗的要求。功耗要求:满足系统能耗的要求。4嵌入式编程语言的选择l高级语言:高级语言:C C、C+C+、JAVAJAVA、AdaAda等。等。l汇编语言:硬

2、件体系结构相关。汇编语言:硬件体系结构相关。5程序的编译执行过程6嵌入式C编译环境 嵌入式嵌入式C C交叉编译环境一般都包括汇编器、链接器和定位器。交叉编译环境一般都包括汇编器、链接器和定位器。l汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令位级表示。位级表示。l链接器是用来将不同的模块(编译或汇编过的文件)链接成目标链接器是用来将不同的模块(编译或汇编过的文件)链接成目标文件。文件。l定位器则允许将代码和数据放置在目标处理器的指定内存空间。定位器则允许将代码和数据放置在目标处理器的指定内存空间。7汇编程序l汇编完成汇编语言到二

3、进制代码的转换。汇编完成汇编语言到二进制代码的转换。l标记处理方法:标记处理方法:l第一次扫描代码以决定每个标记的地址。第一次扫描代码以决定每个标记的地址。l第二次用第一次中的标记值汇编指令,产生二进制代码。第二次用第一次中的标记值汇编指令,产生二进制代码。8符号表 ADD r0,r1,r2Label1 ADD r3,r4,r5 CMP r0,r3Label2 SUB r5,r6,r7assembly codeLabel1 0 x8Label2 0 x10symbol table9编译过程高级编程语言语法分析、生成符号表和语义分析独立于机器的优化指令级优化和代码生成汇编代码10ARM开发环境包

4、含的C/C+编译器11编译=翻译+优化编译结合了翻译和优化两个环节编译结合了翻译和优化两个环节l翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。l优化一方面产生更好的指令顺序,另一方面从整体上考虑程序优化一方面产生更好的指令顺序,另一方面从整体上考虑程序效率。效率。l编译过程中,高级语言被拆分成语句和表达式。编译过程中,高级语言被拆分成语句和表达式。12编译技术语句翻译a*b+5*(c-d)expressionDFG*-*+abcd5132341算术表达式的代码翻译ADR r4,aMOV r1,r4ADR r4,bMOV r2,r4M

5、UL 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,r5B stmtent label3 LDR r3,#7ADR r5,xSTR r3,r5stmtent.18编译技术A

6、RM过程调用标准(APCS)APCS APCS,ARM ARM 过程调用标准过程调用标准(ARM Procedure Call Standard)(ARM Procedure Call Standard),提,提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自它们可以编译自 C C、Pascal Pascal,也可以是用汇编语言写成的。,也可以是用汇编语言写成的。APCS APCS 定义了定义了:lr0

7、-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编译技术数据结构 编译程序必须对相关数据结构的引用翻译成对原始存储器的编译程序必须对相关数据结构的引用翻译成对原始存储器的引用,通常需要在运行时进行地址计算。引用,通常需要在运行时进行地址计算。l一维数组一维数组l二维数组二维数组l结构体结构体 A0A1Fi

8、eld1Field2A0,0A0,1A1,0A1,020编译技术表达式简化1.A*B+A*C1.A*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死代码大都是一些调试信息。死代码大都是一些调试信息。22编译技术循环变换l循环是重要的程序结构,经常占用大量的循环是重要的程序结构,经常占用大量的C

9、PUCPU的计算时间,在编程的计算时间,在编程时需要优化;时需要优化;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编译技术寄存器分配寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;w=a+b;x=c+w;y=c+

10、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 for program size.Optimizing for program size.26影响程序运行时

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

12、存管理等对程序执行时间有重操作系统:操作系统决定了任务调度与内存管理等对程序执行时间有重要影响,结合硬件的体系结构,决定了系统的中断响应时间。要影响,结合硬件的体系结构,决定了系统的中断响应时间。27程序优化的基本策略1.1.高级程序设计:选择适当的算法与数据结构,避免使用可能会渐高级程序设计:选择适当的算法与数据结构,避免使用可能会渐进产生较差性能的算法与编码技术。进产生较差性能的算法与编码技术。2.2.基本编码原则:避免采用限制编译器优化的因素,从而令编译器基本编码原则:避免采用限制编译器优化的因素,从而令编译器产生高效的代码;产生高效的代码;l消除连续的函数调用:如将计算移动循环外。消除

13、连续的函数调用:如将计算移动循环外。l消除不必要的存储器引用:引入临时变量来保存中间结果,只消除不必要的存储器引用:引入临时变量来保存中间结果,只有当最后的值计算出来时,才将结果存放到数组或全局变量中。有当最后的值计算出来时,才将结果存放到数组或全局变量中。3.3.低级优化:低级优化:l尝试各种与数组代码相对的指针形式。尝试各种与数组代码相对的指针形式。l通过展开循环降低循环开销。通过展开循环降低循环开销。l通过迭代分割的技术,找到使用流水线优化的功能单元的方法。通过迭代分割的技术,找到使用流水线优化的功能单元的方法。28程序剖析(Profiling)1.1.程序剖析用来分析程序的各个部分需要

14、多少程序剖析用来分析程序的各个部分需要多少CPUCPU时间,程序剖析时间,程序剖析一边可以在现实的基准数据上运行实际的程序,一边进行剖析。一边可以在现实的基准数据上运行实际的程序,一边进行剖析。2.GPROFUNIX2.GPROFUNIX提供的剖析程序:提供的剖析程序:l确定程序中每个函数花费了多少确定程序中每个函数花费了多少CPUCPU时间。时间。l计算每个函数被调用的次数,以调用函数来分类。计算每个函数被调用的次数,以调用函数来分类。29Amdahl定律 Amdahl Amdahl定律主要用于描述提高系统某一部分性能对整个系统性能定律主要用于描述提高系统某一部分性能对整个系统性能的影响;的

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

16、序加速比为:S=T S=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嵌入式Linux分类l第一类是在利用第一类是在利用LinuxLinux强大功能的前提下,使它尽可能得小

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号