- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
dsp实验报告五
DSP 实 验 报 告
(实验五)
班级:
学号:
姓名:
实验 混合编程
学习使用实时运行库熟悉用和汇编混合编程的方法
3. 掌握混合编程的调试方法
二、实验环境
1. 集成开发环境Code Composer Studio .0(简称CCS)
2. 实验程序mix.c,mix.h,mix.cmd,addfun.s54混合编程
三、实验步骤printf( )语句(可与第三条对比,编译后将出现警告,可忽略),编译项目文件装载程序,装载程序了解在混合编程环境下变量、函数的定义方法以及项目文件的编译方法。
从主程序main开始用方式调试程序,观察程序的执行过程尤其是在程序中调用汇编子函数以及返回的过程,注意当SP和PC的变化。画出程序流程图;
四、实验结果
从主程序main开始用Single Step方式调试程序,观察程序的执行过程。尤其是在C程序中调用汇编子函数以及返回的过程,观察到当前SP和PC的变化为:
PC从地址0X0000205D一直进行自加,单步执行一次就加1;SP值在从main开始就一直保持0X0C86保持不变,直到return语句执行完后才变为0X0C9D,跳出主程序后SP值开始自减执行push语句,执行完后,紧接着在执行POP时继续进行自加。执行过程如下:
开始执行Goto main:
执行return后:
由此可见:PC值反映当前执行地址值;SP值只有在调用PUSH或POP等语句时才发生相应的变化。
程序分析及流程图:
#include stdio.h
#include mix.h
int mix_func_c(int *wl, int *wr, int val) //定义求数组最小值的子函数;
{
int i, val_min, tmp[8]; //定义变量
for(i=0; i8; i++)
tmp[i] = wl[i] * wr[i]; //两数相乘
val_min = val; //置初值,设定val_min最小值为val即100
for(i=0; i8; i++) //比较,求出两数相乘后乘积的最小值
{
if(val_mintmp[i])
val_min = tmp[i];
}
return val_min;
}
void main() //执行主函数
{ int val, i, wl[8], wr[8];
int min_asm, min_c;
//register setting //C中嵌套ASM语言
asm( stm #0, SWWSR);
asm( stm #0x00A0, PMST);
// min_asm=1900;
// min_c=2000;
//call system function
val = -100; //定义val值
val = abs(val);
printf(val = %d\n, val);
//call asm function
for(i=0; i8; i++) //对wl与wr数组赋初值
{
wl[i]=i;
wr[i]=2*i+1;
}
min_asm = mix_func(wl, wr, val); //调用混合编程程序,在C中映射汇编
printf(val = %d\n, min_asm);
min_c = mix_func_c(wl, wr, val); //在C函数中输出C
printf(val = %d\n, min_c);
return;
}
五、实验结果分析实时运行库实时运行库提供了标准C中的大部分函数,帮助建立C语言的环境,同时也提供一些基本的调试手段,如printf( )等。
程序接口参数传递是混合编程中非常重要的一部分:第一个参数放置在寄存器A中,其他参数按照逆序压入堆栈;返回的数据放置在寄存器A中。
局部数据局部数据是在堆栈中开设的,程序返回前消除。
关于堆栈保护在子程序addfun中,由于需要改变ST1中的数值,所以在子程序入口处先用语句pshm ST1ST1的值在堆栈中保护起来在子程序返回前,再用语句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
文档评论(0)