第三章 CCSC6000程序基本结构.ppt
《第三章 CCSC6000程序基本结构.ppt》由会员分享,可在线阅读,更多相关《第三章 CCSC6000程序基本结构.ppt(58页珍藏版)》请在三一办公上搜索。
1、1,第四章 TMS320C6000的软件开发环境,4.1 软件开发流程和开发工具4.2 集成开发环境CCS(code composer studio)4.3 实时操作系统DSP/BIOS,2,4.1 TMS320C6000 软件开发流程和开发工具,4.1.1 TMS320C6000软件开发流程4.1.2 连接命令文件(.cmd)的编写4.1.3 C语言编程常见问题4.1.4 汇编代码结构4.1.5 线性汇编语言结构4.1.6 C语言和线性汇编语言的混合编程,3,4,5,(1)准备工作:7个需要复制的文件,6,说明,兰色的3个文件是一个最小的C应用程序项目中必须和至少包含的,Vectors.as
2、m:作为中断向量表(IST),包含了汇编指令代码,用于在系统产生“RESET”中断时,跳转到C程序的入口点“C_int00”。用户在编写更为复杂的用户程序时,可以在“vectors.asm”文件里自行定义合适的中断向量表,或者使用DSP/BIOS自动产生中断向量表当程序是准备写进EPROM并在上电之后直接运行的,必须包含这个文件,7,软件开发流程和开发工具,阴影部分是开发C代码的常规流程,其他功能用于辅助和加速开发过程,8,C/C+compiler:.c.asm将ANSI C或C+语言编写的程序转换为面向DSP的汇编代码直接利用高级语言实现DSP软件的初步设计,缩短开发周期Assembly o
3、ptimizer:.sa.asm允许开发者编写线性汇编代码而无需考虑流水线结构和寄存器分配,它可以自动分配寄存器以及利用循环优化将线性汇编转化为利用软件流水线的高度并行汇编代码Assembler:.asm.obj将汇编代码翻译成DSP可以执行的机器语言Linker:.obj.out将目标文件组合成一个单独的可执行目标模块。当它创建可执行模块时,分配段到目标系统所配置的内存,重新分配符号和段到最终地址,并且解决未定义符号的外部引用的问题。,9,其他工具,(1)文档管理器(Archiver):管理一组文件,把这组文件放入一个称为库的文档文件内;Archiver管理的库称为宏库或目标库,目标库作为连
4、接器的输入(2)建库工具(Library-build Utility)Ti不仅提供了标准的ANSI C运行支持库,而且还提供了运行支持库的源码rts.src。目的是使用户可以按照自己的编译选项生成符合用户系统要求的运行支持库(3)十六进制转换工具(Hex Conversion Utility)用于将Ti的COFF格式转换为编程器支持的其他格式(4)交叉引用列表(Cross-reference Lister)列出了目标文件中所有的符号以及它们在文件中的定义和引用情况。,10,4.1.2连接命令文件(.cmd)的编写,最为重要;由用户自己编写。首先了解3个基础知识 1.C6000的存储器映射2.C
5、6000编译器的C环境实现和COFF文件格式 3.连接器linker 的使用,11,1.C6000的存储器映射,SEED_DEC6713的存储器扩展总线,包含4个存储空间XCE3:0,每个存储空间有20位地址线、32位数据线。SEED_DEC6713的这4个存储空间被XCE3:0被映射到C6713的CE2和CE3空间中,具体的映射关系,12,TMS320C6713存储器映射,13,14,2.C6000编译器的C环境实现和COFF文件格式,汇编器产生的目标文件是一种模块化的文件格式-COFF格式(Common Object File Format)。,程序中的代码和数据在COFF文件中以段的形式
6、组织。如代码段一般以.text为段名,所有其他的段都可以看成是数据段,C编译器产生的默认代码段和数据,连接命令文件(.cmd)必须将这些段正确地分配到C6000地址空间中,15,表1 C编译器产生的默认代码段和数据,16,C 程序内用#pragma CODE_SECTION定义用户自定义的代码段用#pragma DATA_SECTION定义用户自定义的数据段,#pragma DATA_SECTION(GlobalBuf,“sect_sb”)/数组GlobalBuf放在sect_sb段中#pragma DATA_ALIGN(GlobalBuf,4)/数组首地址按4字节对齐int far Glob
7、alBuf2048;/使用关键字far定义数组GlobalBuf#pragma CODE_SECTION(Func1,“sect_sb”)/函数Func1的代码放在sect_sb段中void Func1(int a,int b).,Pragma命令通知编译器注意随后的函数,17,3.连接器的使用,(1)连接器的输入文件是浮动地址目标(*.obj),产生的输出文件是可执行目标文件(*.out)和连接过程结果说明文件(*.map)(2)在连接过程中,连接器把所有目标文件中的同名段合并,并按照用户的连接命令文件(.cmd)给各个段分配地址,最后生成可执行的.out 文件。(3)对于C程序,系统复位和
8、数据初始化都必须基于C的运行环境(建立堆栈、变量初始化、调用main函数等,即是c_int00()函数完成的任务)。要得到C运行库的支持,C程序必须和C运行库rtsxxxx.lib连接,在CCS中只要将库文件加入到项目中即可,18,(4)库文件的选择,(5)库文件的路径:CCS安装目录下的c6000cgtoolslib(6)C运行库源程序路径:c6000cgtoolslibrts.src(7)用于编译库的的连接命令文件:c6000cgtoolsliblnk.cmd(用户自定义连接命令文件的模板),19,4.连接器命令文件(.cmd),用户需在.cmd文件内说明系统的存储器配置以及程序和数据的具
9、体存放地址。然后,.cmd文件作为连接器的一个命令参数输入连接器。具体过程由连接器完成。,.cmd文件中,用到连接器伪指令:MEMORY:定义用户系统所配置的存储器 SECTIONS:把用户目标文件的各个代码段和数据段分配到上述存储区域,20,最简单的MEMORY和SECTIONS的语法MEMORY存储器空间名:o=十六进制存储器起始地址 l=十六进制存储器长度SECTIONS段名 存储器空间名,.cmd文件很容易写错,以c6000cgtoolsliblink.cmd文件为模板(见下页),并在此文件基础上加以修改。,21,/*/*lnk.cmd v4.32*/*Copyright(c)1996
10、-2002 Texas Instruments Incorporated*/*/-c-heap 0 x2000/*heap size is 8KB*/-stack 0 x4000/*stack size is 16KB*/*Memory Map 1-the default*/MEMORYPMEM:o=00000020h l=0000ffe0h/*internal program memory,64kB*/EXT0:o=00400000h l=01000000hEXT1:o=01400000h l=00400000hEXT2:o=02000000h l=01000000hEXT3:o=03000
11、000h l=01000000hBMEM:o=80000000h l=00010000h/*internal data memory,64kB*/,.cmd文件的模板:c6000cgtoolsliblink.cmd,/*-c:linker 选项;运行时初始化全局变量;-cr:在加载时初始化*/,Memory:定义用户系统所配置的存储器,22,/*Memory Map 0*/MEMORY EXT0:o=00000000h l=01000000h EXT1:o=01000000h l=00400000h PMEM:o=01400000h l=00010000h EXT2:o=02000000h l
12、=01000000h EXT3:o=03000000h l=01000000h BMEM:o=80000000h l=00010000h SECTIONS/*把代码段和数据段分配到存储区域中*/.text PMEM.stack BMEM.bss BMEM.cinit BMEM.cio BMEM.const BMEM.data BMEM.switch BMEM.sysmem BMEM.far EXT2,连接器命令文件更详细信息:SPRU186I:“TMS320C6000 Assembly Language Tools Users Guid”,23,例:DEC6713的定时器的连接命令文件,*Ti
13、mer.cmdV1.00*-c-x/*Memory Map 0-the default*/MEMORYPMEM:o=00000000hl=00010000hBMEM:o=00010000hl=00030000h SECTIONS.text PMEM.csldata PMEM.stack PMEM.far PMEM.switch BMEM.tables BMEM.data BMEM.bss BMEM.sysmem BMEM.cinit PMEM.const BMEM.cio BMEM,24,4.1.3 C语言编程常见问题,在DSPs环境下的C编程和在微机环境下的C编程区别很大,因为编程者必须对自
14、己的硬件平台比较了解,而且还必须对C环境的实现比较清楚。实际应用出现的问题往往是由于编程者并不了解C6000的C编译器对自己的C代码做了怎样的“理解”,变量存取方式及far关键字中断服务程序和interrupt关键字优化级别和volatile关键字软件流水对中断的影响中断服务表(IST)的编写和devlib函数库,只有当调用的函数偏移1M字以上时,才会使用大存储器模式,25,1.变量存取方式及far关键字,(1)C6000的C编译器支持两种内存模型-影响对.bss段中的变量是如何访问的。,小模式:.bss段小于32KB编译器将页指针DP(寄存器B14)指向.bss段的起始,对变量采取直接寻址方
15、式。只需1条指令就可以加载1个变量LDW*+DP(_x),A0,大模式:对.bss段大小没有要求;编译器对变量使用寄存器间接寻址;使用3条指令才可以加载1个变量,对变量存取的速度比较慢MVKL _x,A0MVKH _x,A0LDW*A0,B0,26,(2)程序中定义的全局/静态变量超过32KB而又希望使用小模式来获得快的访问速度的解决办法,对于大的数组定义,使用far关键字。.bss段只存放小的变量定义,不会超过32KB,程序仍然可以使用小模式得到最快的访问速度。对于数组,用DMA访问,或通过软件流水访问,不会有存取速度问题int far Buffer2048 使用-ml0编译选项。编译器自动
16、对集合数据类型如结构和数组使用间接寻址方式,而对一般的变量使用直接寻址方式,内存模式默认:小模式-ml/ml0:集合数据类型是far存取-ml1:函数调用是far调用-ml2:函数调用是far调用,集合数据类型是far存取-ml3:函数调用是far调用,所有数据是far存取,27,内存模式默认:小模式-ml/ml0:集合数据类型是far存取-ml1:函数调用是far调用-ml2:函数调用是far调用,集合数据类型是far存取-ml3:函数调用是far调用,所有数据是far存取,28,2.中断服务程序和interrupt关键字,在C6000平台上用C 语言写中断服务程序须使用的格式:interr
17、upt void example(void)注意必须使用interrupt关键字声明函数:编译器才会在程序的末尾使用B IRP指令返回,而不是普通的函数返回。函数入口参数必须是void类型函数返回值必须是void类型编译器会自动保存所有的通用寄存器。中断嵌套:程序必须保存重要的CPU寄存器,并在中断服务程序返回前恢复这些寄存器。,29,可嵌套的中断服务程序举例(假设使用INT4中断)Void main(void)/*设置中断,挂中断服务程序,使能中断*/INTR_ENABLE(CPU_INT_NMI);/*使能NMI中断*/INTR_GLOBAL_ENABLE();/*打开全局中断*/whil
18、e(1)Interrupt void Test()int l_irp,l_csr,l_ier;/*局部变量用于保存CPU寄存器*/l_irp=GET_REG(IRP);/*保存IRP寄存器*/l_csr=GET_REG(CSR);/*保存CSR寄存器*/l_ier=GET_REG(IER);/*保存IER寄存器*/,在主程序中要设置好中断使能寄存器IER,最后打开全局中断并使能NMI中断,30,INTR_DISABLE(CPU_INT4);/*禁止被自身中断嵌套*/SomekeyTask();/*其他一些关键处理,在打开全局中断之前执行*/INTR_GLOBAL_ENABLE();/*打开全局
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 CCSC6000程序基本结构 第三 CCSC6000 程序 基本 结构

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