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

上传人:b****3 文档编号:2743499 上传时间:2022-11-10 格式:PPT 页数:56 大小:428.50KB
下载 相关 举报
八、嵌入式程序设计与分析.ppt_第1页
第1页 / 共56页
八、嵌入式程序设计与分析.ppt_第2页
第2页 / 共56页
八、嵌入式程序设计与分析.ppt_第3页
第3页 / 共56页
八、嵌入式程序设计与分析.ppt_第4页
第4页 / 共56页
八、嵌入式程序设计与分析.ppt_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

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

《八、嵌入式程序设计与分析.ppt》由会员分享,可在线阅读,更多相关《八、嵌入式程序设计与分析.ppt(56页珍藏版)》请在冰豆网上搜索。

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

1嵌入式系统设计与实例开发嵌入式系统设计与实例开发ARMARM与与C/OS-C/OS-第八讲第八讲程序设计与分析程序设计与分析北京航空航天大学北京航空航天大学嵌入式机电控制研究室嵌入式机电控制研究室2本节提要本节提要113322程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步3嵌入式软件的要求l功能性要求:

满足系统所要求的功能。

功能性要求:

满足系统所要求的功能。

l时限性要求:

满足系统的实时性要求。

时限性要求:

满足系统的实时性要求。

l存储器要求:

适应系统内存总量要求。

存储器要求:

适应系统内存总量要求。

l功耗要求:

满足系统能耗的要求。

功耗要求:

满足系统能耗的要求。

4嵌入式编程语言的选择l高级语言:

高级语言:

CC、C+C+、JAVAJAVA、AdaAda等。

等。

l汇编语言:

硬件体系结构相关。

汇编语言:

硬件体系结构相关。

5程序的编译执行过程6嵌入式C编译环境嵌入式嵌入式CC交叉编译环境一般都包括汇编器、链接器和定位器。

交叉编译环境一般都包括汇编器、链接器和定位器。

l汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令位级表示。

位级表示。

l链接器是用来将不同的模块(编译或汇编过的文件)链接成目标链接器是用来将不同的模块(编译或汇编过的文件)链接成目标文件。

文件。

l定位器则允许将代码和数据放置在目标处理器的指定内存空间。

定位器则允许将代码和数据放置在目标处理器的指定内存空间。

7汇编程序l汇编完成汇编语言到二进制代码的转换。

汇编完成汇编语言到二进制代码的转换。

l标记处理方法:

标记处理方法:

l第一次扫描代码以决定每个标记的地址。

第一次扫描代码以决定每个标记的地址。

l第二次用第一次中的标记值汇编指令,产生二进制代码。

第二次用第一次中的标记值汇编指令,产生二进制代码。

8符号表ADDr0,r1,r2Label1ADDr3,r4,r5CMPr0,r3Label2SUBr5,r6,r7assemblycodeLabel10x8Label20x10symboltable9编译过程高级编程语言语法分析、生成符号表和语义分析独立于机器的优化指令级优化和代码生成汇编代码10ARM开发环境包含的C/C+编译器11编译=翻译+优化编译结合了翻译和优化两个环节编译结合了翻译和优化两个环节l翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。

翻译是将高级语言翻译为低级指令形式(或汇编语言形式)。

l优化一方面产生更好的指令顺序,另一方面从整体上考虑程序优化一方面产生更好的指令顺序,另一方面从整体上考虑程序效率。

效率。

l编译过程中,高级语言被拆分成语句和表达式。

编译过程中,高级语言被拆分成语句和表达式。

12编译技术语句翻译a*b+5*(c-d)expressionDFG*-*+abcd5132341算术表达式的代码翻译ADRr4,aMOVr1,r4ADRr4,bMOVr2,r4MULr3,r1,r2DFG*-*+abcd5ADRr4,cMOVr1,r4ADRr4,dMOVr5,r4SUBr6,r4,r5MULr7,r6,#5ADDr8,r7,r3code14控制代码的产生if(a+b0)x=5;elsex=7;a+b0x=5x=715321控制代码的翻译ADRr5,aLDRr1,r5ADRr5,bLDRr2,bADDr3,r1,r2BLElabel3a+b0x=5x=7LDRr3,#5ADRr5,xSTRr3,r5Bstmtentlabel3LDRr3,#7ADRr5,xSTRr3,r5stmtent.18编译技术ARM过程调用标准(APCS)APCSAPCS,ARMARM过程调用标准过程调用标准(ARMProcedureCallStandard)ARMProcedureCallStandard),提提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。

最显著的一点是对这些例程来自哪里没有明确的限制。

织在一起。

最显著的一点是对这些例程来自哪里没有明确的限制。

它们可以编译自它们可以编译自CC、PascalPascal,也可以是用汇编语言写成的。

也可以是用汇编语言写成的。

APCSAPCS定义了定义了:

lr0-r3passparametersintoprocedure.Extraparametersareputonstackframe.lr0holdsreturnvalue.lr4-r7holdregistervalues.lr11isframepointer,r13isstackpointer.19编译技术数据结构编译程序必须对相关数据结构的引用翻译成对原始存储器的编译程序必须对相关数据结构的引用翻译成对原始存储器的引用,通常需要在运行时进行地址计算。

引用,通常需要在运行时进行地址计算。

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死代码大都是一些调试信息。

