第6章 C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt

第6章 C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt

ID:59209292

大小:400.00 KB

页数:44页

时间:2020-09-26

第6章  C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt_第1页
第6章  C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt_第2页
第6章  C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt_第3页
第6章  C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt_第4页
第6章  C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt_第5页
资源描述:

《第6章 C语言和汇编语言混合编程(C55x DSP)ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第6章C语言和汇编语言混合编程6.1混合编程中参数传递和寄存器使用6.2C55xDSPC语言和汇编语言混合编程实验在很多DSP应用中都使用C语言和汇编语言进行混合编程。C语言具有可读性高、便于维护和可移植性好等优点,然而汇编语言具有实时运行效率高和代码效率高的优点。使用汇编语言可以更充分地利用DSP的硬件资源,例如乘累加单元、单指令重复、块重复和块移动等。6.1混合编程中参数传递和寄存器使用某些程序使用汇编语言编写时,实时运行效率是C语言的几十倍或更多,运算量越大,汇编语言编写的程序实时运行效率越明显。用C函数调用汇编子程序和C函

2、数一样有参数传递和返回问题,下面介绍用C函数调用C55x汇编子程序的方法。6.1.1C语言和汇编语言之间名称转换C函数调用汇编子程序时,汇编程序所有变量名和子函数名需加前缀下划线“_”,例如使用_sum作为汇编语言程序子函数名。如果汇编程序中定义了变量,必须加前缀下划线,C函数才能使用该变量。前缀“_”只在C编译时使用,当我们用C函数调用汇编子程序和变量时,不需要加前缀“_”。以下是C函数调用汇编子程序的例子。//C源程序:   externintsum(int*);                 //参考一个汇编函数   in

3、tx[4]={0x1223,0x345,0x2345,0x3444};                 //定义全局变量并初始化   ints;//定义全局变量   voidmain()   {   s=sum(x);   while(1);   }//汇编子程序: .global_sum    _sum rptzac0,#3 add*ar0+,ac0 movac0,t0 ret6.1.2变量定义及编译模式 1.变量定义当C函数和汇编子程序使用同一变量时,在汇编子程序中,这些变量名必须使用.global、.def或.ref定义成全

4、局变量。2.编译模式使用C编译器,在进入汇编程序时,C55x的CPL(编译模式位)自动被置1,相对寻址模式使用堆栈指针SP。如果在汇编程序中需要使用相对直接寻址模式访问数据存储器,则必须改成数据页DP直接寻址模式,这可以通过清CPL位实现。在返回C调用程序前,CPL位必须重新置1。6.1.3参数传递及返回值1.参数传递   从C函数传递参数到汇编子程序,必须严格遵守C调用转换规则。传递一个参数,C编译器安排它一个特定的数据类型,并把它放到相应数据类型的寄存器里,C55x的C编译器使用以下三种典型的数据类型:   ■数据指针:int

5、*或long*;   ■16位数据:char、short或int;   ■32位数据:long、float、double或函数入口。如果参数指向数据内存,则它们作为数据指针;如果参数能放到一个16位的寄存器里,则它作为16位数据,例如数据类型为int和char,否则作为32位数据。参数也可以是结构体,一个结构体是两个字(32位),或少于两个字,将作为32位参数,并使用32位寄存器传递;超过两个字的结构体,使用参考点传递参数,C编译器将使用指针来传递结构体的地址,这个指针作为一数据参数。在子程序调用中,函数中的参数按一定顺序安排到寄

6、存器中,参数存放寄存器和其数据类型相对应,表6-1所示为参数类型和寄存器安排顺序表。表6-1参数类型和寄存器安排顺序表由表6-1可见,辅助寄存器既可作为数据指针又可以作为16位数据寄存器,例如T0和T1保存了16位数据参数,并且AR0已经保存了一个数据指针参数,那么第三个16位参数数据将放到AR1。2.参数返回值对于被调用的子程序的返回值,不同类型的参数使用的寄存器也有所不同。例如:当返回一个16位数据时使用T0;当返回一个32位数据时使用AC0;当返回一个数据指针时使用XAR0;当返回一个结构体时,这个结构体保存在当前的堆栈里。

7、3.应用实例以下是几个参数传递和返回值使用寄存器的例子。   【例6-1】返回值存放于T0,参数传递时,16位数据i使用T0,16位数据指针*k使用AR0,32位数据p使用AC0。函数定义及使用寄存器关系表示如下:【例6-2】返回值存放于AC0,参数传递时,16位数据i使用T0,16位数据指针*k使用AR0,16位数据p使用T1,16位数据n使用AR1。函数定义及使用寄存器关系表示如下:【例6-3】返回值存放于AC0,参数传递时,16位数据i使用T0,16位数据指针*k使用AR0,32位数据p使用AC0,16位数据n使用T1。函数

8、定义及使用寄存器关系表示如下:6.1.4寄存器的使用和保存当使用一个函数调用时,调用函数和被调用函数之间寄存器的安排和保存已经被严格定义。当被调用函数需使用T2、T3、AR5、AR6、AR7和AC3这些寄存器时,在使用之前必须先将其内容保存。使用压

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。