实验四 混合编程实验实验报告.docxVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《混合编程实验》实验报告 姓名: 赵广元 学号: 1428403058 学院: 电子信息学院 班级: 电子信息工程 混合编程实验 一 实验目的 学习使用实时运行库 熟悉用C和汇编混合编程的方法 掌握混合编程的调试方法 二 实验环境 TMS320VC5416DSK实验板 Ccs软件 PC机 三 实验原理 1.混合编程基础: 高级语言(例如C语言)编程灵活自由,可以提高编程效率 汇编语言可以充分利用DSP的硬件结构,运算性能优于高级语言 所以可以用高级语言来编写主流程,汇编语言编写数据量大的数据处理模块 这样的优点在于:既可以保证程序良好的运算能力,又可以给程序升级和维护带来方便所以在实际编程中,可以采用混合编程 2.C语言调用汇编语言编写的函数时的编程规范: (1)变量和函数的命名规则: 在C语言和汇编语言中均需要声明为全局变量 对函数而言,还必须在C语言中给出准确的函数原型说明 汇编语言中该名字需要加一个下划线作为前缀,但C语言中保持“自然”的命名 (2)C语言调用汇编函数的函数调用规则 C语言的程序主要是由编译器完成资源的分配,对于编程人员可以看做是一个黑盒,不必追究其内在细节 汇编语言是由汇编人员手工安排资源,所以要特别注意其使用规则要与C语言保持一致 (3)与C语言接口的汇编程序子函数而言,汇编语言中寄存器使用规则: 在子程序中自由使用的有AR0,AR2-AR5,A,B,BRC,T等 对于AR1,AR6,AR7,ST0,ST1这些寄存器,子子程序中如果要改变他们,需要先将他们在堆栈中保护起来,在程序结束时再从堆栈中弹出他们,恢复调用前的数值 在C语言中,状态标志有固定的缺省数值,可以通过查表获得。建议不要使用缺省数值,在汇编程序中最好按照自己的要求显示的设置状态位 (4)C语言调用汇编程序子函数时,分析参数传递的规则: C语言和汇编的相互调用主要通过累加器A和堆栈来传递参数(c-int00函数将CPL置一,利用SP进行直接寻址) 在没有调用函数时,堆栈中先压入第二个参数以后的其他参数(包括第二个参数),最后一个参数压在堆栈的最下方,即按照逆序压栈 然后将第一个参数放在A中并调用函数,这时程序的返回地址将自动被压入堆栈 当函数有返回值时,在返回前被放在A中 在函数返回时,按照反方向依次调整堆栈指针 3.根据参数传递的规则,汇编函数设计方法: 保护现场(如ST0,ST1) 举例:pshm ST1 调整SP指针,为函数局部变量申请空间 Frame #-8 获取调用函数的传入函数 第一个传入参数从A累加器获取 MVDK *SP(8+1+1), AR3 ; 第二个参数 MVDK *SP(8+1+2), AR3 ; 第三个参数 编写处理程序 将返回值赋给A累加器 恢复SP指针 Frame #8 恢复现场 popm ST1 RET 四 实验步骤 1.用USB线连接PC和DSK5416,利用板上Emulator进行调试 2.启动CCS,建立一个工程。 3.建立混合汇编源程序文件。 – mix.h ;汇编函数在C语言中函数原型声明头文件 – Mix.c ;主程序文件,调用汇编函数mix_func函数 – Addfun.s54 ;汇编函数_mix_func定义的汇编文件 – mix.cmd ;链接配置文件 4.将mix.c、addfun.s54和cmd文件加入到工程。 5.设置工程的Build option,在链接选项中Include libraries(-l)项输入rts.lib,使用近调用方式调用函数。 6.Buid all 7.Load Program→Run 8.结果测试:利用View-CPU Register和View-Memory注意参数传递和SP、PC指针的变化 如果采用远调用,程序应该做哪些修改? 1.运行时支持库将rts.lib换为rts_ext.lib 2.Build option的编译选项选用-mf (远调用选项) 3.调用时返回地址占2个word,所以要访问输入参数(参 数2、3)应该与近调用时偏移量再加1 第一个传入参数从A累加器获取 MVDK *SP(8+2+1), AR3 ; 第二个参数 MVDK *SP(8+2+2), AR3 ; 第三个参数 RET要改为FRET 在函数调用汇编语句处加入断点,编译下载后点击运行按钮,之后使用step into单步执行命令,用register观察指针变化如下图所示: 从函数处开始:(sp=sp+11): 转到调用的汇编语句处: 顺序向下执行: 过程中指针变化如图: 循环: 跳

文档评论(0)

yigang0925 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档