死代码大都是一些调试信息。

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编译技术寄存器分配寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;w=a+b;x=c+w;y=c+d;ar0br1cr2dr0wr3xr0yr3timeabcdwxy123t=1t=2t=324本节提要本节提要113322程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步25程序优化lOptimizingforexecutiontime.Optimizingforexecutiontime.lOptimizingforenergy/power.Optimizingforenergy/power.lOptimizingforprogramsize.Optimizingforprogramsize.26影响程序运行时间的主要因素l源代码:

编写高效优化的高级语言源代码可以缩短程序运行的时间。

源代码:

编写高效优化的高级语言源代码可以缩短程序运行的时间。

l编译器:

编译器负责把高级语言代码转换成机器代码程序,不同的编译编译器:

编译器负责把高级语言代码转换成机器代码程序,不同的编译器会导致代码效率的不同。

器会导致代码效率的不同。

l硬件的体系结构:

硬件的体系结构对程序的运行时间有较大的影响,如硬件的体系结构:

硬件的体系结构对程序的运行时间有较大的影响,如CPUCPU内部寄存器的数量、高速缓存的大小和组织、系统的内存大小等。

内部寄存器的数量、高速缓存的大小和组织、系统的内存大小等。

l操作系统:

操作系统决定了任务调度与内存管理等对程序执行时间有重操作系统:

操作系统决定了任务调度与内存管理等对程序执行时间有重要影响,结合硬件的体系结构,决定了系统的中断响应时间。

要影响,结合硬件的体系结构,决定了系统的中断响应时间。

27程序优化的基本策略1.1.高级程序设计:

选择适当的算法与数据结构,避免使用可能会渐高级程序设计:

选择适当的算法与数据结构,避免使用可能会渐进产生较差性能的算法与编码技术。

进产生较差性能的算法与编码技术。

2.2.基本编码原则:

避免采用限制编译器优化的因素,从而令编译器基本编码原则:

避免采用限制编译器优化的因素,从而令编译器产生高效的代码;产生高效的代码;l消除连续的函数调用:

如将计算移动循环外。

消除连续的函数调用:

如将计算移动循环外。

l消除不必要的存储器引用:

引入临时变量来保存中间结果,只消除不必要的存储器引用:

引入临时变量来保存中间结果,只有当最后的值计算出来时,才将结果存放到数组或全局变量中。

有当最后的值计算出来时,才将结果存放到数组或全局变量中。

3.3.低级优化:

低级优化:

l尝试各种与数组代码相对的指针形式。

尝试各种与数组代码相对的指针形式。

l通过展开循环降低循环开销。

通过展开循环降低循环开销。

l通过迭代分割的技术,找到使用流水线优化的功能单元的方法。

通过迭代分割的技术,找到使用流水线优化的功能单元的方法。

28程序剖析(Profiling)1.1.程序剖析用来分析程序的各个部分需要多少程序剖析用来分析程序的各个部分需要多少CPUCPU时间,程序剖析时间,程序剖析一边可以在现实的基准数据上运行实际的程序,一边进行剖析。

一边可以在现实的基准数据上运行实际的程序,一边进行剖析。

2.2.GPROFGPROFUNIXUNIX提供的剖析程序:

提供的剖析程序:

l确定程序中每个函数花费了多少确定程序中每个函数花费了多少CPUCPU时间。

时间。

l计算每个函数被调用的次数,以调用函数来分类。

计算每个函数被调用的次数,以调用函数来分类。

29Amdahl定律AmdahlAmdahl定律主要用于描述提高系统某一部分性能对整个系统性能定律主要用于描述提高系统某一部分性能对整个系统性能的影响;的影响;例:

设一个系统执行某个应用程序需要时间例:

设一个系统执行某个应用程序需要时间TToldold,而系统的某个部分而系统的某个部分运行所需要时间的百分比为运行所需要时间的百分比为aa,如果性能提高了如果性能提高了kk倍,则这个部分倍,则这个部分原来需要时间原来需要时间aTaToldold,而现在需要时间而现在需要时间(aTaToldold)/K)/K。

因此,整个程序因此,整个程序执行时间为执行时间为:

TTnewnew=(1-a)T1-a)Toldold+(aT+(aToldold)/k)/k=T=Toldold(1-a)+a/k(1-a)+a/k所以程序加速比为所以程序加速比为:

S=TS=Toldold/TTnewnew=1/(1-a)+a/k=1/(1-a)+a/k即:

如果以前占系统即:

如果以前占系统60%60%时间的部分性能提高了时间的部分性能提高了33倍(倍(k=3)k=3),则程则程序加速比为序加速比为1.671.67。

所以要想提高整个系统的速度,光大幅度提高。

所以要想提高整个系统的速度,光大幅度提高某一部分的速度是不够的。

某一部分的速度是不够的。

30影响程序性能的要素程序的执行时间程序的执行时间=程序路径程序路径+指令耗时指令耗时l路径是被程序(或者说它等价于程序的高级语言表示)执行的指令序列。

路径是被程序(或者说它等价于程序的高级语言表示)执行的指令序列。

l指令耗时基于被程序路径跟踪的指令序列,它考虑数据相关性、流水线行指令耗时基于被程序路径跟踪的指令序列,它考虑数据相关性、流水线行为和高速缓存。

为和高速缓存。

31本节提要本节提要113322程序编译技术程序编译技术程序优化技术程序优化技术LinuxLinux初步初步32嵌入式L

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

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

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