补充c语言编程.ppt_第1页
补充c语言编程.ppt_第2页
补充c语言编程.ppt_第3页
补充c语言编程.ppt_第4页
补充c语言编程.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

基于C语言的DSP芯片开发 补充 C语言 汇编语言程序设计特点 汇编语言 执行速度快 但程序开发的效率低 难度大 可读性和可移植性差 TMS320C54XC语言 开发效率高 修改和移植都比较方便 能调用汇编程序 C编译器有很强的优化功能优化效率从15 提高到35 某些情况下C代码的效率甚至接近于手工汇编的效率 但在某些场合无法取代汇编 不能最佳利用DSP芯片的内部资源 如C54x提供位反转寻址 滤波等 有时甚至无法用C语言实现 如标志位 寄存器设置等 常采用 C语言和汇编语言的混合编程关键代码用汇编编程 以最佳利用DSP芯片软硬件资源 也可利用DSP开发商提供的优化算法库 汇编程序 一般性的代码均采用C语言编写 软件调试工具也支持C源码 C 汇编混合模式 优化的C编译器 C源文件 C编译器 汇编源文件 汇编器 COFF目标文件 链接器 可执行COFF文件C编译器的基本功能对C文件进行文法分析 生成 IF文件对代码进行多级优化 以改进C C 程序的效率 生成 OPT文件生成汇编程序 ASM文件 优化器使用了几种先进的优化技术 优化选项的激活 o x 选项 多级优化 共3级 0 1 2 g调试选项C源码调试开关参数 调试时选中 则优化功能被抑制调试时不用优化编译 程序调试成功后再用 优化方法分为两类 C语言通用优化1 优化与循环有关的变量2 优化跳转3 简化控制流4 数据流优化等 DSP芯片的特定优化采用块循环块重复指令 并行指令 乘累加 延迟跳转 自动增量寄存器寻址等充分使用辅助寄存器 累加器数组尽量用寄存器间接寻址 C应用程序的开发过程 需要以下几种类型的文件 C源文件 lib库文件 如rts lib evm54 lib等 汇编无 cmd文件 与汇编源程序有区别 C编译器产生的段 四个已初始化的段 text 可执行代码 编译器产生的常数 cinit 已初始化全局变量和静态变量 const 已初始化的字符串常量 全局常量和静态常量 与关键字const有关 switch 大型的switch语句的跳转表 三个未初始化段 bss 未初始化全局变量和静态变量 stack 系统软件堆栈 sysmem 动态存储器为malloc calloc realloc等函数分配存储器空间 cmd文件举例 C应用程序 stack400h heap100h lrts libMEMORY PAGE0 VECT o 0ff80h l 80hPRAM o 100h l 1f00hPAGE1 DRAM o 2000h l 1000h SECTIONS vectors VECTPAGE0 text PRAMPAGE0 cinit PRAMPAGE0 switch PRAMPAGE0 const DRAMPAGE1 bss DRAMPAGE1 stack DRAMPAGE1 sysmem DRAMPAGE1 cmd文件总结 C应用程序 text cinit switch段链接在程序存储空间 PAGE0 可映射到ROM或RAM const bss stack sysmem段链接在数据存储空间 PAGE1 const 可映射到ROM或RAM bss stack sysmem 只能映射到RAM C中存储器映射寄存器的使用 defineTIM int 0 x24 definePRD int 0 x25 defineTCR int 0 x26 defineIMR int 0 x0 definePMST int 0 x1d defineSPSA1 unsignedint 0 x48注意 每个存储器映射寄存器所对应的存储单元地址 C中存储器映射寄存器的使用 main IMR 0 x8 TCR 0 x41f TIM 0 汇编程序 STM 0008H IMRSTM 41fh TCR 常用关键字 ioport关键字允许访问DSP的I O端口空间 interrupt关键字中断关键字 指定将函数作为中断函数处理 Ioport关键字举例 ioportunsignedintport3002 port3003 main inti for i port3003 读端口数据 i i 向端口写数据 汇编程序 LD i DPPORTR3003h iANDM 0ffh iPORTWi 3002h说明 3002h EVM板上指示灯控制寄存器3003h DIP拨动开关控制寄存器程序功能 通过开关控制不同的指示灯亮 Interrupt关键字应用举例 voidinterrupttime void 汇编程序vectors asm int2 RETENOPNOPNOPtint B time ref timeNOPNOP 系统初始化 C int00函数系统开始运行时 由硬件复位调用该函数 链接器将程序入口点设置为 c int00 功能 定义堆栈段 stack将 cinit的数据拷贝到 bss段设置页指针DP调用main 函数 汇编与C程序设计的区别 工程中是否包括库文件rts lib 编译选项的设置不同 汇编 执行时直接从用户指定入口开始 常见标号为 start C 执行时 先调用C标准库中的初始化程序 入口标号为 c init00 编译时 出现如下提示 warning entrypointsymbol c int00undefinedC 可能是没有添加库文件rts lib汇编 没有设置入口点 如 start C54X系列DSP的C语言开发 C和汇编混合编程的3种方法独立编写C和汇编程序 各自形成 obj1和 obj2等 再链接C中嵌入汇编语句 完成C中无法实现的硬件控制 寄存器初始化等编写C程序 对C编译器生成的汇编程序 进行手工优化和修改 在C程序中访问汇编程序变量 在汇编中 用 bss命令定义变量 用 global命令定义为外部变量 在变量名前加 在C中 用extern说明为外部变量 举例 汇编程序 bss var 1 global varC程序中 externintvar var 1 在汇编程序中访问C程序变量 在C中 说明为全局或静态变量 在汇编中 用 global命令定义为外部变量 且在变量名前加 举例 在C中 inti intx main 在汇编中 global i global x C54x函数调用规范和堆栈的使用 C系统的堆栈机制寄存器 SP 堆栈指针 指向堆栈顶部AR7 必要时 用作帧指针增长方向 从高地址向低地址增长 函数调用规范 调用函数需进行的操作 传递参数反序入栈 第一个参数放进累加器A调用函数调用完毕 弹出先前压入堆栈的传递参数 子程序 函数 需进行的操作 入口处 若函数修改AR1 AR6或AR7 则保护相应寄存器的值SP减去一个常数 为局部帧和局部参数区分配存储器其中 常数 局部帧长度 局部参数区长度 函数调用规范 子程序 函数 需进行的操作 出口处若子程序有返回值 则返回值放入累加器A中SP加上一常数 恢复局部帧和局部参数区若AR1 AR6和AR7已保护 则恢复它们的值返回 函数调用时堆栈的使用情况 低地址 高地址 参数1 累加器A SP 举例 被调函数add global add text add PSHMAR1PSHMAR6PSHMAR7FRAME 15 调用函数 externintadd inti a b c main i add a b c FRAME 15POPMAR7POPMAR6POPMAR1RET 举例 C和汇编混合编程 example c externintadd inta i result b 10 main a 1 for i 0 i 10 i b i i 1 result add a b 举例 续 汇编函数 add title add asm mmregs text add FRAME 4NOPLD SP 5 B STLMB AR2STLA SP 2 RPT 9ADD AR2 ASTLA SP 1 RET 思考 1 画出此时堆栈的使用情况图2 把程序补充完整3 程序执行到以下语句时 累加器A的值分别为多少 1 STLA SP 2 2 STLA SP 1 4 NOP语句能否删除 5 程序执行后 主函数中变量a i result和数组b 10 各元素的值分别为多少 6 在调用函数时 各调用参数及函数返回值分别是怎样传递的 链接命令文件 volume cmd stack10hMEMORY PAGE0 VECT o 0ff80h l 80hPRAM o 100h l 1f00h PAGE1 DRAM o 2000h l 1000hDRAM1 o 4000h l 2000h 链接命令文件 续 SECTIONS text PRAMPAGE0 data PRAMPAGE0 cinit PRAMPAGE0 switch PRAMPAGE0 const DRAMPAGE1 bss

温馨提示

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

评论

0/150

提交评论