基于C和汇编语言混合编程的DSP芯片开发课件.pptxVIP

基于C和汇编语言混合编程的DSP芯片开发课件.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 第8章基于C和汇编语言混合编程 的DSP芯片开发 1. 引言 2. 基于C和汇编语言的混合编程方法 3. 基于C和汇编语言的混合编程举例 4. DSP代码的优化 5. 小结 6. 习题与思考题 2 一、引言 . C代码的效率还是无法与手工编写的汇编代 码的效率相比 . 中断程序将所有寄存器进行保护 . 用C语言实现DSP芯片的某些硬件控制不如 汇编程序方便 . 用C语言和汇编语言的混合编程方法来实现, 可以达到最佳利用DSP芯片软硬件资源的 目的。 3 二、基于C和汇编语言的 混合编程方法 (1) 独立编写C程序和汇编程序,分开编译或汇编, 形成各自的目标代码模块,然后用链接器将C模 块和汇编模块链接起来。例如,FFT程序一般采 用汇编语言编写,对FFT程序用汇编器进行汇编, 形成目标代码模块,与C模块链接就可以在C程序 中调用FFT程序。 (2) 直接在C语言程序的相应位置嵌入汇编语句。 (3) 对C程序进行编译,生成相应的汇编程序,然 后对汇编程序进行手工优化和修改。 4 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 编写汇编语言和C语言时必须遵循有关 的调用规则和寄存器规则。 C程序既可以调用汇编程序,也可以访 问汇编程序中定义的变量。 汇编程序也可以调用C函数或访问C程序 中定义的变量。 5 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 a) 必须遵循寄存器使用规则 。 b) 保护函数要用到的几个特定寄存器 。 c) 中断程序必须保护所有用到的寄存器。 d) 从汇编程序调用C函数时,第一个参数必 须放在累加器A中。其他参数以逆序方式 压入堆栈。调用之后,将参数弹出。 6 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 e) 从C程序调用汇编函数时,上一规则同样 适用,除非C语言的参数声明中使用省略 号以表明其参数数目是可变的。 f) 函数返回值存放在累加器ACC中。 g) 调用C函数时,注意C函数只保护了几个 特定的寄存器。 7 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 h) 汇编模块不能改变由 C 产生的 .cinit 块, 否则会引起不可预测的后果。 i) 长整型和浮点数在存储器中存放的顺序是 高位字在低地址,低位字在高地址。 j) 为保证32-bit数的读写正确,在函数调用 时,必须保证SP指针为偶数。 8 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 k) 编写汇编语言程序时,必须在C程序可以 访问的所有对象前加“_”。 l) 在汇编中定义的对象或函数,如果需要在 C 中访问或调用, 则必须用汇编指令 .global定义。 m)在C中定义的对象或函数, 需要在汇编中 访问或调用时, 在汇编中必须用 .global 指令定义。 9 二、基于C和汇编语言的 混合编程方法 1、独立的C和汇编模块接口 n) C 语言编写中断服务程序时,前面需加上 中断关键字interrupt。 o) C 语言编写的程序实现中断管理,必须采 用在C语言中嵌入汇编指令的方法来进行。 10 二、基于C和汇编语言的 混合编程方法 2、从C程序中访问汇编程序变量 访问在 .bss块中定义的变量: (1) 采用 .bss 命令定义变量; (2) 用.global 命令定义为外部变量; (3) 在变量名前加一下划线“_ ”; (4) 在C程序中将变量说明为外部变量。 11 二、基于C和汇编语言的 混合编程方法 2、从C程序中访问汇编程序变量 访问不在 .bss块中定义的变量 : 必须定义一个指向该变量的指针,然后 在C程序中间接地访问这个变量。 在C程序中访问汇编中的常数不能直接 使用常数的符号名,而应在常数名之前加 一个地址操作符“”。 12 二、基于C和汇编语言的 混合编程方法 3、在汇编程序中访问C程序变量 ;/*定义i为全局变量*/ ;/*定义x为全局变量*/ /*R0=i*/ /*x=R1*/ .global _i .global _x LDI @_i,R0 STF R1,@_x C程序: int float main ( ) { } 汇编程序: i; x; 13 二、基于C和汇编语言的 混合编程方法 4、在C程序中直接嵌入汇编语句 asm (“ 汇编语句 ”) ; 14 二、基于C和汇编语言的 混合编程方法 5、修改C编译器的输出 通过控制

文档评论(0)

+ 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档