1、1实验报告实验中心 电子信息技术实验中心 专业年级 电子信息科学与技术 2008级实验课程 DSP 原理及应用实验 姓 名 赵正军实验名称 实验一、编写一个以 C 语言为基础的 DSP 程序学 号 200807031113提交日期 2011-05-27 成 绩一、实验目的1学习用标准 C 语言编制程序;了解常用的 C 语言程序设计方法和组成部分。2学习编制连接命令文件,并用来控制代码的连接。3学会建立和改变 map 文件,以及利用它观察 DSP 内存使用情况的方法。4熟悉使用软件仿真方式调试程序。二、实验设备PC 兼容机一台,操作系统为 WindowsXP,安 CCS 软件。三、实验原理1标准
2、 C 语言程序CCS 支持使用标准 C 语言开发 DSP 应用程序。当使用标准 C 语言编制的程序时,其源程序文件名的后缀应为.c(如:volume.c)。CCS 在编译标准 C 语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标 DSP 的可执行代码。最后生成的是 coff 格式的可下载到 DSP 中运行的文件,其文件名后缀为.out。由于使用 C 语言编制程序,其中调用的标准 C 的库函数由专门的库提供,在编译连接时编译系统还负责构建 C 运行环境。所以用户工程中需要注明使用C 的支持库。2命令文件的作用命令文件(文件名后缀为 cmd)为链接程序提供程序和数据在具体 DSP 硬
3、件中的位置分配信息。通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在 DSP 所管理的内存中。命令文件也为链接程序提供了 DSP外扩存储器的描述。在程序中使用 CMD 文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。3内存映射(map)文件的作用一般地,我们设计、开发的 DSP 程序在调试好后,要固化到系统的 ROM 中。为了更精确地使用 ROM 空间,我们就需要知道程序的大小和位置,通过建立目标程序的 map 文件可以了解 DSP 代码的确切信息。当需要更改程序和数据的大2小和位置时,就要适当修改 cmd
4、 文件和源程序,再重新生成 map 文件来观察结果。另外,通过观察 map 文件,可以掌握 DSP 存储器的使用和利用情况,以便进行存储器方面的优化工作。4源程序分析四、实验内容与步骤1实验准备建立 PC 机器与 DSP 仪器之间的来连接,设置软件模式。2建立新的工程文件(1)双击桌面上图标,启动 Code Composer Studio 2.21。(2)进行以下设置(如图 2-2):3编辑输入源程序(1)C 语言程序-先新建源程序窗口:- 输入源程序:int x,y,z;main()x=1; y=2;while ( 1 )z=x+y; 3图 2-3 新建源文件-保存源程序为 CProgram
5、.c:(2)连接命令文件- 如同第(1)步操作,建立空的源程序窗口。-输入连接命令文件内容:-l rts2800.lib-stack 400h-heap 100MEMORYPAGE 0 : PROG(R) : origin = 0x3E8000, length = 0x10000PAGE 0 : BOOT(R) : origin = 0x3FF000, length = 0xFC0PAGE 0 : RESET(R) : origin = 0x3FFFC0, length = 0x2PAGE 0 : VECTORS(R) : origin = 0x3FFFC2, length = 0x3EPAG
6、E 1 : M0RAM(RW) : origin = 0x000000, length = 0x400 PAGE 1 : M1RAM(RW) : origin = 0x000400, length = 0x400PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000 图 2-4 保存为 c 文件PAGE 1 : H0RAM(RW) : origin = 0x3F8000, length = 0x2000SECTIONS/* 22-bit program sections */.reset : RESET, PAGE = 0vector
7、s : VECTORS, PAGE = 0.pinit : PROG, PAGE = 04.cinit : PROG, PAGE = 0.text : PROG, PAGE = 0/* 16-Bit data sections */.const : L0L1RAM, PAGE = 1.bss : L0L1RAM, PAGE = 1.stack : M1RAM, PAGE = 1.sysmem : M0RAM, PAGE = 1/* 32-bit data sections */.ebss : H0RAM, PAGE = 1.econst : H0RAM, PAGE = 1 .esysmem :
8、 H0RAM, PAGE = 1-l rts2800.lib-如同第(1)步操作,将文件存为:C:ICETEK-F2812-A-EDUlabDSP281x_examplesLab0102-CProgram CProgram.cmd(3) 将上述编译的源程序加入工程 CProgram.pjt。4编译源文件、下载可执行程序(1) 单击菜单“Project” 、 “Rebuild All”。(2) 执行 FileLoad Program ,在随后打开的对话框中选择刚刚建立的C:ICETEK-F2812-EDULabLab0102-CProgramdebugCProgram.out 文件。完成后,系统
9、自动打开一个反汇编窗口“Disassembly” ,并在其中指示程序的入口地址为“_c_int00” 。5打开观察窗口开启 CPU 寄存器观察窗口:单击菜单 View-Registers-Core。6观察程序运行结果这时,在“Disassembly”代表程序运行位置的绿色箭头指向程序的入口地址,程序将从此开始执行。(1) 选择菜单中 Debug-Go Main,CCS 自动打开 CProgram.c,程序会停在用户主程序入口 main 上,这从反汇编窗口和 CProgram.c 窗口中的指示箭头位置可以看出。(2) 在内存观察窗口中观察变量的值:选择“View”菜单中“Memory” 项,在“
10、Memroy Window Options”窗口中的“Adress”项中输入 ” 这一行上设置断点。 方法是先把光标移动到这一行上, 右键选择 toggle breakpoint。(1)执行程序(按 F5 键)1 次,可观察到 watch 窗口中 x 和 y 的值无变化。 如图:(2)单步运行 2 次(按 F8 键) ,在变量窗口中观察到变量 x、y 被赋值。如图(3) 再单步运行 1 次(按 F8 键) ,在变量窗口中观察到变量 z 中保存的就是 x 加上 y 的值。如图6、成内存映像文件 (1)单击菜单“Project” 、 “Options” ,启动“Build Options”工程设置
11、对话框。 (2)单击“Linker”属性页,在“Map Filename”项中输入需要生成的 map 文件名,比如可以输入 UseCMD.map 7(3)单击“确定” ,完成设置。 (4)选择菜单“Project” 、 “Rebuild All” ,重新编译工程,生成新设置的 map 文件。 7、对照观察 map 文件和 cmd 文件的内容 (1)选择菜单“File” 、 “Open” ,将找到 C: ICETEK-F2812-EDULab DSP281x_examples Lab02-UseCMD 目录,将文件类型改为“Memory Map Files” ,选择刚刚生成的 UseCMD.ma
12、p 文件、打开。(2)展开工程管理窗中的 UseCMD.pjt,双击其中的 UseCMD.cmd 文件。 (3)程序的入口地址: cmd 文件的 SECTION 中指定.text 段放到程序区 (PAGE 0) 的 PRAMH0 中,在 MEMORY 中指定 PRAMH0,从内存地址 3f8002h 开始,长度为 1000h;再看 map 文件中“ENTRY POINT SYMBOL”中说明了“c_int00”标号的地址为 003f8002h,两者相符。 如下图所示:(4)内存的占用情况:通过观察 map 文件中的“MEMORY CONFIGURATION”段可以了解内存的使用情况。 可以看到
13、 text 段放到程序区 (PAGE 0) 的 PRAMH0 中,并且从其首地址开始。改变内存分配 修改 cmd 文件中的 PRAMH0 : origin = 0x3f8002, length = 0x001000 改为 PRAMH0 : origin = 0x3f8502, length = 0x00500 意思是把 PRAMH0 的首地址入口改为 0x3f8002,所占的字节长度为 500h。重新编译工程,观察 map 文件中有何变化。结果如下图所示:从 map 文件的描述结果可以看出, “c_int00”标号的地址修改为 003f8502h,可以看到 PPAMH0 的首地址变为了 0x3
14、f8002,长度也修改成了 500. 两者还是相符的。8、题目:如果对第一个实验按上述方法对 cmd 文件进行修改,重新观察其map 文件的变化。过程与结果如下: 修改前查看 map 文件的描述:8按上述方法修改 cmd 文件后,结果如下:可以看到修改后的“c_int00”标号的地址由原来的 3f8018h 变为了为 3f8518h,在 MEMORY 中指定 PRAMH0,由原来的内存地址 3f8002h 开始到修改后的 3f8502h 开始,长度为 变为了 500,text 段也在程序区 (PAGE 0) 的 PRAMH0 中,但不是从它的首地址开始,但也由原来的 3f8018h 变为了为
15、3f8518h,同样增加了 500,说明了修改 cmd 文件可以安排程序和数据在 DSP 内存资源中的分配和位置; 通过观察 map 文件可以观察到修改后的程序和数据所占用的实际尺寸和地址。六、实验总结1、通过本实验,基本上学会了怎样建立和改变 map 文件以及如何利用map 文件观察 DSP 内存使用情况的方法,学会了编制命令文件控制代码的连接的方法,进一步熟悉了使用软件仿真方式调试程序的方法。通过实验可以发现, 修改 cmd 文件可以安排程序和数据在 DSP 内存资源中的分配和位置; map 文件中描述了程序和数据所占用的实际尺寸和地址。2、实验过程中发现的问题及解决办法:A. 编译程序的时候发现了一个警告错误,具体原因是因为软件的版本漏洞问题,后来使用新的编译程序进行编译时,能够成功编译。B. 请修改程序中的.cmd 文件,熟悉一下哪些地址空间是可用的,哪些是不可用的?3、实验心得与体会:机器和软件能告诉我们怎么去做,这是前人帮我们建立的基础,而我们可以通过设置参数,需要告诉机器怎么去做。适当修改 cmd 文件和源程序,能更改程序和数据的大小和位置,然后再通过观察机器自动生成的 map 文件可以了解 DSP 代码的确切信息,从而了解到程序的大小和位置,为了更精确地使用 ROM 空间,这也是工程上的需要。