- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 例:SECTIONS 伪指令的使用 file1.obj file2.obj -o prog.out -m prog.map -e start SECTIONS { .text: load=ROM, run=800H .const: load=ROM .bss: load=RAM .vectors: load=FF80H {t1.obj(.intvec1) t2.obj(.intvec2) endvec=.;} .data: align=16 } * 5.6 TMS320C54x C语言编程 DSP中C语言设计特点: (C语言具有兼容性和可移植的优点) 不需要了解信号处理是如何由DSP的硬件和指令完成的; 与硬件无关,可以移植到不同硬件结构的DSP上去; C语言编程处理速度慢,代码长,这个缺点可以由3方面来弥补: (1)提高DSP的性能 (2)提高C编译器的效率 (3)采用C语言和汇编语言相结合的编程方法 汇编语言程序:具有执行速度快的优点,但用汇编语言编写程 序是比较费时费力的,且无可移植性。 * 1.C编译器 C54X的C编译器由两部分组成:先剖系C源代码并完成优化,然后将其转化为汇编源代码。另一部分就是前面介绍过的汇编语言工具。所以当使用CL500命令对C语言进行编译时,它实际上调用: ac500 —— C 剖析器 opt500 —— 优化器 cg500 —— 汇编语言生成器 asm500 —— 汇编编译器 C代码的程序入口地址符号为 _c_int00 初始化全局和静态变量 初始化 C 环境变量 设置堆栈 (SP) 呼叫主函数 在复位的时候,你需要如何做才能告诉CPU从_c_int00处开始执行? ;cvectors.asm rsv: B _c_int00 .sect “vectors” .ref _c_int00 * 2.C语言编程链接命令文件的设计 (1)建立一个项目; (2)用编辑器编辑一个或多个C程序文件,如file1.c,file2.c添加到中项目; (3)对C程序进行编译形成汇编源文件file1.asm和file2.asm; (4)根据实际应用编辑一个命令文件:file1.cmd; (5)汇编-链接。 C程序的开发过程: * 未初始化段有: .bss 全局和静态变量空间,在程序启动后,C初始化引导程序将数据从.cinit段拷贝到.bss段 .stack 系统堆栈存储器,用于变量传递及分配局部变量 .sysmem 动态分配存储器,用C语言函数malloc、calloc、realloc动态地分配存储器 C编译器生成的段: C编译器的输出文件除了三个基本的段,即.text, .data, .bss外, 还包括C编译器生成的另几个段:.cinit, .stack, .sysmem. (1)介绍C编程 其中初始化段包括: .text :放可执行代码和字符串 .cinit :初始化变量和常数表 .const :字符串和以const关键字定义的常量 .switch:包含switch语句表 * C/C++系统堆栈 .stack不同于DSP汇编指令定义的堆栈。.stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。 .stack定义的段大小(堆栈大小)可用链接器选项-stack size设定,链接器还产生一个全局符号_ _STACK_SIZE,并赋给它等于堆栈长度的值,以字为单位,缺省值为1K。 中断处理:C54x编译器将C语言进行了扩展,中断可以利用Interrupt关键字由c/c++函数直接处理. 例如 interrupt void int_handle() { int j,flag; …… } 汇编完成后,使用开中断RETE返回。 * 使用volatile关键字 由于优化器会尽量减少存储器的访问,所以有时必须禁止优化,特别是循环控制变量。编译器不能优化任何对volatile变量的引用。 例: unsigned int *ctrl; whil
文档评论(0)