已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字信号处理实验报告(第三次) 学 院: 班 级: 姓 名: 学 号: 指导老师: 完成日期: 内容:实验五 混合编程实验五 混合编程一、实验目的1. 学习使用实时运行库;2. 熟悉用C和汇编混合编程的方法;3. 掌握混合编程的调试方法。 二、实验环境1. 集成开发环境Code Composer Studio 2.0(简称CCS)2. 实验程序mix.c,mix.h(由程序自动加载,可不加,后同),mix.cmd,addfun.s54,rts.lib(有C的混合编程需要有库文件),c5402.gel(要有,有C的混合编程要用gel初始设置。选芯片时设置已自带,可不添加;如无则加)三、实验步骤1. 改设置:Build option子菜单linker中Basic项Autoinit Model 改为load-time Initialization或Run-time Initialization(不同的设置,SP初始值将不同。No Initialization也可以,但效果不如前两个好)。2. 为使效果更明显,屏蔽前两条printf( )语句(可与第三条对比,编译后将出现警告,可忽略),编译项目文件得到.out程序。另外装载程序前,在Edit-Memory-Fill中,对Data Memory从0x0000到0xFFFF用全0x1111或0x2222等填充(注意:填充后必须对Gel文件重新Load一次)。然后装载程序,了解在混合编程环境下变量、函数的定义方法以及项目文件的编译方法。屏蔽前两条printf( )语句/*/ SJTU DSP Tech. Center/ Copyright (c) 2001 SJTU DSP Tech. Center. All Rights Reserved./ Description:/ TMS320C54x Program for Students Experiment/ History:/DateAuthors/2003/07/23Zheng Yigang/*#include #include mix.hint mix_func_c(int *wl, int *wr, int val)int i, val_min, tmp8;for(i=0; i8; i+)tmpi = wli * wri;val_min = val;for(i=0; itmpi)val_min = tmpi;return val_min;void main()int val, i, wl8, wr8;int min_asm, min_c;/register settingasm(stm#0, SWWSR);asm(stm#0x00A0, PMST);/min_asm=1900;/min_c=2000;/call system functionval = -100;val = abs(val);printf(val = %dn, val);/call asm functionfor(i=0; iGo main后的值)作为开始察看地址,从主程序main开始用Single Step方式调试程序,观察程序的执行过程。尤其是在C程序中调用汇编子函数以及返回的过程,注意当前SP和PC的变化。SP和PC情形一SP和PC情形二4. 看懂代码,比较结果,并画出程序流程图;程序流程图寄存器初始化给数组wl,wr赋初值,最小为0调用汇编子程序mix_func()输出最小值输出最小值调用C子程序mix_func_c()结束参数传递定义变量就i,val_min,数组tmp8循环实现tmpi = wli * wri循环比较使val_min存为tmpi最小值返回val_min的值四、实验结果分析1. 实时运行库实时运行库提供了标准C中的大部分函数,帮助建立C语言的环境,同时也提供一些基本的调试手段,如printf( )等。2. 程序接口参数传递是混合编程中非常重要的一部分:第一个参数放置在寄存器A中,其他参数按照逆序压入堆栈;返回的数据放置在寄存器A中。3. 局部数据局部数据是在堆栈中开设的,程序返回前消除。4. 关于堆栈保护在子程序addfun中,由于需要改变ST1中的数值,所以在子程序入口处先用语句pshm ST1 ; ST1的值在堆栈中保护起来;在子程序返回前,再用语句popm AR1 ;恢复ST1原来的值。注:例程见目录 71_mix. mix.cmd中段设置说明: 1. The .cinit section contains tables for initializing variables and constants. 2. The .const section contains string constants and data defined with the C/C+ qualifier const (provided the constant is not also defined as volatile). 3. The .text section contains all the executable code as well as string literals and compiler-generated constants. 4. The .bss section reserves space for global and static variables. When you specify the -c linker option, at program startup, the C/C+ boot routine copies data out of the .cinit section (which can be in ROM) and stores it in the .bss section. 5. The .data section is normally used to contain tables of data or preinitialized variables.C程序代码#include #include mix.hint mix_func_c(int *wl, int *wr, int val) / C函数int i, val_min, tmp8;for(i=0; i8; i+) /乘法tmpi = wli * wri;val_min = val;for(i=0; itmpi)val_min = tmpi;return val_min; /最小值 作为程序的 返回值void main()int val, i, wl8, wr8;int min_asm, min_c;/寄存器设置asm(stm#0, SWWSR);asm(stm#0x00A0, PMST);/汇编程序里面的最小值 min_asm=1900;/C程序里面的最小值 min_c=2000;/调用系统函数 call system functionval = -100;val = abs(val);/绝对值printf(val = %dn, val);/输出val/call asm function /调用汇编程序for(i=0; i8; i+)?/表赋初值 0 1 2 3 4 5 6 7/ 0 1 3 5 7 9 11 13wli=i;wri=2*i+1;min_asm = mix_func(wl, wr, val); / 汇编 最小值printf(val = %dn, min_asm); /输出min_c = mix_func_c(wl, wr, val); / C 最小值printf(val = %dn, min_c);/输出return; 汇编程序代码.mmregs;-;int mix_func(int *wl, int *wr, int val);int i, val_min, tmp8;-var_tmp.set0;ST1off_m.set-8off_p.set8frame_size .set 9;return address arg_wr .set frame_size+1arg_val .set frame_size+2.global _mix_func ;说明:外部变量 非私有.text; 在变量名前加一下划线_mix_func: pshm ST1 frame#off_m ssbxOVM;置 1;如果 OVM位为1,则 80 0000 0000h 的绝对值 为 00 7FFF FFFFh;如果 OVM位为0,则 80 0000 0000h 的绝对值 为 80 0000 0000h;表赋值-;for(i=0; i8; i+);tmpi = wli * wri;-stm#8-1, BRCmvdk*SP(arg_wr), AR3;AR3=wrmvmmSP, AR4;AR4=tmpstlmA, AR2;AR2=wlrptbtmp_loop-1mpy*AR2+, *AR3+, AstlA, *AR4+tmp_loop:;查找最小值-;val_min = val;for(i=0; itmpi);val_min = tmpi;return val_min;-ld*SP(arg_val), AmvmmSP, AR2;AR2=tmpstm#8-1, BRCrptbcompare_loop-1ld*AR2+, BminAcompare_loop:;比较?frame#off_ppopmST1ret五、实验思考题1、此程序实现的功能是什么?答:此程序实现的函数功能是求最小值。分别可以用C语言和汇编语言两种编写方法。2、C语言与汇编语言是如何调用的?有何不同?编译器会自动在标识符的开头加上下划线,因此在汇编程序中访问C函数的变量和函数,只需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋震烈补偿协议书
- 房租抵押写合同范本
- 房租转让分期协议书
- 房门清拆协议书范本
- 手术知情协议书模板
- 手机店招聘合同范本
- 打印社常用合同范本
- 打掉胎儿赔偿协议书
- 打火机定制合同范本
- 托管中心劳务协议书
- 2025云南泰佳鑫投资有限公司、嵩明县高新产业投资管理有限责任公司招聘9人考试笔试参考题库附答案解析
- 2025年新修订版《森林草原防灭火条例》全文+修订宣贯解读课件(原创)
- 人教版四年级道德与法治下册期末考试卷(含答案)
- 2025年法宣在线考试题附答案
- 苏晋能源控股有限公司招聘笔试题库2025
- 出租车全国题库题库(500道)
- 中小企业存货管理存在的问题及对策毕业论文管理资料
- 国企办公室笔试考试题库及答案
- 2025年农业智能化智能灌溉系统数字化建设方案
- 新人娱乐主播培训课件
- 2025年老人三力测试题库及答案
评论
0/150
提交评论