专业-大三下嵌入式系统lecture2-_第1页
专业-大三下嵌入式系统lecture2-_第2页
专业-大三下嵌入式系统lecture2-_第3页
专业-大三下嵌入式系统lecture2-_第4页
专业-大三下嵌入式系统lecture2-_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

系统第十二讲优化航空航天大学的要求功能性要求:满足系统所要求的功能;时限性要求:满足系统的实时性要求;存贮器要求:适应系统内存总量要求;功耗要求:满足系统能耗的要求;编程语言的选择高级语言:C、C++、JAVA、Ada等;汇编语言:硬件体系结构相关;程序的编译执行过程高级编程语言汇编语言编译器汇编器目标代码器可执行的二进制代码目标机C编译环境C交叉编译环境一般都包括编译器、汇编器和链接器。汇编器的任务是将符号级的汇编语言翻译成称为目标代码的指令位级表示;

器是用来将不同的模块(编译或汇编过的文件)链接成目标文件;则允许将代码和数据放置在目标处理器的指定内存空间汇编程序汇编完成汇编语言到二进制代码的转换;标记处理方法:第一次扫描代码以决定每个标记的地址;第二次用第一次中的标记值汇编指令,产生二进制代码;符号表ADD

r0,r1,r2Label1 ADD

r3,r4,r5CMPr0,r3Label2 SUB

r5,r6,r7assemblycodeLabel1

0x8Label2

0x10symbol

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

5*(c-d)expression*-*+DFGabc

d51

*算术表达式的代码翻译ADR

r4,aMOV

r1,[r4]ADR

r4,bMOV

r2,[r4]MUL

r3,r1,r2DFG2

-3

*4

+abc

d5ADR

r4,cMOV

r1,[r4]ADR

r4,dMOV

r5,[r4]SUB

r6,r4,r5MUL

r7,r6,#5ADD

r8,r7,r3code控制代码的产生if

(a+b

>

0)x

=

5;elsex

=

7;a+b>0x=5x=7321控制代码的翻译ADR

r5,aLDR

r1,[r5]ADR

r5,bLDR

r2,bADD

r3,r1,r2BLE

label3a+b>0x=5x=7LDR

r3,#5ADR

r5,xSTR

r3,[r5]Bstmtentlabel3

LDR

r3,#7ADR

r5,xSTR

r3,[r5]stmtent

...过程过程一般指不返回值的结构;要求代码:调用并返回;传递参数和结果.参数和结果是在堆栈中传递的.带有几个参数的过程可以使用寄存器.过程堆栈proc1proc25growthproc1(int

a)

{proc2(5);}SPstack

pointerFPframe

pointeraccessed

relative

to

SP编译技术——ARM过程调用标准(APCS)APCS,ARM过程调用标准(ARM

Procedure

Call

Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自

C、

Pascal、也可以是用汇编语言写成的。APCS定义了:r0-r3

pass

parameters

into

procedure.

Extra

parametersare

put

on

stack

frame.r0

holds

return

value.r4-r7

hold

register

values.r11

is

frame

pointer,

r13

is

stack

pointer.编译技术——数据结构编译程序必须对相关数据结构的

翻译成对原始

器的引用,通常需要在运行时进行地址计算;一维数组二维数组结构体A[0]A[1]Field1Field2]A[0,0]A[0,1]A[1,0]A[1,0]编译技术——表达式简化1、A*B+A*CA*(B+C)2、for(i=0;i<8+1;i++)

for(i=0;i<9;i++)编译技术——死代码清除死代码是指

不会被执行的代码,在编译是要能够识别这些代码,并将其从程序中清除掉。死代码大都是一些调试信息编译技术——循环变换循环是重要的程序结构,经常占用大量的CPU的计算时间,在编程时需要优化;循环展开:循环合并:循环折叠:for(i=0;

i<N;i++)

a[i]

=

b[i]

*5;for

(j=0;

j<N;

j++)

w[j]

=

c[j]

*

d[j];ð

for(i=0;

i<N;

i++)

{a[i]

=b[i]

*

5;

w[i]

=

c[i]

*

d[i];}for

(i=0;

i<4;

i++)a[i]

=

b[i]

*c[i];ðfor

(i=0;

i<2;

i++)

{a[i*2]

=

b[i*2]

*c[i*2];a[i*2+1]

=

b[i*2+1]

*

c[i*2+1];编译技术——寄存器分配寄存器分配选择寄存器变量的分配以使所需的寄存器总数最少;w

=

a

+

b;x=

c+

w;y

=

c

+

d;r0r1r2r0r3r0r3timeabcdwxy123t=1t=2t=3程序优化Optimizing

for

execution

time.Optimizing

forenergy/power.Optimizing

for

program

size.影响程序运行时间的主要因素源代码:编写高效优化的高级语言源代码可以缩短程序运行的时间;编译器:编译器负责把高级语言代码转换成机器代码程序,不同的编译器会导致代码的效率的不同;硬件的体系结构:硬件的体系结构对程序的运行时间有较大的影响,如CPU

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

器 :引入临时变量来保存中间结果,只有当最后的值计算出来时,才将结果存放到数组或全局变量中;3。低级优化:尝试各种与数组代码相对的指针形式;通过展开循环降低循环开销;通过迭代分割的技术,找到使用流水线优化的功能单元的方法;程序剖析(Profiling)1、程序剖析用来分析程序的各个部分需要多少CPU时间,程序剖析一边可以在现实的基准数据上运行实际的程序,一边进行剖析;2、GPROF——UNIX提供的剖析程序:确定程序中每个函数花费了多少CPU时间;计算每个函数被调用的次数,以调用函数来分类;Amdahl定律Amdahl定律主要用于描述提高系统某一部分性能对整个系统性能的影响;例:设一个系统执行某个应用程序需要时间Told,而系统的某个部分运行所需要时间的百分比为a,如果

性能提高了k倍,则这个部分原来需要时间aTold,而现在需要时间(aTold)/K。因此,整个程序执行时间为:Tnew=(1-a)Told+(aTold)/k=Told[(1-a)+a/k]所以程序加速比为S=Told/Tnew=1/[(1-a)+a/k]即:如果以前占系统60%时间的部分性能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论