DSP本科实验教材 实验六C语言编程与优化(乘法一累加运算程序设计) 一、目的 1.通过创建一个用C语言编程的应用工程,学习DSPC5000C的编程方法,掌握C语言 编程的基本框架和程序的组织。 2.掌握CCS所提供的4级文件优化选项(-O0、-01、-O2、-O3),观察选用不同优化选项 时的执行速度和代码长度。 3.了解C5000C编程的一些优化方法。 二、内容 设有两个数组x和h,己知 intx[10]={1,2,3,4,5,6,7,8.9,10} inth[10]={11,12,13,14,15,16,17,18,19,20}, 用C语言金写程水,计算y=龙功 i=l 1.采用地址指针编程,基本程序如下: #define N10 intx0={1,2,3,4,5,6,7,8,9,10} inth0={11,12,13,14,15,16,17,18,19,20 int *a=&x[0]; int *b=&h[0]; int sum: void main() int i;sum=0; for(i=0;i<N;i++) Sum+=*at+**b++; } 2.不采用地址指针编程,基本程序如下: #define N 10 intx0={1,2,3,4,5,6,7,8,9,10} inth0={11,12,13,14,15,16,17,18,19,20}: int sum: void main() { int i;sum=0; for(i=0:I<N:i++)
DSP 本科实验教材 15 实验六 C 语言编程与优化(乘法—累加运算程序设计) 一、 目的 1.通过创建一个用 C 语言编程的应用工程,学习 DSPC5000 C 的编程方法,掌握 C 语言 编程的基本框架和程序的组织。 2.掌握 CCS 所提供的 4 级文件优化选项(-O0、-O1、-O2、-O3),观察选用不同优化选项 时的执行速度和代码长度。 3.了解 C5000 C 编程的一些优化方法。 二、内容 设有两个数组 x 和 h,已知 int x[10] = {1,2,3,4,5,6,7,8,9,10}, int h[10] = {11,12,13,14,15,16,17,18,19,20}, 用 C 语言编写程序,计算 y = 10 1 i i i x h = ∑ 1.采用地址指针编程,基本程序如下: #define N 10 int x[] = {1,2,3,4,5,6,7,8,9,10}; int h[] = {11,12,13,14,15,16,17,18,19,20}; int *a = &x[0]; int *b = &h[0]; int sum; void main() { int i; sum=0; for(i = 0; i < N; i++) { sum+= *a++ * *b++; } ) 2.不采用地址指针编程,基本程序如下: #define N 10 int x[] = {1,2,3,4,5,6,7,8,9,10}; int h[] = {11,12,13,14,15,16,17,18,19,20}; int sum; void main() { int i; sum=0; for(i = 0; I < N; i++)
DSP本科实验教材 sum+=x[N]h[N]; } 三、实验步骤 1.编写实验程序 实验六只提供中断矢量处理程序vectors.asm及命令文件test6.cmd(参见文件夹“test6”), 不提供主程序,由实验者自己编写主程序。参考上列程序,在任意的编辑环境下编写C语言程 序。要求如下: (1)采用地址指针编程,将全局指针改为局部指针,然后运行,观察编译后的汇编程序能 否组成块循环或单指令循环,并观看程序的执行速度。 (2)不采用地址指针编程,在fo循环体中使用一个局部变量,然后运行,观察编译后的 汇编程序能否组成块循环或单指令循环,并观看程序的执行速度。 2.在CCS下建立工程 建立一个新的工程(project),向工程添加各类型文件,包括C语言主程序、C头文件(如 果有的话)、中断矢量处理程序vectors.asm和命令文件test6.cmd。因为本实验的工程是基于C 语言编写的,所以还需要添加运行时支持库“tsib”文件。该文件存放在CCS的安装目录 “c5400八cgtools\lib”下。注意:在添加文件对话框的“文件类型”下拉列表中,要选择“Object and Library Files(*.o,*.I*)”。 3.进行编译、汇编、连接和调试。 4.选择CCS主菜单“View”下的“Watch Window”命令,CCS会弹出一个观察窗口,用于 显示运行时所观察的变量值。在观察窗中选择“Watch1”标签,单击“Name”列的表达式图标 三,输入要观察的变量,例如“y”,运行后就可以看到它的值,如图6-1所示。 Name Value Type R... y 935 int dec 品Watch Locals Watch 1 图6-1观察窗口 5.使用CCS的断点和profile工具,观察选用不同优化选项(无、-O0、-O1、-O2、-O3) 时的执行速度和代码长度。 具体实现的方法是:选择CCS主菜单“Project'”下的“Built Options”命令,打开Built Options 窗口,如图6-2所示。在“Compiler'”选项的“Basic”下,分别选择“Opt Level”中的“None、 -O0、-O1、-O2、-O3”。每选择其中的一种,都要重新编译、汇编和连接,并且重新装载程序代 码,然后使用CCS的断点和profile中的剖析时钟,观察运行速度的变化情况。 选择CCS主菜单“View”下的“Mixed Source/ASM”,可以在CCS的编辑窗口中同时看到 C程序所对应的汇编指令及机器码,进而查看在选用不同优化选项(无、-O0、-01、-O2、-03) 时的代码长度变化情况
DSP 本科实验教材 16 { sum+= x[N] * h[N]; } } 三、实验步骤 1.编写实验程序 实验六只提供中断矢量处理程序 vectors.asm 及命令文件 test6.cmd(参见文件夹“test6”), 不提供主程序,由实验者自己编写主程序。参考上列程序,在任意的编辑环境下编写 C 语言程 序。要求如下: (1)采用地址指针编程,将全局指针改为局部指针,然后运行,观察编译后的汇编程序能 否组成块循环或单指令循环,并观看程序的执行速度。 (2)不采用地址指针编程,在 for 循环体中使用一个局部变量,然后运行,观察编译后的 汇编程序能否组成块循环或单指令循环,并观看程序的执行速度。 2.在 CCS 下建立工程 建立一个新的工程(project),向工程添加各类型文件,包括 C 语言主程序、C 头文件(如 果有的话)、中断矢量处理程序 vectors.asm 和命令文件 test6.cmd。因为本实验的工程是基于 C 语言编写的,所以还需要添加运行时支持库“rts.lib”文件。该文件存放在 CCS 的安装目录 “c5400\cgtools\lib”下。注意:在添加文件对话框的“文件类型”下拉列表中,要选择“Object and Library Files(*.o,*.l*)”。 3.进行编译、汇编、连接和调试。 4.选择 CCS 主菜单“View”下的“Watch Window”命令,CCS 会弹出一个观察窗口,用于 显示运行时所观察的变量值。在观察窗中选择“Watch1”标签,单击“Name”列的表达式图标 ,输入要观察的变量,例如“y”,运行后就可以看到它的值,如图 6-1 所示。 图 6-1 观察窗口 5.使用 CCS 的断点和 profile 工具,观察选用不同优化选项(无、-O0、-O1、-O2、-O3) 时的执行速度和代码长度。 具体实现的方法是:选择 CCS 主菜单“Project”下的“Built Options”命令,打开 Built Options 窗口,如图 6-2 所示。在“Compiler”选项的“Basic”下,分别选择“Opt Level”中的“None、 -O0、-O1、-O2、-O3”。每选择其中的一种,都要重新编译、汇编和连接,并且重新装载程序代 码,然后使用 CCS 的断点和 profile 中的剖析时钟,观察运行速度的变化情况。 选择 CCS 主菜单“View”下的“Mixed Source/ASM”,可以在 CCS 的编辑窗口中同时看到 C 程序所对应的汇编指令及机器码,进而查看在选用不同优化选项(无、-O0、-O1、-O2、-O3) 时的代码长度变化情况
DSP本科实验教材 Build Options for test5.pjt ②☒ General Compiler Linker Link Order Fg-g-o3-fr"℃:lti5000 myprojects\test5小Debug”-d"DEBUG" Category -Basic- Basic Processor Version Advanced Feedback Generate Debug Info: Full Symbolic Debug( Files Assembly Opt Level: File (-03) Parser Program Level Opt.: Preprocesso None m☐习 确定 取消 帮助 图6-2 Built Options窗口 表61选用不同优化选项时的代码长度和执行时间情况 使用的优化选项 代码长度(字) 执行时间(CPU时钟周期) 无 00 01 02 03 四、实验报告的要求 1.说明该工程中每个文件的作用和功能。回答下列问题: (1)在该工程中如果没有“ts.lib”文件,能否进行编译、汇编和连接? (2)在该工程中cint00的作用是什么? (3)说明中断矢量处理程序vectors.asm和C语言主程序是怎样进行接口的? (4)当采用地址指针编程时,如果将全局指针改为局部指针,为什么会提高程序的执行速 度? (5)当不采用地址指针编程时,如果在for循环体中使用一个局部变量,为什么会提高程 序的执行速度? (6)比较采用地址指针编程和不采用地址指针编程,编译后的汇编程序有什么区别?执行 速度有无变化? 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。 3.填写表6-1。 17
DSP 本科实验教材 17 图 6-2 Built Options 窗口 表 6-1 选用不同优化选项时的代码长度和执行时间情况 使用的优化选项 代码长度(字) 执行时间(CPU时钟周期) 无 O0 O1 O2 O3 四、实验报告的要求 1.说明该工程中每个文件的作用和功能。回答下列问题: (1)在该工程中如果没有“rts.lib”文件,能否进行编译、汇编和连接? (2)在该工程中 c_int00 的作用是什么? (3)说明中断矢量处理程序 vectors.asm 和 C 语言主程序是怎样进行接口的? (4)当采用地址指针编程时,如果将全局指针改为局部指针,为什么会提高程序的执行速 度? (5)当不采用地址指针编程时,如果在 for 循环体中使用一个局部变量,为什么会提高程 序的执行速度? (6)比较采用地址指针编程和不采用地址指针编程,编译后的汇编程序有什么区别?执行 速度有无变化? 2.总结上机调试步骤,调试情况,调试中遇到的问题是如何解决的。 3.填写表 6-1
DSP本科实验教材 实验七混合编程实验 一、目的 1.通过创建一个简单的信号处理应用工程,学习用C语言和汇编语言混合编程的方法,掌 握混合编程程序的基本框架和程序的组织。 2.学习使用CCS的探测点(Probe Point)、图表(Graph)和文件I/O(File I/O)等调试工具。 二、内容 该实验开发并运行一个C语言和汇编语言混合编程的程序,指导学生如何建立混合编程的 工程,如何在C程序中调用汇编语言子程序。学习使用CCS的探测点(Probe Point)、图表(Graph) 和文件I/O(File I/O)等调试工具。 本实验的工程中含有下列三个函数: (1)主函数main 在显示一条提示“volume example started”之后,进入无限循环,不断调用两个函数datalO 和processing。 (2)processing函数 对输入缓冲区的每个采样值乘以一个增益值“gai”,,并将结果存放到输出缓冲区中。该函 数还调用汇编子程序load.asm。load.asm根据processing传递过来的参数processingLoad来消耗 指令周期,用以模拟复杂信号处理算法在时间上的消耗。 (3)dataIO函数 不执行任何实质性操作而直接返回。实验者可以在该函数的位置上,通过CCS中的Probe Point(探针)工具,从PC机文件中读取数据到inp_buffer中,作为processing函数的输入参数。 三、实验步骤 1.将C:\ti\tutorial\sim54 xx\volume1文件夹复制到D1自己命名的文件夹下。 2.进入CCS,打开volumel.pjt。 3.在工程视图中将所有“+”打开,如图7-1所示,可以看到此工程中含有以下文件: (1)volume.c:C主程序 (2)volume.h:头文件 (3)load.asm:一个汇编循环程序,被C程序调用。调用时带有一个参数(argument) (4)vectors.asm:在中断向量表中定义了一个复位入口点。 (5)volume.cmd:命令文件,将段定位到存储器。 (6)rts.ib:运行支持库,提供DSP的C运行支持。 (7)c5416sim.gel:GEL文件,用来扩展DSP的功能。 4.查看volume.c源文件,分析主程序完成的功能。 5.添加Probe Point,.将PC数据文件与探测点关联。 探测点Probe Point是开发算法的一个非常有用的工具,它的主要功能如下: (1)将PC机文件中的数据传送到DSP目标板上的内存中,以供算法使用。 (2)将DSP目标板上的输出数据传送到PC机文件中,以供分析之用。 (3)更新窗口内容,实时反映数据的变化。 18
DSP 本科实验教材 18 实验七 混合编程实验 一、目的 1.通过创建一个简单的信号处理应用工程,学习用 C 语言和汇编语言混合编程的方法,掌 握混合编程程序的基本框架和程序的组织。 2.学习使用 CCS 的探测点(Probe Point)、图表(Graph)和文件 I/O(File I/O)等调试工具。 二、内容 该实验开发并运行一个 C 语言和汇编语言混合编程的程序,指导学生如何建立混合编程的 工程,如何在 C 程序中调用汇编语言子程序。学习使用 CCS 的探测点(Probe Point)、图表(Graph) 和文件 I/O(File I/O)等调试工具。 本实验的工程中含有下列三个函数: (1)主函数 main 在显示一条提示“volume example started”之后,进入无限循环,不断调用两个函数 dataIO 和 processing。 (2)processing 函数 对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果存放到输出缓冲区中。该函 数还调用汇编子程序 load.asm。load.asm 根据 processing 传递过来的参数 processingLoad 来消耗 指令周期,用以模拟复杂信号处理算法在时间上的消耗。 (3)dataIO 函数 不执行任何实质性操作而直接返回。实验者可以在该函数的位置上,通过 CCS 中的 Probe Point(探针)工具,从 PC 机文件中读取数据到 inp_buffer 中,作为 processing 函数的输入参数。 三、实验步骤 1.将 C:\ti\tutorial\sim54xx\volume1 文件夹复制到 D:\自己命名的文件夹下。 2.进入 CCS,打开 volume1.pjt。 3.在工程视图中将所有“+”打开,如图 7-1 所示,可以看到此工程中含有以下文件: (1)volume.c:C 主程序 (2)volume.h:头文件 (3)load.asm:一个汇编循环程序,被 C 程序调用。调用时带有一个参数(argument) (4)vectors.asm:在中断向量表中定义了一个复位入口点。 (5)volume.cmd:命令文件,将段定位到存储器。 (6)rts.lib:运行支持库,提供 DSP 的 C 运行支持。 (7)c5416sim.gel:GEL 文件,用来扩展 DSP 的功能。 4.查看 volume.c 源文件,分析主程序完成的功能。 5.添加 Probe Point,将 PC 数据文件与探测点关联。 探测点 Probe Point 是开发算法的一个非常有用的工具,它的主要功能如下: (1)将 PC 机文件中的数据传送到 DSP 目标板上的内存中,以供算法使用。 (2)将 DSP 目标板上的输出数据传送到 PC 机文件中,以供分析之用。 (3)更新窗口内容,实时反映数据的变化
DSP本科实验教材 Fles 与白c3les -0c5402cm.0l g-当volume1.p(Debu C白Dependent Project -D5P/BI05 Config -C白Gonerated File5 白Indude 目volurie.h 白Lbraries 因代sb 白ource 日bod.am vactore.acm volune.c -国olume.cnd D 图7-1工程视图 本实验在Simulator环境下,使用探测点Probe Point将PC机上的数据文件sine.dat送往DSP 目标程序作为测试数据,同时,使用断点在到达Probe Point时自动更新所有打开的窗口,这些 窗口包括输入/输出数据的图表等。 具体的实验步骤如下: (I)双击Project工具栏上的Rebulid All图标,重新生成程序。 (2)执行主菜单“File”中的“LoadProgram”命令,选择Volume.out并打开。 (3)在工程视图中双击Volume.c以在右边的编辑窗口中显示源代码。 (4)将光标放在volume.c程序中的主函数dataIO()那一行上。 (S)在Project工具栏上双击“Probe Point'”按钮,添加Probe Point。 (6)执行主菜单命令“File”中的“File I/O”,出现File I/O对话框,如图7-2所示。在对 话框中选择输入/输出文件。 File I/o File Input File Output C:\ti5000\myprojects\volumellsine.dat Add里ile 且emove File 反rap Around Probe Not Connected Page Data 习 Address inp_buffer Length 100 add Probe Point 确定 取消 应用) 帮助 图7-2 File L/O商▣ (7)单击“File Input'”栏,再单击“Add File”按钮。 (8)选择sine.dat文件,此文件与volume.c文件在同一目录中。 (9)单击“Open”按钮,将文件添加到File/LO列表中。此时将出现一个控制窗口,如图 7-3所示。可以在运行程序时使用这个窗口来控制数据文件的开始、停止、前进、后退等操作。 (10)在File I/O对话框中的Address域填入inp buffer,在Length域填入l10O,同时将Wrap Around框选中(如图7-2所示)。其中: 0
DSP 本科实验教材 19 本实验在 Simulator 环境下,使用探测点 Probe Point 将 PC 机上的数据文件 sine.dat 送往 DSP 目标程序作为测试数据,同时,使用断点在到达 Probe Point 时自动更新所有打开的窗口,这些 窗口包括输入/输出数据的图表等。 具体的实验步骤如下: (1)双击 Project 工具栏上的 Rebulid All 图标,重新生成程序。 (2)执行主菜单“File”中的“LoadProgram”命令,选择 Volume.out 并打开。 (3)在工程视图中双击 Volume.c 以在右边的编辑窗口中显示源代码。 (4)将光标放在 volume.c 程序中的主函数 dataIO()那一行上。 (5)在 Project 工具栏上双击“Probe Point”按钮,添加 Probe Point。 (6)执行主菜单命令“File”中的“File I/O”,出现 File I/O 对话框,如图 7-2 所示。在对 话框中选择输入/输出文件。 图 7-2 File I/O 窗口 (7)单击“File Input”栏,再单击“Add File”按钮。 (8)选择 sine.dat 文件,此文件与 volume.c 文件在同一目录中。 (9)单击“Open”按钮,将文件添加到 File I/O 列表中。此时将出现一个控制窗口,如图 7-3 所示。可以在运行程序时使用这个窗口来控制数据文件的开始、停止、前进、后退等操作。 (10)在 File I/O 对话框中的 Address 域填入 inp_buffer,在 Length 域填入 100,同时将 Wrap Around 框选中(如图 7-2 所示)。其中: