TMS320C6000系列DSP程序开发PPT学习课件_第1页
TMS320C6000系列DSP程序开发PPT学习课件_第2页
TMS320C6000系列DSP程序开发PPT学习课件_第3页
TMS320C6000系列DSP程序开发PPT学习课件_第4页
TMS320C6000系列DSP程序开发PPT学习课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章,TMS320C6000系列数字信号处理器的程序开发,TMS320C6000系列数字信号处理器的C/C语言特性,TMS320C6000系列数字信号处理器的C/C语言关键字,pragma伪指令,初始化静态变量和全局变量,TMS320C6000系列数字信号处理器的C/C代码优化,C/C语言和汇编语言的混合编程,TMS320C6000系列数字信号处理器的4.1 C/C语言特性,TMS320C600的4.1 C语言特性源(主机)和执行(目标)字符集是ASCII码,没有多字节字符。字符常量或字符串常量中的十六进制或八进制转义序列的值最多为32位;具有多个字符的字符常量根据序列中的最后一个字符进行编

2、码,例如:ABC=C,4 . 1 . 1 TMS320C6000系列数字信号处理器的C语言特性,2数据类型表4-1列出了TMS 320 C 6000编译器中的各种标量数据类型、数字表示和值范围,值范围中的许多值可以用作头文件限制中的标准宏。4 . 1 . 1 TMS 320 C 6000系列数字信号处理器的C语言特性,3次数据转换(1)从浮点型到整数型的转换,0前截取整数部分。(2)指针类型和整数类型可以自由转换。表达式(1)当两个有符号整数相除时,如果其中一个是负的,则商是负的,余数的符号与分子的符号相同。斜线(/)用于商,百分号(%)用于余数。例如:10/-3=-3,-10/3=-3 10

3、%-3=1,-10%3=-1 (2)有符号数的右移是算术移位,即符号被保留。4 . 1 . 1 TMS 320 C 6000系列数字信号处理器的C语言特性,5声明(1)寄存器存储类对所有字符型和指针型都有效。(2)结构成员被包装成词。(3)整数类型的位段是有符号的,并且位段被打包为从高位开始的字,并且不能超过字的边界。(4)中断关键字interrupt只能用于没有参数的无效函数。6预处理器忽略任何不支持的#pragma伪指令。4 . 1 . 2 TMS320C6000系列数字信号处理器的C语言特性,TMS 320 C 6000系列数字信号处理器编译器支持国际标准化组织标准C语言,但它与标准C有

4、不同的特性:(1)它不包括完整的C标准库支持,但包括C子集和基本语言支持。(2)C库设备的头文件不包括:(3)包含的C标准库h是总和。(4)对bad_cast和bad_type_id的支持不包含在typeinfo文件中。(5)不支持异常事件的处理。(6)默认情况下禁止运行时类型信息(RTTI)。RTTI允许在运行时识别各种类型的对象。可以使用-rtti编译选项来启用它。(7)如果两个类不相关,重新解释类型指向一个类成员的指针,而这个指针不允许指向另一个类成员。(8)不支持标准中tesp.res和temp.dep中描述的“在模板中绑定两相名”。(9)模板参数无法实现。(10)模板的导出关键字无法

5、实现。(11)typedef定义的函数类型不包括成员函数cv限定符。(12)类成员模板的某些描述不能放在类定义之外。4.2 TMS 320 C 6000系列数字信号处理器的C/C语言关键字,1连续关键字(1)如果在定义对象时也指定了关键字volatile(例如,volatile const int x),则将volatile关键字分配给内存(程序不会修改常量volatile对象,但可以修改程序外的对象);(2)对象是自动存储类型(在堆栈中分配)。在上述两种情况下,为对象分配存储空间与不使用const关键字时相同。在定义中使用const关键字非常重要。例如,下面代码的第一句定义常量指针p是一个整

6、数变量,第二句定义变量指针Q是一个整数常量:int * const p extern c寄存器volatile无符号int CSR外部寄存器易失无符号整数IFR外部寄存器易失无符号整数ISR外部寄存器易失无符号整数ICR;外部寄存器易失无符号整数IER;外部寄存器易失无符号整数FADCRextern cregister volatile无符号整数FAUCR外部寄存器易失无符号整数FMCR;main()printf(“AMR=% xn”,AMR);4.2 TMS320C6000系列数字信号处理器C/C语言关键字,3中断关键字当用户在函数定义中使用中断关键字时,编译器会根据中断函数所需的寄存器保存

7、规则和中断返回的特殊顺序保存寄存器,然后生成一个特殊的返回代码序列。用户可以将interrupt关键字用于定义为void但没有参数的函数。中断函数体可以有局部变量和自由使用堆栈或全局变量。例如,中断无效int _ handler()不安全的int标志;4.2 TMS320C6000系列数字信号处理器C/C语言关键字,4远近关键字语法,远近关键字作为存储类别的索引号。它们出现在存储类描述符和类型之前、之后和中间。这两个内存类的索引号不能在一个定义中使用。正确的用法示例代码如下:远静态int x;int x附近的静态;静态int far x;far int foo();静态far int foo(

8、);4.2 TMS 320 C 6000系列数字信号处理器的C/C关键字,5限制关键字示例4.2将关键字限制用于指针。func1 (int * restrict a,int * restrict b)/*这是func1()的代码。*/在此代码中使用关键字restrict告诉编译器,函数1中指针A和B所指向的内存范围不会重叠,也就是说,指针变量A和B对内存的访问不会发生冲突,并且一个指针变量的写入操作不会影响另一个指针变量的读取操作。示例4.3对数组使用关键字restrict。void func2(int crestrict,int dres trict)int I;对于(I=0;i 64I )

