




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实时数字信号处理技术C6000软件开发(3)代码产生工具和C6000程序结构,北京理工大学电子工程系李云杰(Oiyunjie,学习目标,软件开发流程和开发工具C6000程序基本结构,代码产生工具,代码产生工具(CodeGenerationTools)C编译器汇编优化器汇编器连接器其它一些工具,C编译器,C编译器对符合ANSI标准的C代码进行编译,产生C6000汇编代码,分为:语法分析器C优化器代码产生器,C优化器,包括针对C代码的一般优化和针对C6000的优化:重新安排语句和表达式把变量分配给寄存器打开循环具有四个优化级别,C优化器,C代码产生器也可以完成一些优化工作C优化器最重要的优化处理软件流水pm把一个程序所有的C文件合成一个模块进行优化处理效率可达汇编语言代码的70%80%,汇编优化器,对线性汇编代码(.sa文件)进行优化输入:用户编写的线性汇编代码输出:标准汇编代码.asm文件编程过程不需考虑:并行指令安排指令延迟寄存器使用效率可达汇编语言代码的95%100%,汇编器,产生可重新分配地址的机器语言目标文件输入:C编译器产生的汇编文件汇编优化器输出的汇编文件文档管理器管理的宏库内的宏输出:目标代码是TI的COFF格式汇编代码内除机器指令外,还有汇编伪指令,连接器,根据用户说明的程序和数据存放地址,把汇编器产生的浮动地址代码和数据映射到用户系统的实际地址空间.输入:可重新分配地址的目标文件(.obj)输出:可执行的目标文件(.out),其它工具以及C运行库,文档管理器(Archiver)建库工具(Library-buildUtility)十六进制转换工具(HexConversionUtility)交叉引用列表工具(Cross-referenceLister)C运行支持库(Run-timeSupportLibrary)c6000cgtoolsincludec6000cgtoolslib,DSPs程序的仿真模式,C6000程序基本结构,C程序的基本结构汇编代码结构线性汇编语言结构C程序和汇编代码的接口实现,C程序的基本结构,主程序main.c连接命令文件.cmdc6000cgtoolsliblnk.cmdC运行库文件rtsxxxx.libc6000cgtoolslib,C程序的基本结构,若从EPROM中加载要运行的程序还需要Vectors.asmIST(中断服务表)被连接分配到0地址C运行环境入口点:_c_int00rtsxxx.lib,C程序的基本结构,CCS带有一个函数库dev6x.lib其中包含有中断向量表,无需程序员写vectors.asm中断“挂”接也很方便针对C6000的外设预定义了大量的外设地址和宏定义regs.h中有GET_BIT(),SET_BIT(),GET_FIELD()可以方便的对寄存器进行位操作.几乎所有外设寄存器的地址都已经定义,C程序的基本结构,使用devlib实现中断“挂”接Preprocesser中头文件搜索路径设置为:.c6000evm6xdspinclude将dev6x.lib文件加入项目.c6000evm6xdsplib在.cmd文件中,将.vec段分配在0地址在主程序中使用#include包含头文件在main()中调用intr_reset()函数调用intr_hook()等函数,C6000编译器的C环境实现,定义:Crun-timeenvironmentTheruntimeparametersinwhichyourprogrammustfunction.Theseparametersaredefinedby1.thememoryconventions2.registerconventions3.stackorganization4.functioncallconventions5.systeminitialization.,存储器模型,C6000编译器把整个存储区当作单个线性存储块,并将它分为代码区和数据区编译器假定目标存储器的全部32-bit地址空间是可用的。定义存储器映象并将代码和数据分配到目标存储器的是连接器,而非编译器。Cmd文件是linker使用的。,C6000的存储器映射,程序和数据的存放不是随意的C6000存储器地址映射(MemoryMap)决定着各种资源的访问地址,MAP文件,-m选项连接器输出存储器映象文件(.map)详细说明存储器的使用情况主要包括三个部分:存储器配置段分配图全局符号(全局变量、函数和段名)绝对地址,COFF文件格式,模块化的目标文件COFF格式基本组成形式段(sections)编译器生成的可重定位的代码和数据块初始化的段和未初始化段:已初始化段包含数据和可执行代码未初始化段存储器(一般指RAM)中的保留空间,程序在运行时用它来创建和存储变量.,已初始化段,.cinit段:包括变量初始值和常量值.const段:包括字符串文字(stringliterals),浮点常量和在C/C+中被声(明为const的数据(如果常量没有同时被声明为volatile).switch段:包含大的switch语句的跳转表(jumptable).text段:包含所有的可执行代码.,未初始化段,.bss段:为全局变量和静态变量保留。如果为连接器设定-c选项,则在程序的开始,C引导程序会将.cinit段的数据(可在ROM中)复制到.bss段。.far段:为声明为far的全局变量和静态变量保留。.stack段:用于传递函数的参数和为局部变量分配存储器空间。.sysmem段:提请动态存储空间分配要求的有malloc,calloc和realloc等函数。,C编译器产生的代码段和数据段,C编译器产生的默认代码段和数据,C编译器产生的代码段和数据段,几点补充汇编器产生默认的.text,.bss和.data段。允许用CODE_SECTION和DATA_SECTIONpragma来让编译器生成另外的段。除了.text段,各个初始化段和非初始化段均不能分配到内部程序存储器。,系统堆栈,编译器将堆栈用于:(1)保存函数调用后的返回地址;(2)给局部变量分配存储空间(3)传递函数参数(4)保存临时结果运行时堆栈增长方向是从高向低,编译器用B15寄存器来管理堆栈,即将它作为堆栈指针(SP),指向堆栈中下一个空闲的存储器位置。,初始化变量,C/C+编译器生成的代码可固化到ROM中,.cinit段的初始化表也是贮存在ROM中。在系统初始化的时候,C/C+引导程序将表中的数据(ROM中)拷贝给.bss段中对应的变量(RAM中)运行时初始化加载时初始化,初始化变量运行时初始化,Run-timeAutoinitialization-c选项C初始化函数c_int00()会读取.cinit段中的每一个记录信息,分别初始化.bss段中的全局/静态变量。,初始化变量加载时初始化,Load-timeInitialization-cr选项全局/静态变量的初始化工作由loader程序完成,在加载程序后,loader自己读取.cinit段的内容,初始化.bss段中数据,存储器模式,小存储器模式和大存储器模式。区别在于为.bss段分配存储空间方式。小存储器模式:.bss32KByte,使用DP(B14)访问全局数据大存储器模式:不限制.bss段的大小访问数据使用MVKL_asm(mvkh_stack,SP);_asm(mvkl_STACK_SIZE-4,B0);_asm(mvkh_STACK_SIZE-4,B0);_asm(addB0,SP,SP);/*-*/*THESPMUSTBEALIGNEDONAN8-BYTEBOUNDARY.*/*-*/_asm(and7,SP,SP);/*-*/*SETUPTHEGLOBALPAGEPOINTERINB14.*/*-*/_asm(.global$bss);_asm(mvkl$bss,DP);_asm(mvkh$bss,DP);,C_int_00源码2,/*-*/*SETUPFLOATINGPOINTREGISTERSFORC70ONLY*/*-*/#ifdef_TMS320C6700_asm(mvk0,B3);/*roundtonearest*/_asm(mvcB3,FADCR);_asm(mvcB3,FMCR);#endif/*-*/*GETTHEPOINTERTOTHEAUTOINITIALIZATIONTABLESINTOTHEFIRST*/*ARGUMENTREGISTER(A4)*/*-*/_asm(.globalcinit);_asm(mvklcinit,A4);_asm(mvkhcinit,A4);/*-*/*PASSTHECURRENTDPTOTHEAUTOINITIALIZATIONROUTINE.*/*-*/_asm(mvDP,B4);,/*-*/*CALLTHEAUTOINITIALIZATIONROUTINE.*/*-*/_asm(.global_auto_init);_asm(mvkl$aiRL,B3);_asm(mvkh$aiRL,B3);_asm(mvkl_auto_init,B0);_asm(mvkh_auto_init,B0);_asm(bB0);/*farcall*/_asm(NOP5);_asm($aiRL:);/*-*/*CALLTHEUSERSPROGRAM.*/*-*/main();/*-*/*CALLEXIT.*/*-*/exit(1);,汇编代码结构,C6000任意一行汇编代码可能包括7项:标号(label)并行符号(|)条件(register)指令(mnemonic)功能单元(unitspecifier)操作数(operandlist)注释(;comment),10MPY.M1A1,A3,A7|ADD.L1xA2,B2,A5,汇编代码结构标号,并行指令不能使用标号要使用标号,必须放在第一列,汇编代码结构指令,指令:包括命令助记符和伪指令命令助记符:有效微处理器命令,执行程序操作伪指令:汇编语言中控制汇编过程和定义数据结构,所有伪指令以圆点打头,汇编代码结构功能单元,圆点开始可选方式3种:指定具体使用的功能单元(.D1)可指定功能单元类型,汇编器安排具体单元(.M)(.M2)不指出功能单元,汇编器根据助记符安排,汇编代码结构操作数,操作数直接用逗号隔开操作数类型3种寄存器操作数常数操作数指针操作数,汇编代码结构注释,使用分号(;)时,注释可以在任何一列开始使用星号(*)时,注释必须从第一列开始不是必须,但是建议使用,一个汇编程序结构举例,程序数据结构算法,数据结构,算法,C程序的数据结构和算法实现,一个汇编程序结构举例,用汇编语言声明数据结构,一个汇编程序结构举例,用汇编语言编写算法,一个汇编程序结构举例,.sect“myData”0.sect“myCode”startLD.D1*A0,A1.ST.D1A7,*A6endBendNOP5,编程方法比较,*Typicalefficiencyvs.handoptimizedassembly.,源文件,效率*,工作量,线性汇编程序,类似与手工汇编,但不是一种编程语言它的特点:不需要使用NOPs填充延迟间隙.不需指定功能单元.代码并行自动完成.允许标识符代替寄存器.,编写线性汇编代码,文件扩展名:“.sa”.编写过程:,NONOPsrequiredNOparallelinstructionsrequiredNOfunctionalunitsspecifiedNOregistersrequired,函数调用的参数传递和返回,“pm”and“pn”是C代码中定义的两个指针,可用来完成对线性汇编代码的调用.C代码中调用线性汇编编写的点积程序:,线性汇编代码利用.cproc来接收传来参数:,变量声明,除了传入的参数,其它的变量可以如下进行声明:,汇编优化器完成将这些值分配给寄存器的工作.,一个完整的线性汇编代码举例,Note:线性汇编代码会自动返回,不需要跳转指令,C程序和汇编语言接口,使用独立的汇编代码模块,并将其与编译完的C/C+模块连接在一起在C/C+源程序中内联函数(intrinsics),直接地调用汇编语句使用内联(inline)汇编语言直接嵌入C/C+源程序在C/C+源程序中使用汇编程序变量和常量,C代码中调用汇编函数,Candassemblyfunctions使用同样的资源(e.g.registers).Candassemblyfunctions可以交换数据.所以,关于数据和控制信息的交换及寄存器的共享有着相应的规则.,main()y=asmFunction(a,b);,_asmFunctionbb3,C代码中调用汇编函数,汇编代码中使用“_”来标识在C中声明的变量和函数.Labels需要声明为global.,main_c.cintasm_Function(short,short);shortx=0 x4000,y=0 x2000;intz;voidmain(void)z=asm_Function(x,y);,asm_Function.cintasm_Function(shorta,shortb)inty;y=(a*b)1;returny;,asm_Function.asm.global_asm_Function,C程序和汇编程序中的参数传递,C程序中调用汇编函数需要用到这些寄存器以传递参数和返回结果.,C程序和汇编程序中的参数传递,调用之前.,调用之后.,C程序和汇编程序中的参数传递,问题:C程序会用到部分或者全部寄存器.汇编函数也可能用到部分或者全部寄存器.如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省潮州市数据中心消防安全测试题二十(含答案)
- 电力企业节能减排执行方案
- 会计从业资格考试成都及答案解析
- 外墙清洗安全考试题库及答案解析
- 一次性基金从业考试及答案解析
- 安全性能检测的标准化工具集
- 心血管护理三基题库及答案解析
- 品牌宣传及公关危机应对策略模版
- 建筑安全专项施工方案的编写技术培训教案(2025-2026学年)
- 跳伞安全员考试题库及答案解析
- 艺人独家经纪合同(标准版)
- 2025年肺功能证考试题及答案
- 2026中国海洋石油集团有限公司秋季校园招聘备考考试题库附答案解析
- 2025年及未来5年中国羊奶粉行业市场调研分析及投资战略咨询报告
- 学校物业委托管理服务合同7篇
- 2025-2026学年人教版二年级上册数学第三单元测试卷(含答案)(三套)
- 《守望成长法治护航》法制教育主题班会
- 桡骨骨折课件教学
- 2025年特种作业类冶金煤气作业理论知识-理论知识参考题库含答案解析(5卷)
- 2025-2030中国节能玻璃材料市场发展动态及竞争格局研究报告
- 数据标注课件
评论
0/150
提交评论