1、试验一 CCS使用及DSP基本数学运算第第1页页一、试验目标1熟悉CCS 集成开发环境,掌握工程生成方法;2熟悉SEED-DTK5416 试验环境;3掌握CCS 集成开发环境调试方法;4了解数在计算过程中定标,掌握数定点、浮点表示方法,定点、浮点基本运算以及定点、浮点间相互转换。第第2页页二、试验内容1DSP源文件建立;2DSP程序工程文件建立;3编译与链接设置,生成可执行DSP文件;4进行DSP程序调试与改错;5学习使用CCS集成开发工具调试工具;6观察试验结果;第第3页页三、试验背景知识1.为何DSP运算要做数定标2.数定标方法Q表示法S表示法第第4页页四、试验程序结构说明 1.math.
2、c这个文件中包含了试验关于DSP运算主演函数。主要有:fixedadd(int x,int y):定点加法运算;fixedsub(int x,int y):定点减法运算;fixedmul(int x,int y):定点乘法运算;fixeddiv(int x,int y):定点除法运算;floatadd(double x,double y):浮点加法运算;floatsub(double x,double y):浮点减法运算;floatmul(double x,double y):浮点乘法运算;floatdiv(double x,double y):浮点除法运算;floatfixed(double
3、 x):浮点转定点运算;fixedfloat(int x):定点转浮点运算;第第5页页2.math.cmd文件 DSP链接文件,也叫命令文件。命令文件组成 file1.obj/子目标文件名1file2.obj/子目标文件名2file3.obj/子目标文件名3-o prog.out/连接器操作指令,用来指定输出文件-m prog.m/用来指定MAP文件MEMORY 略 SECTIONS 略 otherlink.cmd第第6页页MEMORY伪指令 MEMORY用来建立目标存放器模型,能够定义目标系统各种类型存放器及容量 MEMORY PAGE 0:name0(attr):origin=consta
4、nt,length=constant name0n(attr):origin=constant,length=constantPAGE 1:name1(attr):origin=constant,length=constant name1n(attr):origin=constant,length=constantPAGE n:namen(attr):origin=constant,length=constant namenn(attr):origin=constant,length=constant第第7页页SECTIONS伪指令 SECTIONS在程序里添加段名。SECTIONS .tex
5、t:全部.text输入段名 load加载地址 run=运行地址 .data:全部.data输入段名 load加载地址 run=运行地址 .bss:全部.bss输入段名 load加载地址 run=运行地址 .other:全部.other输入段名 load加载地址 run=运行地址 第第8页页存放模型说明:.cinit:存放程序中变量初值和常量.const:存放程序中字符常量、浮点常量和用const申明常量.switch:存放程序中switch语句跳转地址表.text:存放程序代码.bss:为程序中全局和静态变量保留存放空间.far:为程序中用far申明全局和静态变量保留空间.stack:为程序系
6、统堆栈保留存放空间,用于保留返回地址、函数间参数传递、存放局部变量和保留中间结果第第9页页.sysmem:用于程序中malloc、calloc、和realoc 函数动态分配存放空间.vectors:中止向量表.data:常数数据,如对变量初始化数据.trap:.cio:第第10页页地址说明链接器为每个输出段都在目标存放器里分配两个地址:一个是加载地址,一个是运行地址 通常情况下两个地址是相同,能够认为输出段只有一个地址,这时就能够不加“run=运行地址”这条语句;有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址分别配置 第第11页页“l
7、oad加载地址”几个写法:首先“load”关键字能够省略 “”能够写成“”“加载地址”能够是:地址值、存放区间名字、PAGE关键词等“run=运行地址”中“=”能够用“”第第12页页3.rts.lib库文件 rts.lib是一个库文件,主要包含了相关C运行环境与对应函数代码。该库文件存放在CCScgtoolslib中。第第13页页4.GEL文件 GEL文件功效是用于初始化DSP,实现对各种存放器初始化。GEL在CCS下有一个菜单,能够依据DSP对象不一样,设置不一样初始化程序。第第14页页不一样DSP程序,其.cmd文件、.lib文件和.gel文件大小一样吗?第第15页页五、试验步骤1硬件连接
8、 将USB仿真器USB插头插入PC机USB插槽中;将 DSP仿 真 器 JTAG插 头 与 SEED-DEC54xx单元J8相连接;开启计算机,当计算机开启后,打开SEED-DTK5416 电源。观察SEED-DTK_IO单元+5V、+3.3V、+15V、-15V电源指示灯是否均亮;若有不亮,请断开电源,检验电源。第第16页页2打开CCS集成开发环境,进入CCS操作环境 第第17页页新建源文件创建一个未著名源文件第第18页页编写源代码并保留设保留源程序名为math.c第第19页页 第第20页页创建其它源程序(如.cmd)可重复上述步骤第第21页页创建或打开一个工程建立新工程,点击Project
9、New第第22页页工程名及路径可任意确定第第23页页点击完成,已新建一个名为DTK-MATH.prj工程,路径为D:ti5000myprojectsDTK-MATH注:不认可汉字路径第第24页页加载源文件到工程 点击Project,选择Add Files to Project,添加math.c、math.cmd、rts.lib文件到工程中。第第25页页添加源文件到工程 在下拉菜单中选择.c点击打开,即可添加源程序到工程中第第26页页 第第27页页一样方法能够添加文件math.cmd、rts.lib到工程文件中 在下面窗口中能够看到math.c、rts.lib文件已经加到工程文件中。第第28页页
10、 第第29页页加载GEL文件 对各种存放器初始化 FileLoad GEL 比如:FileLoad GELCCS-FFTdtk-boot.gel第第30页页文件操作 以下操作可对工程中文件进行打开、删除、查看属性等操作。第第31页页 第第32页页设置编译与连接选项第第33页页设置对应编译参数,普通情况下,按默认值就能够第第34页页进行连接参数设置,设置输出文件名、堆栈大小以及初始化方式 第第35页页设置连接次序。当使用rts.lib时将其放在最终 第第36页页编译 生成目标文件:*.out点击ProjectRebuild all,若正确则生成DTK-math.out;若是修改程序,能够使用Pr
11、oject Build命令第第37页页 第第38页页Load文件并运行 加载文件:Fileload program debugDTK-MATH.out 载入debug文件夹下可执行文件DTK-MATH.out 运行 Debug Run(F5)第第39页页 第第40页页 第第41页页装载完成 第第42页页点击窗口左侧Go Main回到C程序入口 第第43页页进入C程序入口 第第44页页保留调试环境 点击FileWorkspaceSave Workspace保留调试环境,方便下次调试时,不再需要重新进行设置。第第45页页 第第46页页调试工具断点调试,打开CPU与外设存放器观察窗设置:Debug/
12、Breakpoints运行:Debug/Run第第47页页 第第48页页运行程序到第一个断点,在STDout观察窗内看定点运算是否正确;然后再运行程序到第二个断点,观察浮点运算是否正确。再运行程序,观察浮点与定点之间转换是否正确。第第49页页第第50页页观察CPU存放器、Memory第第51页页在图示窗口中可观察到CPU个存放器值和外围存放器值第第52页页查看数据:View/Memory 第第53页页调试工具(Debug)在下拉菜单中可选择复位CPU、进入C主程序、重新开始等操作。第第54页页 第第55页页探测点调试Probe Points 查看程序执行到某一位置时各存放器值 设置:Debug
13、/Probe points 与断点区分:第第56页页 第第57页页这是CCS弹出相关Probe Points设置表,进行以下设置 第第58页页六试验说明1.源程序错误 在函数fixed_add()中z定义未加“;”号;函数float_add()中号缺右边而未完整。2.链接错误 DSP空间分配重合DATA:origin=3000h,length=0120h /*Internal Data RAM */STACK:origin=3100h,length=0500h /*Stack Memory Space */未给系统分配.stack堆栈段/.stack STACK PAGE 1第第59页页六试验
14、说明1.源程序错误在函数fixed_add()中z定义未加“;”号;函数float_add()中号缺右边而未完整。2.链接错误DSP空间分配重合DATA:origin=3000h,length=0120hSTACK:origin=3100h,length=0500h 未给系统分配.stack堆栈段/.stack STACK PAGE 1第第60页页附件一:程序解析第第61页页程序结构#define Qx 4#define Qy 4#define Qz 4void main()fixed_add(1556,40);fixed_sub(334,222);fixed_mul(188,188);fix
15、ed_div(188,18);float_add(2.5e3,1.2e3);float_sub(2.0e2,3.0e2);float_mul(2.0e2,3.0e2);float_div(2.0e4,2.0e2);float_fixed(9.735e1);fixed_float(1557);第第62页页1.加法/减法运算C语言定点模拟设浮点加法运算表示式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最主要一点就是必须确保两个操作数定标值一样。若二者不一样,则在做加法/减法运算前先进行小数点调整。为确保运算精度,需使Q值小数调整为与另一个数Q值一样大。第第63页页
16、结果不超出结果不超出16位表示范围位表示范围设xQ值为Qx,yQ值为Qy,且QxQy,加法/减法结果z定标值为Qz,则:zx+y第第64页页定点加法能够描述为:int x,y,z;long temp;/*暂时变量*/tempy(QxQz),若QxQzz(int)(temp(QzQx),若QxQz第第65页页举例:定点加法。设x0.5,y3.1,则浮点运算结果为zx+y0.5+3.13.6;Qx15,Qy13,Qz13,则定点加法为:x16384;y25395;temp253952)29491;因为zQ值为13,所以定点值z29491即为浮点值z29491/81923.6 第第66页页void
17、fixed_add(int x,int y)long temp;int z;temp=y=Qz)z=temp(Qx-Qz);else z=temp(Qz-Qx);fprintf(stdout,the result of fixed_add was%i!n,z);第第67页页举例:定点减法。设x3.0,y3.1,则浮点运算结果为zx-y3.0-3.1-0.1;Qx13,Qy13,Qz15,则定点减法为:x24576;y25395;temp25395;tempx-temp24576-25395-819;因为QxQz,故 z(int)(-8192)-3276。因为zQ值为15,所以定点值z-3276
18、即为浮点值z-3276/32768-0.1 第第68页页void fixed_sub(int x,int y)long temp;int z;temp=y=Qz)z=temp(Qx-Qz);else z=temp(Qx+Qy-Qz);第第71页页举例:定点乘法。设x=18.4,y=36.8,则浮点运算值为z=18.436.8=677.12;依据上节,得Qx=10,Qy=9,Qz=5,所以有:x=18841;y=18841;temp=18841L;z=(18841L*18841)(10+9-5)=354983281L14=21666;因为z定标值为5,故定点 z=21666即为浮点 z=2166
19、6/32=677.06 第第72页页void fixed_mul(int x,int y)long temp;int z;temp=(long)x;z=(temp*y)(Qx+Qy-Qz);fprintf(stdout,the result of fixed_sub was%i!n,z);第第73页页3.除法运算C语言定点模拟设浮点除法运算表示式为:float x,y,z;z=x/y;假设经过统计后被除数x定标值为Qx,除数y定标值为Qy,商z定标值为Qz,则:z=x/y 第第74页页定点表示除法为:int x,y,z;long temp;temp=(long)x;z=(temp(Qz-Qx+
20、Qy)/y;第第75页页举例:定点除法。设x=18.4,y=36.8,浮点运算值为z=x/y=18.4/36.8=0.5;依据上节,得Qx=10,Qy=9,Qz=15;所以有:x=18841,y=18841;temp=(long)18841;z=(18841L(15-10+9)/18841=308690944L/18841=16384;因为商z定标值为15,所以定点z=16384即为浮点 z=16384/215=0.5 第第76页页void fixed_div(int x,int y)long temp;int z;temp=(long)x;z=(temp PRAM PAGE 0 .text PRAM PAGE 0 .vectors VECS PAGE 0 /.stack STACK PAGE 1 .trap SCRATCH PAGE 1 .const EXRAM PAGE 1 .data EXRAM PAGE 1 .bss EXRAM PAGE 1 .cio EXRAM PAGE 1 .switch EXRAM PAGE 1第第80页页