您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > DSP-CCS使用指南
LOGOCCS使用指南主讲人:郑振东软件开发流程和开发工具使用命令CL6x–gsfile.c–z–ofile.out-lrts6201.lib来生成.out文件。(codecomposerstudio)CCS的出现将上述所有操作隐藏到CCS集成开发环境之下,由CCS根据源程序的类型自动调用适当的代码生成工具。(codecomposerstudio)(codecomposerstudio)通过修改BuildOptions来修改编译命令BuildOptions(codecomposerstudio)CCS包括以下组件:TMS320C6000代码产生工具CodeComposerStudio集成开发环境DSP/BIOS插件(plug-in)RTDX插件,主机接口和应用程序接口(API)个文件:主程序main.c连接命令文件.cmdC运行库文件其他由CCS自动加入的文件.h头文件其他相关库文件工程还包括一下文件:Vectors.asm这个文件中的代码将作为IST(中断服务表),并且必须被连接命令文件(.cmd)分配在0地址。DSP的运行顺序:DSP复位后,首先跳到0地址,复位向量对应的代码必须跳转到C环境的入口点_c_int00(该入口点在连接的rtsxxxx.lib库中)。然后在c_int00()函数中完成一些初始化工作(例如堆栈指针、页指针及初始化变量),最后调用main函数。c_int00()位于C运行库的rts.c中。的存储器映射地址范围(HEX)大小(Byte)存储器的分配MAP0MAP100000000~0000FFFF64K外存接口CE0内部程序RAM00010000~003FFFFF4M~64K外存接口CE0保留00400000~00FFFFFF12M外存接口CE0外存接口CE001000000~013FFFFF4M外存接口CE1外存接口CE001400000~0140FFFF64K片内程序RAM外存接口CE101410000~017FFFFF4M~64K保留外存接口CE102000000~02FFFFFF16M外存接口CE203000000~03FFFFFF16M外存接口CE380000000~803FFFFF64K片内数据RAM文件是由文件头(FileHeader)、段头(SectionHeader)、符号表(SymbolTable)以及段数据等数据结构组成。对于C语言文件:编译器生成的代码段取名为.text全局变量和静态变量分配在.bss段中一般局部变量,或使用寄存器或分配在.stack段中堆栈和动态分配存储器函数分配在.stack段和.system段中注:若程序中没有使用malloc等函数,则编译器不产生.system段用关键字far定义的变量被分配在.far段中注:点.bss段的访问效率更高全局堆(用于存储器分配函数).stack堆栈.far以far声明的全局/静态变量.cio用于stdio函数用户自定义段:#pragmaCODE_SECTION#pragmaDATA_SECTION文件编写基础用户自定义段:#pragmaCODE_SECTION#pragmaDATA_SECTIONExample:#pragmaDATA_SECTION(GlobalBuf,“sect_sb”)#pragmaDATA_ALIGN(GlobalBuf,4)intfarGlobalBuf[2048];#pragmaCODE_SECTION(Func1,“sect_sb”)voidFunc1(inta,intb){……}{存储器空间名:o=起始地址l=存储器长度}SECTION{段名存储器空间名}{L2:o=00000000hl=00040000h/*allSRAM*/CE0:o=80000000hl=00100000h/*externalmemory*/}SECTIONS{.cinitL2.textL2.stackL2.bssL2.constL2.dataL2.farL2.switchL2.sysmemL2.tablesL2.cioL2.externalCE0}语言支持两种内存模式:小模式和大模式在小模式下,要求.bss段小于32k,也就是说全局和静态变量的总和不能超过32k。在大模式下,对.bss段的大小没有要求。如果程序中的全局/静态变量超过了32k,但又希望使用小模式,有2个解决方法。对于大数组,使用far关键字,一般采用DMA访问。使用-ml0选项,由编译器决定数组访问方式。平台下中断服务程序写法如下:interruptvoidexample(void){……}必须使用interrupt关键字声明函数。函数入口参数必须是void类型。函数返回值必须是void类型。语言常见问题中断程序举例(假设使用INT4中断)Voidmain(void){……//设置中断,挂中断服务程序,使能中断INTR_ENABLE(CPU_INT_NMI);//使能NMI中断INTR_GLOBAL_ENABLE();//打开全局中断while(1){}}•中断表详见P98(void){intl_irp,l_csr,l_ier;//局部变量用于保存CPU寄存器l_irp=GET_REG(IRP);//保存IRP寄存器l_csr=GET_REG(CSR);//保存CSR寄存器l_ier=GET_REG(IER);//保存IER寄存器INTR_DISABLE(CPU_INT4);//禁止被自身中断嵌套SomeKeyTask();//其他关键处理INTR_GLOBAL_ENABLE();//打开全局中断SomeFunction();//中断服务程序代码INTR_GLOBAL_DISABLE();//关闭全局中断SET_REG(IRG,l_irp);//恢复IRP寄存器SET_REG(IRG,l_csr);//恢复CSR寄存器SET_REG(IRG,l_ier);//恢复IER寄存器}关键字考虑一下代码:intflag;intmain(){……while(!flag){}}Interruptvoidtest(void){flag=1;}在使用-o3优化选项,运行程序后,发现程序一直停在while()中。语言常见问题为了解决这个问题,必须在flag变量声明中使用volatile关键字。volatileintflag;需要使用volatile关键字的情况:凡是2个线程共享的全局变量就需要使用volatile关键字。凡是某个内存地址的内容随时可能被外部硬件改变就需要使用volatile关键字流水线操作在单存储器情况下(冯.诺曼型结构),完成一条指令需要3个步骤,即:取指令、指令译码和执行指令。从指令流的定时关系也可看出冯.诺曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令,如下图所示,指令1至指令3均为存、取数指令,对冯.诺曼结构处理器,由于取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行,只有一个完成后再进行下一个。每条命令逐一执行,每一条命令的各个步骤也逐一执行2.6流水线操作条存取数指令,如下图所示,由于取指令和存取数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度。2.6流水线操作循环进行软件流水优化的时候,为了防止寄存器的多分配带来的影响,一般会在软件流水前禁止全局中断使能(GIE),在软件流水后恢复全局中断。在算法较长的时候往往影响会影响中断的及时响应。解决方法主要有以下两种:1)使用-min选项控制软件流水的可中断属性,n表示可以关闭中断的最大指令周期。2)使用#pragmaFUNC_INTERRUPT_THRESHOLD来单独控制某个函数的可中断属性。语言常见问题//最多2000个指令周期#pragmaFUNC_INTERRUPT_THRESHOLD(fun1,2000)voidfun1(void);//永远可以被中断#pragmaFUNC_INTERRUPT_THRESHOLD(fun2,1)voidfun2(void);//可以一直关闭中断#pragmaFUNC_INTERRUPT_THRESHOLD(fun3,-1)voidfun3(void);“.vec”;定义段名.ref_c_int00;引用c入口点.align32*8*4;.vec段必须在256个字的边界上对齐RESET:mvkl_c_int00,b0;取C入口点地址mvkh_c_int00,b0bb0nop5;填充跳转指令的延迟槽nop4
本文标题:DSP-CCS使用指南
链接地址:https://www.777doc.com/doc-6178760 .html