实验一-编写一个以C-语言为基础的DSP程序_第1页
实验一-编写一个以C-语言为基础的DSP程序_第2页
实验一-编写一个以C-语言为基础的DSP程序_第3页
实验一-编写一个以C-语言为基础的DSP程序_第4页
实验一-编写一个以C-语言为基础的DSP程序_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告实验中心电子信息技术实验中心专业年级电子信息科学与技术2023级实验课程DSP原理及应用实验姓名赵正军实验名称实验一、编写一个以C语言为根底的DSP程序学号202307031113提交日期201成绩一、实验目的1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成局部。2.学习编制连接命令文件,并用来控制代码的连接。3.学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。4.熟悉使用软件仿真方式调试程序。二、实验设备PC兼容机一台,操作系统为WindowsXP,安CCS软件。三、实验原理1.标准C语言程序CCS支持使用标准C语言开发DSP应用程序。当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c(如:volume.c)。CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP的可执行代码。最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。所以用户工程中需要注明使用C的支持库。2.命令文件的作用命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。命令文件也为链接程序提供了DSP外扩存储器的描述。在程序中使用CMD文件描述硬件存储区,可以只说明使用局部,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。3.内存映射(map)文件的作用一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP代码确实切信息。当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。另外,通过观察map文件,可以掌握DSP存储器的使用和利用情况,以便进行存储器方面的优化工作。4.源程序分析四、实验内容与步骤1.实验准备建立PC机器与DSP仪器之间的来连接,设置软件模式。2.建立新的工程文件(1)双击桌面上图标,启动CodeComposerStudio2.21。(2)进行以下设置(如图2-2):3.编辑输入源程序(1)C语言程序-先新建源程序窗口:-输入源程序:intx,y,z;main(){x=1;y=2;while(1){z=x+y;}}图2-3新建源文件-保存源程序为CProgram.c:(2)连接命令文件-如同第(1)步操作,建立空的源程序窗口。-输入连接命令文件内容:-lrts2800.lib-stack400h-heap100MEMORY{PAGE0:PROG(R):origin=0x3E8000,length=0x10000PAGE0:BOOT(R):origin=0x3FF000,length=0xFC0PAGE0:RESET(R):origin=0x3FFFC0,length=0x2PAGE0:VECTORS(R):origin=0x3FFFC2,length=0x3EPAGE1:M0RAM(RW):origin=0x000000,length=0x400PAGE1:M1RAM(RW):origin=0x000400,length=0x400PAGE1:L0L1RAM(RW):origin=0x008000,length=0x2000图2-4保存为c文件PAGE1:H0RAM(RW):origin=0x3F8000,length=0x2000}SECTIONS{/*22-bitprogramsections*/.reset:>RESET,PAGE=0vectors:>VECTORS,PAGE=0.pinit:>PROG,PAGE=0.cinit:>PROG,PAGE=0.text:>PROG,PAGE=0/*16-Bitdatasections*/.const:>L0L1RAM,PAGE=1.bss:>L0L1RAM,PAGE=1.stack:>M1RAM,PAGE=1.sysmem:>M0RAM,PAGE=1/*32-bitdatasections*/.ebss:>H0RAM,PAGE=1.econst:>H0RAM,PAGE=1.esysmem:>H0RAM,PAGE=1}-lrts2800.lib-如同第(1)步操作,将文件存为:C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\Lab0102-CProgram\CProgramd(3)将上述编译的源程序参加工程CProgram.pjt。4.编译源文件、下载可执行程序(1)单击菜单“Project〞、“RebuildAll〞。(2)执行FileàLoadProgram,在随后翻开的对话框中选择刚刚建立的C:\ICETEK-F2812-EDULab\Lab0102-CProgram\debug\CProgram.out文件。完成后,系统自动翻开一个反汇编窗口“Disassembly〞,并在其中指示程序的入口地址为“_c_int00”5.翻开观察窗口开启CPU存放器观察窗口:单击菜单View->Registers->Core。6.观察程序运行结果这时,在“Disassembly〞代表程序运行位置的绿色箭头指向程序的入口地址,程序将从此开始执行。(1)选择菜单中Debug->GoMain,CCS自动翻开CProgram.c,程序会停在用户主程序入口main上,这从反汇编窗口和CProgram.c窗口中的指示箭头位置可以看出。(2)在内存观察窗口中观察变量的值:选择“View〞菜单中“Memory…〞项,在“MemroyWindowOptions〞窗口中的“Adress〞项中输入&x,单击“OK〞完成设置;“Memory〞窗口中x的当前取值显示在第1个地址的后。(3)将变量x、y、z分别参加观察窗口:在源程序中双击变量名,再单击鼠标右键,选择“AddtoWatchWindow〞。这时,这3个变量还未作初始化。(4)单步运行2次,在观察窗中观察到变量x、y被赋值。变化的值被显示成红色。同时在“Memory〞窗口中也能观察到x和y值的改变。(5)再单步运行,可观察到z的值被计算出来。双击观察窗口中变量x、y在“Value〞栏中的取值并修改成其他取值,单步运行后观察结果。(6)双击观察窗口中变量x、y在“Value〞栏中的取值,并修改成0;选择菜单Debug->Restart,返回程序起点。(7)重新单步运行程序7.内存映像文件(1)选择菜单Project->BuildOptions…,启动“BuildOptions〞工程设置对话框。(2)单击“Linker〞属性页,在“MapFilename〞项中观察生成的map文件名和路径。(3)单击“取消〞退出。8.对照观察map文件和cmd文件的内容(1)选择菜单File->Open…,将找到C:\ICETEK-F2812-A-EDUlab\DSP281x_examples\Lab0102-CProgram\Debug目录,将文件类型改为“MemoryMapFiles〞,选择CProgram.map文件、翻开。(2)翻开CProgramd文件。(3)程序的入口地址:map文件中“ENTRYPOINTSYMBOL〞中说明了程序入口地址(_c_int00)。(4)内存使用情况:-map文件中“MEMORYCONFIGURATION〞标明了程序占用RAM的使用情况,共占用aaH个存储单元。-观察map文件中的“SECTIONALLOCATIONMAP〞段,可以看出CProgram.obj的入口地址为0x3e801e,这也是main函数的入口地址。-用户堆栈段从400H开始,程序运行到main函数中后,变量x、y、z均开设在栈中。-还能看出程序运行都需要调用rts2800.lib中的哪些模块。9.改变内存分配修改cmd文件中的PAGE0:PROG(R):origin=0x3E8000,length=0x10000改为PAGE0:PROG(R):origin=0x3E9000,length=0x10000重新编译工程,观察map文件中有何变化。10.退出CCS五、实验结果记录1、建立PC机器与DSP仪器之间的来连接,设置软件模式与翻开工程文件:把PC机上的USB线连接到DSP硬件上的相应接口上,翻开电源。然后,启动CC驱动设置窗口,安装软件仿真驱动〔Simulator〕,单击“F2812Simulator〞驱动名,单击“Import〞按钮。完成设置:单击“Close〞,菜单“File〞、“Exit〞,“是〞。然后重新启动CodeComposerStudio2.2,翻开工程文件UseCMD.pjt2、观察c语言程序的特殊设置:“AutoinitModel〞项设置成“Run–time

