第15章 DSP的C语言编程.pdf_第1页
第15章 DSP的C语言编程.pdf_第2页
第15章 DSP的C语言编程.pdf_第3页
第15章 DSP的C语言编程.pdf_第4页
第15章 DSP的C语言编程.pdf_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第1 5 章D S P 的C 语言编程 1 5 1 D S P C 语言简介 第1 5 章D S P 的C 语言编程 1 5 1 D S P C 语言简介 DSP生产厂商及第三方为生产厂商及第三方为DSP软件开发提供了软件开发提供了C编译器 使 得利用高级语言实现 编译器 使 得利用高级语言实现DSP程序的开发成为可能 在程序的开发成为可能 在TI公司的公司的 DSP软件开发平台软件开发平台CCS中 又提供了中 又提供了优化的优化的C编译器编译器 可以 对 可以 对C语言程序进行优化编译 提高程序效率 目前语言程序进行优化编译 提高程序效率 目前在某些应 用中 在某些应 用中C语言优化编译的结果可以达到手工编写的汇编语言效 率的 语言优化编译的结果可以达到手工编写的汇编语言效 率的90 以上以上 DSP生产厂商和相关公司也在不断对生产厂商和相关公司也在不断对C优化 编译器进行改进设计 相信日后 优化 编译器进行改进设计 相信日后C语言程序优化编译的效果 会有进一步的改善 语言程序优化编译的效果 会有进一步的改善 TMS320C2000系列提供有优化的系列提供有优化的C编译器 它支持编译器 它支持ANSI American National Standards Institute 美国国家标准 委员会 开发的 美国国家标准 委员会 开发的C语言标准 该语言标准 该C语言标准是使用最广泛的语言标准是使用最广泛的C 语言标准 语言标准 ANSI标准具有一些受目标处理器 运行期环境 或主机环境影响的 标准具有一些受目标处理器 运行期环境 或主机环境影响的C语言特性 从有效性或实现上的考虑 这些特征在各种标准的 语言特性 从有效性或实现上的考虑 这些特征在各种标准的C编译器之间可能有不同 编译器之间可能有不同 1 5 2 D S P C 语言特性 1 5 2 1 T MS 3 2 0 C 2 0 0 0 C 语言的特征 1 5 2 D S P C 语言特性 1 5 2 1 T MS 3 2 0 C 2 0 0 0 C 语言的特征 1 标识符和常数 所有标识符的 标识符和常数 所有标识符的前前100个字符有意义个字符有意义 区分大小写区分大小写 源 主机 和执行 目标 字符集为 源 主机 和执行 目标 字符集为ASCII码 码 不存在多 字节字符 不存在多 字节字符 具有多个字符的字符常数按序列中最后一个字符来编码 例如 具有多个字符的字符常数按序列中最后一个字符来编码 例如 abc c 2 数据转换 浮点到整数的转换 数据转换 浮点到整数的转换取整数部分取整数部分 指针和整数可以自由转换 指针和整数可以自由转换 3 表达式 当两个有符号整数相除时 若其中一个为负 则其商为负 表达式 当两个有符号整数相除时 若其中一个为负 则其商为负 余数的符号与分子的符号相同余数的符号与分子的符号相同 斜杠 斜杠 用来求商 百 分号 用来求商 百 分号 用来求余数 例如 用来求余数 例如 10 3 3 10 3 3 10 3 1 10 3 1 4 声明 声明 寄存器变量寄存器变量对所有对所有char short int和指针类型有效 和指针类型有效 interrupt关键字关键字仅可用于没有参量的仅可用于没有参量的void函数 函数 5 预处理 预处理器 预处理 预处理器忽略任何不支持的忽略任何不支持的 pragma伪指令伪指令 预处理器支 持的伪指令包括 预处理器支 持的伪指令包括 nCODE SECTOIN nDATA SECTION nFUNC EXT CALLED 1 5 2 2 T MS 3 2 0 C 2 0 0 0 C 语言的数据类型1 5 2 2 T MS 3 2 0 C 2 0 0 0 C 语言的数据类型 注 注 在T M S 3 2 0 C 2 x C 2 x x C 5 xC 语言中 在T M S 3 2 0 C 2 x C 2 x x C 5 xC 语言中 字节长度为1 6 位字节长度为1 6 位 s i z e o f 操作符返回 的对象长度是以1 6 位为字节长度的字节数 例如 s i z e o f 操作符返回 的对象长度是以1 6 位为字节长度的字节数 例如s i z e o f i n t 1s i z e o f i n t 1 1 5 2 3 T MS 3 2 0 C 2 0 0 0 C 语言的关键字1 5 2 3 T MS 3 2 0 C 2 0 0 0 C 语言的关键字 nc o n s t 常数 c o n s t 常数 ni o p o r t I O 端口 i o p o r t I O 端口 ni n t e r r u p t 中断 i n t e r r u p t 中断 nn e a r 近 n e a r 近 nf a r 远 f a r 远 nv o l a t i l e 可变的 v o l a t i l e 可变的 1 5 2 4 寄存器变量1 5 2 4 寄存器变量 TMS320C2000 C编译器在一个函数中编译器在一个函数中最多可以使用两个寄 存器变量 最多可以使用两个寄 存器变量 寄存器变量的声明必须在变量列表或函数的起始 处进行 寄存器变量的声明必须在变量列表或函数的起始 处进行 在嵌套块中声明的寄存器变量被处理为一般的变量 编译器使用 在嵌套块中声明的寄存器变量被处理为一般的变量 编译器使用AR6和和AR7作为寄存器变量 作为寄存器变量 nAR6被赋给第一个寄存器变量被赋给第一个寄存器变量 nAR7被赋给第二个寄存器变量 寄存器变量的地址会被放入分配的寄存器中 这样变量的访 问速度会更快 被赋给第二个寄存器变量 寄存器变量的地址会被放入分配的寄存器中 这样变量的访 问速度会更快 16位类型的变量位类型的变量 char short int和指针 都可以被定义为寄存器变量 但在运行时 设置一个寄存器 变量大约需要 和指针 都可以被定义为寄存器变量 但在运行时 设置一个寄存器 变量大约需要4条指令 为了更有效地使用这个功能 条指令 为了更有效地使用这个功能 仅当 变量被访问超过 仅当 变量被访问超过2次时 才使用寄存器变量 次时 才使用寄存器变量 程序优化编译 器也会定义寄存器变量 但使用方式不同 编译器会自己决 定哪些变量作为寄存器变量 程序中声明的寄存器变量会全 部被忽略 声明的格式为 程序优化编译 器也会定义寄存器变量 但使用方式不同 编译器会自己决 定哪些变量作为寄存器变量 程序中声明的寄存器变量会全 部被忽略 声明的格式为 register type reg 1 5 2 5 p r a g ma 伪指令1 5 2 5 p r a g ma 伪指令 pragma伪指令通知编译器的预处理器如何处理函数 伪指令通知编译器的预处理器如何处理函数 TMS320C2000 C编译器支持下列编译器支持下列pragma nCODE SECTION nDATA SECTION nFUNC EXT CALLED 1 CODE SECTION 这个伪指令在名称为这个伪指令在名称为section name的命名段中为的命名段中为symbol分 配空间 语法为 分 配空间 语法为 pragma CODE SECTION symbol section name 2 DATA SECTION 这个伪指令在名称为这个伪指令在名称为section name的命名段中为的命名段中为symbol分 配空间 语法为 分 配空间 语法为 pragma DATA SECTION symbol section name 3 FUNC EXT CALLED 当使用当使用 pm选项时 编译器将使用程序级的优化 在这个优 化层次中 编译器将删除所有未被 选项时 编译器将使用程序级的优化 在这个优 化层次中 编译器将删除所有未被main函数直接或间接调用 的函数 而用户程序里可能包含要被手工编写的汇编语言程 序调用而没有被 函数直接或间接调用 的函数 而用户程序里可能包含要被手工编写的汇编语言程 序调用而没有被main函数调用的函数 这时就应该用函数调用的函数 这时就应该用 FUNC EXT CALLED来通知编译器保留此函数和被此函数 调用到的函数 这些函数将作为 来通知编译器保留此函数和被此函数 调用到的函数 这些函数将作为C程序的入口点程序的入口点 这个伪指令必须出现在对要保留的函数的任何声明或引用之 前 其语法为 这个伪指令必须出现在对要保留的函数的任何声明或引用之 前 其语法为 pragma FUNC EXT CALLED func 1 5 2 6 a s m语句1 5 2 6 a s m语句 TMS320C2000 C编译器可以在编译器输出的汇编语言程序 中直接输出汇编指令或语句 利用 编译器可以在编译器输出的汇编语言程序 中直接输出汇编指令或语句 利用asm语句嵌入汇编语言程 序 可以 语句嵌入汇编语言程 序 可以实现一些实现一些C语言难以实现或实现起来比较麻烦的硬 件控制功能 语言难以实现或实现起来比较麻烦的硬 件控制功能 asm语句在语法上就象是调用一个函数名为语句在语法上就象是调用一个函数名为asm的函数 函 数参数是一个字符串 的函数 函 数参数是一个字符串 asm assembler text 编译器会直接将参数字符串复制到输出的汇编语言程序中 因此必须保证参数双引号之间的字符串是一个有效的汇编语 言指令 双引号之间的 编译器会直接将参数字符串复制到输出的汇编语言程序中 因此必须保证参数双引号之间的字符串是一个有效的汇编语 言指令 双引号之间的汇编指令必须以空格 制表符 汇编指令必须以空格 制表符 TAB 标记符 标记符 LABEL 或注释开头 或注释开头 这和汇编语言编 程的要求是一致的 这和汇编语言编 程的要求是一致的 编译器不会检查此汇编语句是否合法编译器不会检查此汇编语句是否合法 如果语句中有错误 在汇编的过程中会被汇编器指出 如果语句中有错误 在汇编的过程中会被汇编器指出 使用使用asm指令的时候应小心指令的时候应小心不要破坏不要破坏C语言的环境语言的环境 如果 如果C 代码中代码中插入跳转指令和标记符插入跳转指令和标记符可能会引起不可预料的操作结 果 能够改变段或其它影响 可能会引起不可预料的操作结 果 能够改变段或其它影响C语言环境的指令也可能引起麻 烦 对包含 语言环境的指令也可能引起麻 烦 对包含asm语句的程序语句的程序使用优化器时要特别小心使用优化器时要特别小心 尽管优化 器不能删除 尽管优化 器不能删除asm指令 但它可以重新安排指令 但它可以重新安排asm指令附近的代 码顺序 这样就可能会引起不期望的结果 指令附近的代 码顺序 这样就可能会引起不期望的结果 1 5 2 7 访问I O空间1 5 2 7 访问I O空间 读写读写I O空间的功能是空间的功能是TMS320C2000 C编译器对标准编译器对标准C的扩 展 是利用关键字 的扩 展 是利用关键字ioport I O端口 来实现的 该关键字的用法为 端口 来实现的 该关键字的用法为 ioport type porthexnum nioport指示这是定义一个端口变量的关键字 指示这是定义一个端口变量的关键字 ntype 类型 必须是 类型 必须是char 字符 字符 short 短整型 短整型 int 整型 或对应的无符号类型 整型 或对应的无符号类型 nporthexnum为定义的端口变量 为定义的端口变量 其格式必须是 其格式必须是 port 后面跟一个后面跟一个16进制数进制数 如 如 port000A 是定义访问是定义访问I O 空间地址空间地址0Ah的变量 所有 的变量 所有I O端口的定义端口的定义必须在文件级必须在文件级完成 不支持在函数级声明 的 完成 不支持在函数级声明 的I O端口变量 端口变量 利用利用ioport关键字定义的关键字定义的I O端口变量可以象一般变量一样端口变量可以象一般变量一样进行赋值操作进行赋值操作 ioport unsinged port10 访问访问I O空间空间10h的变量的变量 port10 a 将将a写到端口写到端口10h b port10 从端口从端口10h读入读入b 端口变量的使用不仅限于赋值操作 事实上 用端口变量的使用不仅限于赋值操作 事实上 用ioport关键字定义的关键字定义的I O 端口变量可以象其它变量一样端口变量可以象其它变量一样用在表达式中用在表达式中 a port10 b 读端口读端口10h 加上 加上b 结果赋给 结果赋给a port10 a 读端口读端口10h 加上 加上a 结果写回到 端口 结果写回到 端口10h 在在进行函数调用进行函数调用的时候 可以做的时候 可以做I O端口变量的值传递 而不是引用 端口变量的值传递 而不是引用 call port10 读端口读端口10h 将其值传递给函数调用 将其值传递给函数调用 call 引用传递无效 引用传递无效 1 5 2 8 访问数据空间1 5 2 8 访问数据空间 访问访问DSP数据空间是利用指针来实现的数据空间是利用指针来实现的 unsigned int 0 x1000 a 将将a的值写入数据空间的值写入数据空间 1000h地址地址 b unsigned int 0 x1000 读出数据空间读出数据空间1000h地址的 值 赋给 地址的 值 赋给b 可见可见访问访问DSP数据空间地址不需要对要访问的单元预先定义数据空间地址不需要对要访问的单元预先定义 利用指针直接访问就可以了 这样 利用指针直接访问就可以了 这样 访问数据空间很容易实 现循环结构 访问数据空间很容易实 现循环结构 for i 0 iVECS PAGE 0 text PROG PAGE 0 cinit PROG PAGE 0 data PROG PAGE 0 stack IDATA2 PAGE 1 bss IDATA2 PAGE 1 reg240 x REG MEM PAGE 1 1 5 7 4 头文件1 5 7 4 头文件 头文件头文件2407c h主要定义主要定义TMS320LF2407的的片内外设控制 寄存器 片内外设控制 寄存器 此文件在利用 此文件在利用TMS320LF2407进行的各种开发 中可以通用 进行的各种开发 中可以通用 1 5 7 5 汇编文件1 5 7 5 汇编文件 示例程序中没有利用汇编语言编写控制程序 但由于对 定时器中断的处理采用回调方式 需要编写汇编文件 示例程序中没有利用汇编语言编写控制程序 但由于对 定时器中断的处理采用回调方式 需要编写汇编文件定 义中断向量表 定 义中断向量表 r e f g p t i m e 1 c i n t 0 s e c t v e c t o r s R S V E C T B c i n t 0 R e s e t V e c t o r I N T 1 B P H A N T O M I n t e r r u p t L e v e l 1 I N T 2 B g p t i m e 1 I n t e r r u p t L e v e l 2 I N T 3 B G I S R 3 I n t e r r u p t L e v e l 3 r e f g p t i m e 1 c i n t 0 s e c t v e c t o r s R S V E C T B c i n t 0 R e s e t V e c t o r I N T 1 B P H A N T O M I n t e r r u p t L e v e l 1 I N T 2 B g p t i m e 1 I n t e r r u p t L e v e l 2 I N T 3 B G I S R 3 I n t e r r u p t L e v e l 3 1 5 7 6 C 文件1 5 7 6 C 文件 1 声明部分 声明部分 2 主函数 主函数 3 初始化定时器函数 初始化定时器函数gp init 4 定时器中断服务函数 定时器中断服务函数gptime1 void interrupt gptime1 void uWork PIVR 读外设中断向量寄存器读外设中断向量寄存器 switch uWork case 0 x27 T1PINT 0 x27为定时器为定时器1的周期中断的

温馨提示

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

评论

0/150

提交评论