第5章TMS320C54x的软件开发与设计.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 5.7.1 C模块和汇编模块的数据相互访问 2.从汇编程序中访问C程序变量 [例5-26] 汇编访问C全局变量示例 汇编程序: .global _gvar .global _asmfunc _asmfunc: ADD *(_gvar),A ;汇编中使用 STL A,*(_gvar) RET C程序: extern int asmfunc(); int gvar; /*C中定义的变量*/ void main(void) { int i=5; gvar=2; i=asmfunc(i); } 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * (2.)访问C程序中定义的全局数组 [例5-27] 汇编访问C全局数组示例 C程序: int h[4]={1,2,3,4}; /*C中定义的变量*/ int s[4]; /*C中定义的变量*/ void main(void) { transmit(); } 汇编程序: .global _h ;汇编中使用 .global _s ;汇编中使用 .global _transmit .mmregs _transmit: ;h中的内容 ; 传给s STM #_h , AR2 STM #_s , AR3 ;*********** RPT #(4-1) MVDD *AR2+ , *AR3+ ;*********** ;或 ;*********** STM #4-1,BRC RPTB L1-1 LD *AR2,A MVDD *AR2+,*AR3+ ;*********** L1: RET 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * 5.7.2 C模块和汇编模块的函数相互调用 1.C语言函数的调用规则 (1)寄存器规则 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * (2)调用函数执行过程 调用函数执行以下几项任务: 1) 保护寄存器。 2) 参数传递。在函数调用前,将参数以逆序压入运行堆栈。逆序是指最右边的参数最先压入栈,然后自右向左将参数依次压入栈,直至第二个参数入栈完毕。但对第一个参数,则不需压入堆栈,而是放入累加器A中,由A进行传递。 若参数是长整型和浮点数时,则低位字先压入栈,高位字后压入栈。若参数中有结构,则调用函数先给结构分配空间,而该空间的地址则通过累加器A传递给被调用函数。 3)返回地址压入堆栈,调用被调函数 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * (3)被调函数执行过程 被调用函数依次执行以下几项任务: 1) 寄存器保护。如果被调用函数中使用修改寄存器(如AR1、AR6、AR7),则必须将它们压栈保护。 2) 局部变量分配。当被调用函数需分配内存来建立局部变量及参数区时,SP向低地址移动一个常数(即SP减去一个常数),该常数的计算方法如下: 常数=局部变量长度+参数区中调用其他函数的参数长度 3) 函数执行。 4) 恢复函数入口所保护的寄存器,释放局部变量,设置好返回值,弹出返回地址,返回被调函数。 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * 例5-28 函数调用过程 调用前 传递函数调用函数 传递函数调用函数 低 高 返回地址 参数2… 参数n 调用者局部变量 SP 调用者 参数区 调用者局部变量 SP SP 局部参数区 局部幀 返回地址 参数2… 参数n 调用者局部变量 参数1 累加器A * 5.7.2 C模块和汇编模块的函数相互调用 2.独立的C和汇编模块接口 编写独立的汇编模块,最重要的是必须遵守C编译器所定义的函数调用规则和寄存器使用规则,遵循了这个规则就可以保证所编写的汇编模块不破坏C的运行环境。 第5章 TMS320C54x的软件开发与设计 5.7 用C语言和汇编混合编程 * 5.7.2 C模块和汇编模块的函数相互调用 3.从C程序中调用汇编函数 [例5-29] C程序中调用汇编函数示例(单参数传入、单值返回情况)在前面的变量调用中已说明,单参数调用时传递的参数是放在累加器A中的;若函数有返回值时,返回值也是放在累加器A中。

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档