DSPC语言编程基础.pptx
《DSPC语言编程基础.pptx》由会员分享,可在线阅读,更多相关《DSPC语言编程基础.pptx(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 为为了了提提高高程程序序开开发发的的效效率率,同同时时使使程程序序能能与与高高级级语语言言接接轨轨,目目前前所所有有生生产产DSP芯芯片片的的公公司司都都提提供供了了C语语言言编编译译器器。这这样样,除除了了对对于于一一些些运运算算量量较较大大或或对对运运算算时时间间要要求求很很严严格格的的程程序序代代码码外外,一一般般性性的的代代码码都都可可采采用用C语语言言编编程程,从从而而缩缩短短程程序序的的开开发发周周期期。C编编译译器器还还同同时时提提供供了了汇汇编编语语言言接接口口,可可使使汇汇编编模块方便地被模块方便地被C语言调用。语言调用。第1页/共53页(1)C编译器编译器(2)C代码优化
2、代码优化(3)C代码链接代码链接(4)C语言语言(5)C运行环境和库函数运行环境和库函数 以以上上5部部分分不不再再关关注注C语语言言本本身身的的语语法法,而而是是关关注注如如何何在在CCS集集成成环环境境中中对对拥拥护护已已经经编编写写好好的的C代代码码有有效效地地进进行行编编译译、汇汇编编和和链链接接,以以生生成成可可执执行行代码这样的工程问题。代码这样的工程问题。第2页/共53页8.1 C编译器和C优化代码8.1.1 C编译器特性 C编编译译器器的的主主要要功功能能是是将将用用户户编编写写的的C语语言言代代码码翻翻译译为为汇汇编编语语言言程程序序。(1)支持)支持ANSI标准标准C。(2
3、)支持)支持ANSI标准实时运行库。标准实时运行库。(3)汇编程序输出。)汇编程序输出。(4)生成)生成COFF目标文件。目标文件。(5)编译器的)编译器的Shell程序。程序。(6)灵活的汇编语言接口。)灵活的汇编语言接口。(7)完整的预处理程序。)完整的预处理程序。(8)最优化。)最优化。(9)初始化数据到)初始化数据到ROM存储器中。存储器中。(10)原程序交互列表功能。)原程序交互列表功能。(11)库构造工具。)库构造工具。第3页/共53页 CCS开开发发环环境境可可以以看看成成是是一一个个大大的的软软件件包包,里里面面包包含含了了源源代代码码编编辑辑器器,以以及及工工程程文文件件组组
4、织织、编编译译和和调调试试等等一一切切功功能能模模块块。该该软软件件包包里里,shell程程序序可可以以完完成成3个个功功能能:编编译译、汇汇编编和和链链接接。shell程程序序缺缺省省在在C盘盘安安装装时时,被被安安装装在在C:tic2400cgtool子子目目录录下下,对对应应的的文件名为文件名为dspcl.exe。(1)编编辑辑器器:包包括括分分析析器器、优优化化器器、代代码码产产生生器器。把把C语语言言程程序序编编译成汇编语言程序。译成汇编语言程序。(2)汇汇编编器器:把把汇汇编编语语言言源源代代码码或或C语语言言已已经经编编译译成成汇汇编编语语言言代代码码进行汇编,以产生进行汇编,以
5、产生COFF目标文件。目标文件。(3)链接器:将文件链接,产生可执行的目标文件。)链接器:将文件链接,产生可执行的目标文件。8.1.2 Shell程序第4页/共53页8.1.3 C代码优化 C编编译译器器中中含含有有一一个个C优优化化程程序序。启启用用C优优化化程程序序可可以以提提高高程程序序执执行行速速度度,减减少少C程程序序代代码码长长度度。对对于于C语语言言,可可以以采采用用简简化化循循环环,使使用用软软件件流流水水线线,重新安排、语句和表达式以及将变量分配到寄存器等方法实施优化。重新安排、语句和表达式以及将变量分配到寄存器等方法实施优化。在在CCS中中,选选择择菜菜单单Project/
6、Build Options选选项项,可可以以直直接接在在弹弹出出的的对话框中对优先级别进行设置。对话框中对优先级别进行设置。第5页/共53页8.2 C程序代码链接 C编译器和汇编语言工具为用户链接程序提供了以下两种方法。编译器和汇编语言工具为用户链接程序提供了以下两种方法。(1)先编译各个模块,最后将他们链接在一起。)先编译各个模块,最后将他们链接在一起。(2)一次执行)一次执行Shell程序的程序的dspcl命令,直接完成各个模块的编译、汇编和链接。命令,直接完成各个模块的编译、汇编和链接。在在CCS集集成成环环境境下下,还还有有少少量量设设置置CCS环环境境和和工工程程文文件件组组织织工工
7、作作需需要要人人工干预。为链接工干预。为链接C程序,需要程序,需要DSP开发人员做以下工作:开发人员做以下工作:(1)把运行支持库包含到工程文件中;)把运行支持库包含到工程文件中;(2)指定程序运行时的初始化类型;)指定程序运行时的初始化类型;(3)确确定定如如何何将将由由C语语言言程程序序编编译译、汇汇编编和和链链接接产产生生出出的的可可执执行行代代码码分分配配到到物物理存储器中。理存储器中。第6页/共53页8.2.1 把运行支持库包含到工程文件中 所所有有C程程序序都都必必须须与与运运行行支支持持库库链链接接。因因为为运运行行支支持持库库包包含含了了标标准准C函函数,如数,如sin()函数
8、,以及编译器用来创建和管理函数,以及编译器用来创建和管理CCS中中C语言运行环境的函数。语言运行环境的函数。运运行行支支持持库库中中包包含含了了一一个个boot.obj目目标标模模块块,C程程序序链链接接时时必必须须与与它它链链接接。当当C程程序序开开始始运运行行时时,首首先先执执行行boot.obj。链链接接时时,链链接接器器会会自自动动提提取取boot.obj并链接它。并链接它。第7页/共53页boot.obj包包含含了了用用于于初初始始化化运运行行环环境境的的代代码码和和数数据据。该该模模块块执执行行以以下下任任务:务:(1)建立堆栈;)建立堆栈;(2)处理运行时,初始化表和自动初始化全
9、局变量;)处理运行时,初始化表和自动初始化全局变量;(3)调用)调用C语言主程序语言主程序main();(4)当)当C语言主程序语言主程序main()结束时,调用结束时,调用exit()。boot.obj中中有有一一个个重重要要的的汇汇编编语语言言函函数数_c_int0。它它是是boot.obj中中的的起起点点。链链接接时时,_c_int0被被自自动动定定义义为为程程序序的的入入口口点点。如如果果程程序序从从复复位位开开始始运运行行,则应将复位向量转移到则应将复位向量转移到_c_int0,以便,以便DSP首先执行首先执行_c_int0。第8页/共53页8.2.2 指定初始化类型 用用C语语言言
10、编编程程时时,会会根根据据需需要要定定义义全全局局变变量量和和静静态态变变量量。有有些些全全局局变变量量和和静静态态变变量量具具有有初初始始值值,有有些些全全局局变变量量和和静静态态变变量量没没有有初初始始值值。C编编译译器器对对C程程序序编编译译后后,为为具具有有初初始始值值的的全全局局变变量量和和静静态态变变量量建建立立了了一一个个专专门门的的数数据据块块.cinit。该该块块在在程程序序运运行行后后调调入入到到RAM的的.bss中中。.cinit调调入入到到RAM中中有有两种方法:两种方法:(1)在运行时,自动初始化全局变量和静态变量;)在运行时,自动初始化全局变量和静态变量;(2)在加
11、载时,自动初始化全局变量和静态变量。)在加载时,自动初始化全局变量和静态变量。当创建新工程时,第一种是缺省状态。当创建新工程时,第一种是缺省状态。第9页/共53页8.2.3 把块分配到物理存储器中 把块分配到物理存储器中就是把程序和数据分配到物理存储器中。把块分配到物理存储器中就是把程序和数据分配到物理存储器中。当当使使用用C编编译译器器对对C程程序序编编译译后后,可可产产生生数数据据块块和和代代码码块块。这这些些块块根根据据各各种种不不同同的的应应用用系系统统硬硬件件配配置置和和扩扩展展情情况况,可可以以使使用用不不用用的的方方法法将将这这些些块块分分配到物理存储器中。配到物理存储器中。第1
12、0页/共53页8.3 创建C语言软件8.3.1 创建C语言寄存器头文件 与汇编语言相同,与汇编语言相同,C语言编程也需要相应的头文件。语言编程也需要相应的头文件。2407控控制制寄寄存存器器数数量量较较多多,为为了了方方便便编编程程,可可以以将将这这些些寄寄存存器器地地址址定定义义在在一一个个头头文文件件(*.h)中中。这这样样,在在编编程程时时只只要要将将该该文文件件包包含含其其中中,直直接接引引用寄存器在用寄存器在*.h中定义的英文缩写名,而不必记它的地址。中定义的英文缩写名,而不必记它的地址。在该头文件中,寄存器是以指针方式进行寻址。在该头文件中,寄存器是以指针方式进行寻址。第11页/共
13、53页8.3.2 创建main()函数 在在C语语言言应应用用软软件件中中,用用户户必必须须定定义义一一个个main()函函数数作作为为自自己己应应用用程程序序的的开开始始。因因为为系系统统完完成成C语语言言环环境境设设置置后后,boot.obj会会自自动动调调用用main()函函数数作作为为程程序序的的开开始始。因因此此,程程序序员员在在程程序序中中编编写写main()函函数数是是一一种种预预定定,也也是一种强制。是一种强制。第12页/共53页void main(void)sys_ini();for(;)delay();/*xf管脚置低*/asm(clrc xf);delay();/*xf管
14、脚置高*/asm(setc xf);第13页/共53页8.3.3 创建2407芯片初始化函数 初始化内容包括:初始化内容包括:(1)2407芯片初始化;芯片初始化;(2)工程应用中所甬道的片内外设初始化;)工程应用中所甬道的片内外设初始化;(3)片内外存储器初始化;)片内外存储器初始化;(4)应用系统硬件接口初始化。)应用系统硬件接口初始化。第14页/共53页#include exp4_2407.hvoid sys_ini()/系统初始化子程序/*关总中断*/asm(setc INTM);/*抑制符号位扩展*/asm(clrc SXM);/*累加器中结果正常溢出*/asm(clrc OVM);
15、/*禁止看门狗*/*WDCR=0 x00E8;/*CLKIN=10M,CLKOUT=40M*/*SCSR1=0 x0000;第15页/共53页8.3.4 创建假中断处理函数(1)2407工作时,如果意外引发了内核级中断,但是却没有低层外设中断工作时,如果意外引发了内核级中断,但是却没有低层外设中断向量装入外设中断寄存器中时,假中断向量向量装入外设中断寄存器中时,假中断向量0000h装入装入PIVR;(2)CPU执行一个软件中断指令执行一个软件中断指令INTR时,使用了参数时,使用了参数16,企图用软件中,企图用软件中断去服务于外设中断断去服务于外设中断INT1INT6。这显然是一个错误,这时,
16、假中断向量装。这显然是一个错误,这时,假中断向量装入入PIVR;(3)中断请求线发生故障,外设发出中断请求,而其)中断请求线发生故障,外设发出中断请求,而其INTn标志却在标志却在CPU应应答请求之前被软件清答请求之前被软件清0,此时,外设中断的请求可能还没有被中断控制器确,此时,外设中断的请求可能还没有被中断控制器确认,中断控制器也不知道哪个外设中断向量应装认,中断控制器也不知道哪个外设中断向量应装PIVR,这时,假中断向量装这时,假中断向量装入入PIVR.第16页/共53页interrupt void nothing()/假中断子程序 return;第17页/共53页8.3.5 _c_in
17、t0函数 在运行在运行C程序之前,用户必须首先建立起程序之前,用户必须首先建立起C语言运行环境。语言运行环境。建建立立C语语言言运运行行环环境境的的函函数数在在库库rts2xx.lib中中。把把_c_int0函函数数作作为为硬硬件件复位后的中断矢量入口来运行复位后的中断矢量入口来运行_c_int0函数。函数。rsvect B _c_int0 这这样样,当当系系统统复复位位后后,通通过过执执行行一一条条无无条条件件转转移移指指令令来来调调用用_c_int0函函数,以建立数,以建立C语言运行环境。语言运行环境。_c_int0函数初始化函数初始化C环境时执行了如下任务:环境时执行了如下任务:(1)为
18、系统堆栈定义一个名为)为系统堆栈定义一个名为.stack的块,并建立初始化堆栈和帧指针;的块,并建立初始化堆栈和帧指针;(2)将将.cinit块块的的初初始始化化数数据据表表中中的的数数据据复复制制到到.bss块块,对对全全局局变变量量和和静静态态变量进行初始化;变量进行初始化;(3)调用)调用main函数,开始运行函数,开始运行C程序。程序。第18页/共53页8.4 TMS320C240 x C语言8.4.1 数据类型 TMS320 x 的的C语言数据类型具有如下特征:语言数据类型具有如下特征:(1)所有的整形类型,包括)所有的整形类型,包括char、short和和int及其它们对应的无符号
19、类型,及其它们对应的无符号类型,是是16位二进制数,相互间是等价的。位二进制数,相互间是等价的。(2)长整型和无符号长整型类型是)长整型和无符号长整型类型是32位二进制数。位二进制数。(3)带符号类型以)带符号类型以2进制补码表示。进制补码表示。(4)char类型等同于类型等同于int类型,为带符号类型。类型,为带符号类型。(5)enum类型的对象以类型的对象以16位值表示,在表达式中位值表示,在表达式中enum类型和类型和int类型等同。类型等同。(6)所有浮点类型()所有浮点类型(float、double和和long double)是等价的类型,都以)是等价的类型,都以32位浮点格式表示。
20、位浮点格式表示。(7)长整型和浮点数保存在存储器中,低位数值保存在低地址。)长整型和浮点数保存在存储器中,低位数值保存在低地址。第19页/共53页8.4.2 C语言标准库函数的使用 TI公公司司的的C编编译译器器提提供供了了C语语言言标标准准库库函函数数。它它与与boot.asm等等一一起起封封装装在在rts2xx.lib中。中。在在使使用用标标准准库库函函数数时时,首首先先要要声声明明这这一一函函数数。TI公公司司的的所所有有标标准准库库函函数数以以分分类类的的形形式式在在不不同同的的头头文文件件中中声声明明,全全部部声声明明库库函函数数的的头头文文件件为为assert.h、limits.h
21、、stddef.h、ctype.h、math.h、stdlib.h、setjmp.h、string.h、stdarg.h、time.h、和、和ioports.h。为为了了使使用用一一个个库库函函数数,用用户户必必须须首首先先使使用用#include来来包包含含声声明明函函数数的的头文件。头文件。第20页/共53页8.5 TMS320C24x C语言程序开发 TMS320C24x C语语言言具具有有特特定定的的运运行行环环境境,为为了了确确保保C语语言言程程序序正正确确运行,运行,C语言程序开发必须维护这个环境。语言程序开发必须维护这个环境。第21页/共53页8.5.1 存储器模式 TMS320
22、C24x 的的C编编译译器器将将存存储储器器分分为为程程序序存存储储器器和和数数据据存存储储器器。程程序序存存储储器器包包含含可可执执行行代代码码,数数据据存存储储器器包包含含外外部部变变量量、静静态态变变量量和和系系统堆栈。统堆栈。由由C程序生成的每一块代码或数据存放于存储空间的一个连续块中。程序生成的每一块代码或数据存放于存储空间的一个连续块中。存存储储器器映映射射及及代代码码和和数数据据存存储储空空间间的的分分配配由由链链接接器器决决定定。编编译译器器不不考考虑虑可可用用存存储储空空间间类类型型,也也不不考考虑虑存存储储空空间间是是否否可可以以被被代代码码和和数数据据使使用用或或者者存存
23、储储空空间间是是否否保保留留以以用用于于I/O或或控控制制。编编译译器器只只生生成成可可重重新新分分配配的的代代码码,链接器完成将代码和数据分配到合适的存储空间。链接器完成将代码和数据分配到合适的存储空间。第22页/共53页 C汇汇编编器器对对C语语言言程程序序编编译译生生成成7个个可可以以进进行行重重定定位位的的代代码码和和数数据据块块:.text、.cinit、.const、.switch、.bss、.stack、.sysmem。1、C编译器生成的块编译器生成的块(1).text块包含所有可执行代码和浮点常量。块包含所有可执行代码和浮点常量。(2).text块包含初始化变量和常量的表。块包
24、含初始化变量和常量的表。(3).const块块包包含含字字符符串串变变量量、明明显显初初始始化化的的全全局局和和静静态态变变量量的的定定义义和和初初始始化。化。(4).switch块包含块包含switch语句表。语句表。(5).bss块为全局和静态变量保留空间。块为全局和静态变量保留空间。(6).stack块为块为C系统堆栈。系统堆栈。(7).sysmem块为动态存储器分配保留空间。块为动态存储器分配保留空间。第23页/共53页 .text、.cinit和和.switch块块通通常常被被链链接接到到ROM或或RAM,必必须须处处于于程程序序存存储储器器中中;.const块块可可以以被被链链接接
25、到到ROM或或RAM,但但必必须须处处于于数数据据存存储储器器中中;.bss、.stack和和.sysmem块块必必须须被被链链接接到到RAM,并并必必须须处处于于数数据据存存储器中。储器中。这这些些块块根根据据不不同同的的系系统统配配置置以以不不同同的的方方式式被被放放到到存存储储器器中中。链链接接器器将将不不同同模模块块相相同同的的块块组组合合为为输输出出块块。完完整整的的程程序序由由这这些些输输出出块块组组成成,包括汇编器的包括汇编器的.data块。块。第24页/共53页2、C系统堆栈系统堆栈 C编译器使用软件堆栈实现以下功能:编译器使用软件堆栈实现以下功能:(1)分配局部变量)分配局部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSPC 语言 编程 基础
限制150内