9、/计算数组的累加和以及数组di的1加运算ci=didi=1;4.2 TMS 320 C 6000系列数字信号处理器的C/C语言关键字,6易失性关键字优化器分析数据流以尽可能避免内存访问。如果用户在C/C程序中编写依赖于内存访问的代码,他们必须使用易变的关键字来识别这种访问。编译器不会优化对可变变量的任何引用。在下面的代码中,等待一个单元在循环中读取oxFF:无符号int * ctrl;同时(*ctrl!=OxFF);在这段代码中,ctrl *是循环中的一个常量表达式,因此循环被优化为单次内存读取。为了纠正这些优化,ctrl *可以定义为:TMS320C6000系列数字信号处理器的4.2 C/C

10、语言关键字的易失性无符号整数*ctrl,7asm语句TMS320C6000的C/C编译器可以直接将TMS320C6000汇编指令或伪指令嵌入到编译器输出的汇编语言文件中。这个函数是C/C语言的扩展,即asm语句。Asm语句提供了对C/C语言无法提供的硬件的访问。asm语句类似于调用一个名为asm的函数。该语句将字符串常量作为参数,具体的语法格式是asm(汇编文本);编译器将参数直接复制到编译器的输出文件中,并且程序集主体必须用双引号括起来。所有正常字符串都保持其原始定义。例如,您可以插入包含引号的. string伪指令:ASM(“ASM”(str :)。字符串 ABC );4.3 pragma

11、伪指令,pragma伪指令告诉编译器如何处理特定的函数、对象或代码段。C/of TMS320C6000 C编译器支持以下伪指令:CODE _ SECTION data _ align data _ mem _ bank data _ SECTION func _ can _ inlinefunc _ ext _ called func _ interrupt _ threshold func _ is _ pure func _ is _ sys _ Temfuc _ never _ return func _ no _ global _ ASG func _ no _ ind _ ASG中断

12、必须迭代nmi _ interrupt prob _ iterate struct _ align展开、4.3 pragma伪指令、1CODE_SECTION指令该指令在C语言中的语法格式为:# pragma code _ section(符号,“节名”);该指令在C语言中的语法格式为:# pragma code _ section(“节名”);示例4.4使用CODE_SECTION指令。c源文件:# pragma代码_ section (fn,“my _ section”)int fn(int x)返回x;4.3 pragma伪指令,此示例使用#pragma CODE_SECTION(fn,

13、my _ SECTION),生成my _ SECTION节,并将fn函数分配给my _ SECTION节。编译源文件:教派“我的_教派”。global _ fn* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。*功能名称: _ fn *;* *;*已修改的注册表: SP *;*已用注册表: A4,B3,标准普尔*;*本地帧大小: 0参数4自动0保存=4字节*;* * * * * * * * * * * * * * * *

14、* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * fn :* * * RET . S2 B3;| 6 | D2、8、10;|4| STW .D2T1 A4,* SP(4);|4| ADD .S2 8,SP,SP;| 6 | NOP 2;BRANCH ACCESS;| 6 |,4.3 pragma伪指令,2DATA_SECTION指令DATA_SECTION指令指定命名段中符号的空间。该指令在C语言中的语法格式为:# pragma data _ section(符号,“节

15、名”);该指令在C语言中的语法格式为:# pragma data _ section(“节名”);4.3 pragma伪指令,示例4.5data _ section指令的使用。c源文件:# pragma data _ section (bufferb,“my _ section”)charbufera 512;char bufferB512c源文件:char bufferA512# pragma DATA _ SECTION(“my _ SECTION”)字符缓冲区512;编译源文件:global _ buffera.bss _ buffera,512,4.global _ bufferb _

16、 bufferb:使用“my _ section”,512,4,4.3 pragma伪指令,3DATA_ALIGN指令DATA_ALIGN指令将符号与边界对齐。对齐的边界是符号的默认最大边界值或常数,该常数是2的整数次方。该指令在C语言中的语法如下:# pragma data _ align(符号,常量);该指令在C语言中的语法如下:# # # pragma DATA _ ALIGN(常量););4FUNC _ CAUN _ INLINE指令FUNC _ CAUN _ INLINE指令通知编译器命名函数不能扩展为直接插入。任何使用pragma命令的函数都会忽略其他方法指定的直接插入。该指令必须出现在函数的任何声明或引用之前。该指令在C语言中的语法格式为:# pragma func _ can _ inline(func);该指令在C语言中的语法格式为:# pragma func _ can _ inline;4.3 pragma伪指令、5FUNC _ EXT _ CALLED指令5FUNC _ EXT _ CALLED指令指定优化器保存这些C/C函数或这些C/C函数调用的任何函数。这些函数充当c/c的入口点。该指令必须出现在任何函数的声明或引用之前。在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论