ADI_DSP程序间调用例程及说明

ADI_DSP程序间调用例程及说明

ID:39464298

大小:39.00 KB

页数:5页

时间:2019-07-03

ADI_DSP程序间调用例程及说明_第1页
ADI_DSP程序间调用例程及说明_第2页
ADI_DSP程序间调用例程及说明_第3页
ADI_DSP程序间调用例程及说明_第4页
ADI_DSP程序间调用例程及说明_第5页
资源描述:

《ADI_DSP程序间调用例程及说明》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ADI_DSP程序间调用例程及说明下面的程序间的调用是基于TigerSharc101处理器,在VisualDSP++3.0上调试通过验证。VDSP上编程可使用标准C语言,也可使用汇编语言。故程序间的调用共分4种:(1)C语言调用C语言子程序;(2)C语言调用汇编语言子程序;(3)汇编语言调用汇编语言子程序;(4)汇编语言调用C语言子程序;下面详细说明4中调用方法:1.C语言调用C语言子程序这种调用方法最简单,和标准C语言调用一样。声明函数之后便可以调用例程:Func调用SubCFuncvoidSubCFunc(int*BuffAddr

2、,intN);voidFunc(void){int*BuffAddr;intN;SunCFunc(BuffAddr,N);Return;}voidSubCFunc(int*BuffAddr,intN){return;}2.C语言调用汇编语言子程序这种调用方法最常用。首先要在C语言程序中用extern声明汇编子函数,在汇编子函数中要用global_SunAsmFunc;,这样便可以调用汇编子程序了2.1声明:C语言中声明用externvoidSubAsmFunc(int*BuffAddr,intN);汇编语言中声明.global_Sub

3、AsmFunc;2.2参数传递C语言的参数传递到汇编语言中,地址和整数依次分别用j4,j5,j6,j7传递;浮点数依次分别用xr4,xr5,xr6,xr7传递;汇编函数的返回值:浮点值放在xr8中;整型值放在j8中;多于4个参数的传递则要借助堆栈传递数据。2.3例程:C语言函数:externintSubAsmFunc(int*BuffAddr,floatx,intN)voidCFunc(void){int*BuffAddr;floatx;intN;SubAsmFunc(BuffAddr,x,N);return;}汇编子程序sectio

4、nprogram;global_SubAsmFunc;_SubAsmFunc://j4存放BufferAddr地址//xr5存放浮点数x//j6存放N//j8返回值存放地址,如果是浮点数则放在xr8中_SunAsmFunc.endalign_code4;cjmp(np)(abs);nop;nop;nop;1.汇编程序调用汇编子程汇编程序调用汇编子程序时,首先要进行堆栈保护,每进一层子函数都要进行堆栈保护。在实模式下,堆栈保护使用j26,j27,k26,k27寄存器,编程时不要使用j27:24,和k27:24寄存器,另外j31和k31寄

5、存器也不可以使用,如果要使用必须把这些寄存器的值做保护。3.1函数调用声明汇编主程序中声明:.extern_SubAsmFunc;汇编子程序中声明:.global_SubAsmFunc;3.2参数传递参数传递遵循C语言调用汇编语言规则,但是要在汇编主程序中手动给寄存器赋值3.3堆栈保护进入一个子程序就要进行堆栈保护,堆栈保护一般定义一个宏来实现,在例程中会详细介绍如何进行堆栈保护。3.4例程汇编语言调用汇编语言例程,此例程具有通用性,可多层调用,例如可以用C语言调用汇编主程序,再用汇编主程序调用汇编子程序,然后再逐层返回。汇编语言主程

6、序#ifndefmENTER#definemENTERj26=j27-0x40;k26=k27-0x40;;[j27+=0xFFFFFFF4]=cjmp;k27=k27-0x4;;#definemRETRUNcjmp=[j26+0x40];;cjmp(np)(abs);j27:24=q[j26+0x44];k27:26=q[k26+0x44];;#endifextern_SubAsmFunc;sectionprogram;global_AsmFunc;_AsmFunc:mENTER;;//汇编主程序接收参数传递............

7、........//汇编主程序调用汇编子程序.align_code4;iftrue,call_SubAsmFunc;q[j27+4]=j27:24;q[k27+4]=k27:24;;//接收返回值..........mRETURN;;_AsmFunc.end:汇编语言子程序.sectionprogram;.global_SubAsmFunc;_SubAsmFunc:mENTER;;//参数传递..........mRETURN;;_SubAsmFunc.end:1.汇编程序调用C语言子程序汇编程序调用C语言子程序前要把必要的积存器进行

8、保护,经常保护的寄存器为j27:24,k27:24,j7:j4,xr7:xr4(如果在继续运行的汇编语言程序中不再使用此寄存器则可以不理会它)汇编语言调用C语言子程序有两种形式:4.1汇编语言调用自定义C语言子程序4.1

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

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

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