实时数字信号处理技术C软件开发代码产生工具和.ppt
《实时数字信号处理技术C软件开发代码产生工具和.ppt》由会员分享,可在线阅读,更多相关《实时数字信号处理技术C软件开发代码产生工具和.ppt(73页珍藏版)》请在三一办公上搜索。
1、实时数字信号处理技术 C6000 软件开发(3)代码产生工具和C6000程序结构,北京理工大学电子工程系 李云杰(O)010-,学习目标,软件开发流程和开发工具C6000程序基本结构,代码产生工具,代码产生工具(Code Generation Tools)C编译器汇编优化器汇编器连接器其它一些工具,C编译器,C编译器对符合ANSI标准的C代码进行编译,产生C6000汇编代码,分为:语法分析器C优化器代码产生器,C优化器,包括针对C代码的一般优化和针对C6000的优化:重新安排语句和表达式把变量分配给寄存器打开循环具有四个优化级别,C优化器,C代码产生器也可以完成一些优化工作C优化器最重要的优化
2、处理软件流水pm把一个程序所有的C文件合成一个模块进行优化处理效率可达汇编语言代码的 70%80%,汇编优化器,对线性汇编代码(.sa文件)进行优化输入:用户编写的线性汇编代码输出:标准汇编代码.asm文件编程过程不需考虑:并行指令安排指令延迟寄存器使用效率可达汇编语言代码的 95%100%,汇编器,产生可重新分配地址的机器语言目标文件输入:C编译器产生的汇编文件汇编优化器输出的汇编文件文档管理器管理的宏库内的宏输出:目标代码是TI的COFF格式汇编代码内除机器指令外,还有汇编伪指令,连接器,根据用户说明的程序和数据存放地址,把汇编器产生的浮动地址代码和数据映射到用户系统的实际地址空间.输入:
3、可重新分配地址的目标文件(.obj)输出:可执行的目标文件(.out),其它工具以及C运行库,文档管理器(Archiver)建库工具(Library-build Utility)十六进制转换工具(Hex Conversion Utility)交叉引用列表工具(Cross-reference Lister)C运行支持库(Run-time Support Library)c6000cgtoolsincludec6000cgtoolslib,DSPs程序的仿真模式,C6000程序基本结构,C程序的基本结构汇编代码结构线性汇编语言结构C程序和汇编代码的接口实现,C程序的基本结构,主程序 main.c连
4、接命令文件.cmd c6000cgtoolsliblnk.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()可以方便的对寄存器进行位操作.几乎
5、所有外设寄存器的地址都已经定义,C程序的基本结构,使用devlib实现中断“挂”接Preprocesser 中头文件搜索路径设置为:.c6000evm6xdspinclude将dev6x.lib文件加入项目.c6000evm6xdsplib在.cmd文件中,将.vec段分配在0地址在主程序中使用#include 包含头文件在main()中调用intr_reset()函数调用intr_hook()等函数,C6000编译器的C环境实现,定义:C run-time environmentThe run time parameters in which your program must functi
6、on.These parameters are defined by 1.the memory conventions2.register conventions3.stack organization 4.function call conventions5.system initialization.,存储器模型,C6000编译器把整个存储区当作单个线性存储块,并将它分为代码区和数据区编译器假定目标存储器的全部32-bit地址空间是可用的。定义存储器映象并将代码和数据分配到目标存储器的是连接器,而非编译器。Cmd文件是linker使用的。,C6000的存储器映射,程序和数据的存放不是随意的
7、C6000存储器地址映射(Memory Map)决定着各种资源的访问地址,MAP 文件,-m选项 连接器输出存储器映象文件(.map)详细说明存储器的使用情况主要包括三个部分:存储器配置段分配图全局符号(全局变量、函数和段名)绝对地址,COFF文件格式,模块化的目标文件 COFF格式基本组成形式 段(sections)编译器生成的可重定位的代码和数据块初始化的段和未初始化段:已初始化段包含数据和可执行代码未初始化段存储器(一般指RAM)中的保留空间,程序在运行时用它来创建和存储变量.,已初始化段,.cinit段:包括变量初始值和常量值.const段:包括字符串文字(string literal
8、s),浮点常量和在C/C+中被声(明为const的数据(如果常量没有同时被声明为volatile).switch段:包含大的switch语句的跳转表(jump table).text段:包含所有的可执行代码.,未初始化段,.bss段:为全局变量和静态变量保留。如果为连接器设定-c选项,则在程序的开始,C引导程序会将.cinit段的数据(可在ROM中)复制到.bss段。.far段:为声明为far的全局变量和静态变量保留。.stack段:用于传递函数的参数和为局部变量分配存储器空间。.sysmem段:提请动态存储空间分配要求的有malloc,calloc和realloc等函数。,C编译器产生的代码
9、段和数据段,C编译器产生的默认代码段和数据,C编译器产生的代码段和数据段,几点补充汇编器产生默认的.text,.bss和.data段。允许用CODE_SECTION和DATA_SECTION pragma来让编译器生成另外的段。除了.text段,各个初始化段和非初始化段均不能分配到内部程序存储器。,系统堆栈,编译器将堆栈用于:(1)保存函数调用后的返回地址;(2)给局部变量分配存储空间(3)传递函数参数(4)保存临时结果 运行时堆栈增长方向是从高向低,编译器用B15寄存器来管理堆栈,即将它作为堆栈指针(SP),指向堆栈中下一个空闲的存储器位置。,初始化变量,C/C+编译器生成的代码可固化到RO
10、M中,.cinit段的初始化表也是贮存在ROM中。在系统初始化的时候,C/C+引导程序将表中的数据(ROM中)拷贝给.bss段中对应的变量(RAM中)运行时初始化加载时初始化,初始化变量 运行时初始化,Run-time Autoinitialization-c选项C初始化函数c_int00()会读取.cinit段中的每一个记录信息,分别初始化.bss段中的全局/静态变量。,初始化变量 加载时初始化,Load-time Initialization-cr 选项全局/静态变量的初始化工作由loader程序完成,在加载程序后,loader自己读取.cinit段的内容,初始化.bss段中数据,存储器模
11、式,小存储器模式和大存储器模式。区别在于为.bss段分配存储空间方式。小存储器模式:.bss 32KByte,使用DP(B14)访问全局数据大存储器模式:不限制.bss段的大小 访问数据使用MVKL&MVKH,MVKL _x,A0 MVKH _x,A0 LDW*A0,B0,LDW*+DP(0 x7),B5,存储器模式,如果定义的全局/静态变量超过了32KB,仍然希望使用小模式获得较快的访问速度,怎么办?方法1:使用far关键字方法2:使用-ml0编译选项 Project Options Compile Advanced-ml/-ml0 集合数据类型是far存取-ml1 函数调用是far调用-m
12、l2 函数调用是far调用,集合数据类型是far存取-ml3 函数调用是far调用,所有数据是far存取,寄存器使用规范,在C/C+环境下,一些具体的操作要使用哪些的寄存器来完成,是有严格的规范的。寄存器使用规范规定了编译器使用寄存器的方法以及函数调用过程中数值保存的方法。要在C/C+程序中嵌入汇编语言,必须理解并遵循寄存器使用规范。,函数调用约定,函数(父函数)在调用另一个函数(子函数)的时候执行下列操作 将传递到子函数的参数放入寄存器或堆栈.如果需要,保存寄存器(a/b09)到堆栈.调用者(父函数)调用函数(子函数).(对非C/C+代码)当返回时,调用者收回(reclaim)被调用者使用的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 数字信号 处理 技术 软件 开发 代码 产生 工具

链接地址:https://www.31ppt.com/p-5384268.html