- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)