




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/C+语言和汇编语言混合编程开发为了充分利用DSP芯片的硬件资源,更好发挥C/C+语言和汇编语言进行软件开发的各自优点,可以将两者有机的结合起来,兼顾两者优点,避免其弊端。因此,在很多情况下,采用混合编程方法能更好地达到设计要求,完成设计任务。C/C+语言和汇编语言混合编程的具体方法有以下几种:(1)独立编写C/C+程序和汇编程序,分开编译或汇编形成各自的目标模块,再用链接器将C/C+模块和汇编模块链接起来,这是一种灵活性较大的方法。但用户必须自己维护各汇编模块的入口和出口代码,自己计算传递参数在堆栈中的偏移量,工作量稍大,但能做到对程序的绝对控制,也能满足软件设计结构化的要求。这是主要讲述的方法。(2)在C/C+程序中使用汇编程序中定义的变量和常量。(3)在C/C+程序中直接内嵌汇编语句。这种方法可以在C/C+程序中实现C/C+语言无法实现的硬件控制功能,如修改中断控制寄存器、中断标志寄存器等。(4)在C/C+源程序中使用内部函数直接调用汇编语言语句。后3种方法由于在C/C+语言中直接嵌入了汇编语言的成分,容易造成程序混乱,C/C+环境被破坏,甚至导致程序崩溃,而编程者又很难对不良结果进行预期和有效控制。而如果采用第一种方法,只要遵循有关C/C+语言函数调用规则和寄存器规则,就能预见到程序运行的结果,保证程序正确。下面分别讲述函数调用规则和寄存器规则。1. 函数调用规则C/C+编译器对函数调用强加了一组严格的原则。除了特殊的运行时间支持库函数外,任何调用函数和被C/C函数调用的函数都必须遵守这些原则。不遵守这些原则可能破坏C/C+环境并导致程序失败。图1说明了典型的函数调用。在这个例子中,参数被传递到堆栈中调用者的参数块,函数再使用这些参数调用被调用函数。注意,第一个参数是在A累加器中传递的。这个例子还说明了汇编器对被调用函数的局部帧的分配。局部帧包括局部变量块和局部参数块两部分,其中局部参数块是局部帧中用来传递参数到其他函数的部分。如果被调用函数没有局部变量并且不再调用其他函数或需要调用的函数没有参数,则不分配局部帧。对于混合编程而言,由于被调用函数是手工编写的汇编程序,则局部帧由编程者自己完成分配,也不需要在堆栈中进行,而编译器分配局部帧。(1)函数如何调用函数(调用者)在调用被调用函数时执行以下任务。调用者将第一个(最左边)的参数值放进累加器A。调用者将剩下的参数按相反的顺序传进参数块,剩下的最左边的参数在最低的地址。若函数返回一个结构,则调用者为该结构分配空间,然后用累加器A传递返回空间的地址给调用的函数。调用者调用函数。(2)被调用函数如何响应。被调用函数执行以下任务:注意:如果被调用函数是C/C+函数,则下面步骤都是由汇编器自动完成。如果是混合编程,则如下步骤都是由编程者在被调用的汇编函数中完成的。若被调用函数修改AR1,AR2或AR7,则将他们压入堆栈。被调用函数通过从SP减去一个常数,为局部变量块和局部参数块分配存储器。该常数按以下公式计算,即:局部变量块的大小局部参数块的大小paddingpadding值是为了保证SP对准偶数边界而可能要求补充的一个字。之所以SP要对准偶数边界,是因为5000系列DSP指令可一次读写存储器的32位,例如DLD,DADD等。这样,编译器必须保证所有32 b的目标都驻留在偶数边界。对于混合编程而言可以在汇编函数中,按本步骤的方法在堆栈中分配局部帧,但本方法相对比较麻烦,尤其该汇编函数还要调用其他函数时,所以,一般而言编程者通常用其他方法分配局部帧,比如用bss伪指令定义局部变量供函数使用。被调用函数为调用函数执行代码。若函数返回一个值,则被调用函数将该值放在累加器A中;若函数返回一个结构,则被调用函数将该结构复制到累加器A指到的存储器块;若调用者不返回函数值,则A被置0。被调用函数给SP上加上第二步计算的常数,释放为局部变量和局部参数分配的存储空间。对混合编程而言,如果编程者没有在堆栈中分配局部帧,则本步骤省略。被调用函数恢复所有保存的寄存器。被调用函数执行返回。2. 寄存器规则(1)必须保存任何被函数修正的专用寄存器。专用寄存器包括:AR1,AR6,AR7堆栈指针(SP)若对SP正常使用,不需要明显的保存。换句话说,只要任何压入堆栈的东西在函数返回之 前被弹回(因而保存了SP),汇编函数就可以自由的使用堆栈。任何非专用的寄存器都可以自由地使用而无需将他们保存。(2)中断函数必须保存他使用的所有寄存器。(3)ARP在函数进入和返回时,必须为0,即当前辅助寄存器为AR0。函数执行时可以为其 他值。(4)在默认的情况下,编译器总是认为OVM为0。因此,若在汇编程序中将OVM置为1,则返回C/C+环境时,必须将其恢复为0。(5)在默认的情况下,编译器总是认为CPL为1。因此,若在汇编程序中将CPL清0,则在返回C/C+环境时,必须将其恢复为1。(6)长整数和浮点数存储在存储器中的方法是最高有效字在低位地址。(7)函数必须按前面有关被调用函数响应中所述的方法返回值。(8)除了全局变量的初始化外,汇编语言模块不能以任何目的使用cinit段。在boot asm中的C/C+启动程序假定cinit段完全由初始化表组成。将其他的信息放入cin it中将使初始化表产生混乱,并将产生不可预期的结果。(9)在汇编语言模块中,对可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鱼儿不动了课件
- 魅力女性运动课件
- 济南市2024-2025学年八年级下学期语文月考模拟试卷
- 高速铁路课程课件
- 电解池电镀课件
- 高速电路安全知识培训课件
- 高速收费员安全培训课件
- 电芯知识培训心得
- 10kV及以下配网工程施工组织设计(方案)
- 电脑知识培训主题课件
- 2025吐鲁番辅警考试真题
- AI赋能自动化开发流程
- 2025至2030中国航空客运销售代理行业市场运行发展分析及前景趋势与投资报告
- 浙江杭州市2024-2025学年高一下学期6月期末考试英语试题及答案
- 愈见倾听师考试题及答案
- 2025至2030年中国液态食品包装机械行业市场供需态势及发展前景研判报告
- 首诊负责制试题及答案
- 渐进片试题及答案
- 2024浙江遂昌农商银行新员工招聘笔试历年典型考题及考点剖析附带答案详解
- 文件销毁保密协议书
- 高考英语必背688个高频词汇清单
评论
0/150
提交评论