基于C语言的DSP芯片开发.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* C54X系列DSP的C语言开发 C和汇编混合编程的3种方法 独立编写C和汇编程序,各自形成.obj1和.obj2等,再链接 C中嵌入汇编语句,完成C中无法实现的硬件控制,寄存器初始化等 编写C程序,对C编译器生成的汇编程序,进行手工优化和修改 * 在C程序中访问汇编程序变量 在汇编中: 用.bss命令定义变量; 用.global命令定义为外部变量。 在变量名前加“_”。 在C中: 用extern说明为外部变量 * 举例: 汇编程序: .bss _var, 1 .global _var C程序中: extern int var; ……………… var=1; * 在汇编程序中访问C程序变量 在C中: 说明为全局或静态变量。 在汇编中: 用.global命令定义为外部变量,且在变量名前加“_”。 * 举例: 在C中: int i; int x; main() {… } 在汇编中:.global _i .global _x * ‘C54x函数调用规范和堆栈的使用 C系统的堆栈机制 寄存器: SP:堆栈指针,指向堆栈顶部 AR7:必要时,用作帧指针 增长方向:从高地址向低地址增长 * * 函数调用规范 调用函数需进行的操作: 传递参数反序入栈,第一个参数放进累加器A 调用函数 调用完毕,弹出先前压入堆栈的传递参数 * 子程序(函数)需进行的操作: 入口处: 若函数修改AR1,AR6或AR7,则保护相应寄存器的值 SP减去一个常数,为局部帧和局部参数区分配存储器 其中, 常数=局部帧长度+局部参数区长度 * 函数调用规范 子程序(函数)需进行的操作: 出口处 若子程序有返回值,则返回值放入累加器A中 SP加上一常数,恢复局部帧和局部参数区 若AR1、AR6和AR7已保护,则恢复它们的值 返回 * 函数调用时堆栈的使用情况 局部参数区和局部帧 保护寄存器 返回地址 参数2 …. 参数n 调用函数 局部变量 低地址 高地址 参数1 累加器A SP * 举例 被调函数add(): .global _add .text _add: PSHM AR1 PSHM AR6 PSHM AR7 FRAME #-15 调用函数: extern int add(); int i, a, b, c; main() { ………… i=add(a, b, c); ……… } * …………. FRAME #15 POPM AR7 POPM AR6 POPM AR1 RET * 举例:C和汇编混合编程 /* example.c */ extern int add(); int a,i,result,b[10]; main() { a=1; for (i=0;i10;i++) b[i]=i+1; result=add(a,b); } * 举例:(续) 汇编函数 _add: .title add.asm ( ) .mmregs .text _add: FRAME #-4 NOP LD *SP(5),B * STLM B,AR2 STL A,*SP(2) RPT #9 ADD *AR2+,A STL A,*SP(1) ( ) RET * 思考 1。画出此时堆栈的使用情况图 2。把程序补充完整 3。程序执行到以下语句时,累加器A的值分别为多少? (1) STL A,*SP(2) (2) STL A,*SP(1) 4。NOP 语句能否删除? * 5。程序执行后,主函数中变量a, i, result和数组 b[10]各元素的值分别为多少? 6。在调用函数时,各调用参数及函数返回值分别是怎样传递的? * 链接命令文件(volume.cmd) -stack 10h MEMORY { PAGE 0: VECT : o=0ff80h,l=80h PRAM : o=100h,l=1f00h * PAGE 1: DRAM : o=2000h,l=1000h DRAM1 : o= 4000h,l=2000h } * 链接命令文件(续) SECTIONS { .text : {} PRAM PAGE 0 .data : {} PRAM PAGE 0 .cinit : {} PRAM PAGE

文档评论(0)

rovend + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档