Autoinitialization〞3、编译源文件,下载可执行程序:(1)单击菜单“Project〞、“RebuildAll〞。执行结果如右图:(2)执行File->LoadProgram,在随后翻开的对话框中选择刚刚建立的UseCMD.out文件。完成后,系统自动翻开源程序文件UseCMD.c。4、翻开观察窗口翻开view菜单下的watchwindows工具,在watch1中的name上分别输入x,y,z三个变量,如图:5、察程序运行结果在“x=1;〞这一行上设置断点。方法是先把光标移动到这一行上,右键选择togglebreakpoint。(1)执行程序〔按F5键〕1次,可观察到watch窗口中x和y的值无变化。如图:(2)单步运行2次〔按F8键〕,在变量窗口中观察到变量x、y被赋值。如图(3)

再单步运行1次〔按F8键〕,在变量窗口中观察到变量z中保存的就是x加上y的值。如图6、成内存映像文件(1)单击菜单“Project〞、“Options…〞,启动“BuildOptions〞工程设置对话框。(2)单击“Linker〞属性页,在“MapFilename〞项中输入需要生成的map文件名,比方可以输入UseCMD.map(3)单击“确定〞,完成设置。(4)选择菜单“Project〞、“RebuildAll〞,重新编译工程,生成新设置的map文件。7、对照观察map文件和cmd文件的内容(1)选择菜单“File〞、“Open…〞,将找到C:\ICETEK-F2812-EDULab\

DSP281x_examples\Lab02-UseCMD目录,将文件类型改为“MemoryMapFiles〞,选择刚刚生成的UseCMD.map文件、翻开。(2)展开工程管理窗中的UseCMD.pjt,双击其中的UseCMDd文件。(3)程序的入口地址:cmd文件的SECTION中指定.text段放到程序区〔PAGE0〕的PRAMH0中,在MEMORY中指定PRAMH0,从内存地址3f8002h开始,长度为1000h;再看map文件中“ENTRYPOINTSYMBOL〞中说明了“c_int00”标号的地址为003f8002h,两者相符。

如下列图所示:(4)内存的占用情况:通过观察map文件中的“MEMORYCONFIGURATION〞段可以了解内存的使用情况。可以看到text段放到程序区〔PAGE0〕的PRAMH0中,并且从其首地址开始。.改变内存分配修改cmd文件中的PRAMH0

:origin=0x3f8002,length=0x001000改为PRAMH0

:origin=0x3f8502,length=0x00500意思是把PRAMH0的首地址入口改为0x3f8002,所占的字节长度为500h。重新编译工程,观察map文件中有何变化。结果如下列图所示:从map文件的描述结果可以看出,“c_int00”标号的地址修改为003f8502h,可以看到PPAMH0的首地址变为了0x3f8002,长度也修改成了500.两者还是相符的。8、题目:如果对第一个实验按上述方法对cmd文件进行修改,重新观察其map文件的变化。过程与结果如下:修改前查看map文件的描述:按上述方法修改cmd文件后,结果如下:可以看到修改后的“c_int00”标号的地址由原来的3f8018h变为了为3f8518h,在MEMORY中指定PRAMH0,由原来的内存地址3f8002h开始到修改后的3f85

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论