实验一CCS使用及DSP基本数学运算.ppt

上传人:tia****nde 文档编号:2564175 上传时间:2019-11-27 格式:PPT 页数:80 大小:5.34MB
返回 下载 相关 举报
实验一CCS使用及DSP基本数学运算.ppt_第1页
第1页 / 共80页
实验一CCS使用及DSP基本数学运算.ppt_第2页
第2页 / 共80页
实验一CCS使用及DSP基本数学运算.ppt_第3页
第3页 / 共80页
点击查看更多>>
资源描述
实验一 CCS使用及DSP基本数学运算,一、实验目的 1熟悉CCS 集成开发环境,掌握工程的生成方法; 2熟悉SEED-DTK5416 实验环境; 3掌握CCS 集成开发环境的调试方法; 4了解数在计算过程中的定标,掌握数的定点、浮点表示方法,定点、浮点基本运算以及定点、浮点间的相互转换。,二、实验内容 1DSP源文件的建立; 2DSP程序工程文件的建立; 3编译与链接的设置,生成可执行的DSP文件; 4进行DSP程序的调试与改错; 5学习使用CCS集成开发工具的调试工具; 6观察实验结果;,三、实验背景知识 1.为什么DSP运算要做数的定标 2.数的定标方法 Q表示法 S表示法,四、实验程序结构说明 1.math.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 x):浮点转定点运算; fixedfloat(int x):定点转浮点运算;,2.math.cmd文件 DSP的链接文件,也叫命令文件 。 命令文件的组成 file1.obj /子目标文件名1 file2.obj /子目标文件名2 file3.obj /子目标文件名3 - o prog.out /连接器操作指令,用来指定输出文件 - m prog.m /用来指定MAP文件 MEMORY 略 SECTIONS 略 otherlink.cmd,MEMORY伪指令 MEMORY用来建立目标存储器的模型,可以定义目标系统的各种类型的存储器及容量 MEMORY PAGE 0:name0(attr):origin = constant,length = constant name0n(attr):origin = constant,length = constant PAGE 1:name1(attr):origin = constant,length = constant name1n(attr):origin = constant,length = constant PAGE n:namen(attr):origin = constant,length = constant namenn(attr):origin = constant,length = constant ,SECTIONS伪指令 SECTIONS在程序里添加段名。 SECTIONS .text:所有.text输入段名 load加载地址 run =运行地址 .data:所有.data输入段名 load加载地址 run =运行地址 .bss:所有.bss输入段名 load加载地址 run =运行地址 .other:所有.other输入段名 load加载地址 run =运行地址 ,存储模型说明: .cinit:存放程序中的变量初值和常量 .const:存放程序中的字符常量、浮点常量和用const声明的常量 .switch:存放程序中switch语句的跳转地址表 .text:存放程序代码 .bss:为程序中的全局和静态变量保留存储空间 .far:为程序中用far声明的全局和静态变量保留空间 .stack:为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果,.sysmem:用于程序中的malloc 、calloc 、和realoc 函数动态分配存储空间 .vectors:中断向量表 .data:常数数据,如对变量的初始化数据 .trap: .cio:,地址说明 链接器为每个输出段都在目标存储器里分配两个地址:一个是加载地址,一个是运行地址 通常情况下两个地址是相同的,可以认为输出段只有一个地址,这时就可以不加“run=运行地址”这条语句; 有时需要将两个地址分开,比如将程序加载到FLASH,然后放到RAM中高速运行,这就用到了运行地址和加载地址的分别配置,“load加载地址”的几种写法: 首先“load”关键字可以省略 “”可以写成“” “加载地址”可以是:地址值、存储区间的名字、PAGE关键词等 “run =运行地址”中的“=”可以用“”,3.rts.lib库文件 rts.lib是一个库文件,主要包含了有关C的运行环境与相应的函数的代码。 该库文件存放在CCS的cgtoolslib中 。,4. GEL文件 GEL文件的功能是用于初始化DSP,实现对各种寄存器的初始化。 GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。,不同的DSP程序,其.cmd文件、.lib文件和.gel文件大小一样吗?,五、实验步骤 1硬件连接 将USB仿真器的USB插头插入PC机的USB插槽中;将DSP仿真器的JTAG插头与SEED-DEC54xx单元的J8相连接;启动计算机,当计算机启动后,打开SEED-DTK5416 的电源。观察SEED-DTK_IO单元的+5V、+3.3V、+15V、-15V的电源指示灯是否均亮;若有不亮的,请断开电源,检查电源。,2打开CCS集成开发环境,进入CCS的操作环境,新建源文件 创建一个未知名的源文件,编写源代码并保存 设保存源程序名为math.c,创建其它源程序(如.cmd)可重复上述步骤,创建或打开一个工程 建立新工程,点击ProjectNew,工程名及路径可任意确定,点击完成,已新建一个名为DTK-MATH.prj的工程,路径为D:ti5000myprojectsDTK-MATH 注:不认可汉字路径,加载源文件到工程 点击Project,选择Add Files to Project,添加math.c、math.cmd、rts.lib文件到工程中。,添加源文件到工程 在下拉菜单中选择.c点击打开,即可添加源程序到工程中,同样的方法可以添加文件math.cmd、rts.lib到工程文件中 在下面窗口中可以看到math.c、rts.lib文件已经加到工程文件中。,加载GEL文件 对各种寄存器的初始化 FileLoad GEL 例如: FileLoad GELCCS-FFTdtk-boot.gel,文件操作 以下操作可对工程中的文件进行打开、删除、查看属性等操作。,设置编译与连接选项,设置相应的编译参数,一般情况下,按默认值就可以,进行连接的参数设置,设置输出文件名、堆栈的大小以及初始化的方式,设置连接顺序。当使用rts.lib时将其放在最后,编译 生成目标文件:*.out 点击ProjectRebuild all,若正确则生成DTK-math.out; 若是修改程序,可以使用Project Build命令,Load文件并运行 加载文件: Fileload program debugDTK-MATH.out 载入debug文件夹下的可执行文件DTK-MATH.out 运行 Debug Run(F5),装载完毕,点击窗口左侧的Go Main回到C程序的入口,进入C程序入口,保存调试环境 点击FileWorkspaceSave Workspace保存调试环境,以便下次调试时,不再需要重新进行设置。,调试工具 断点调试,打开CPU与外设寄存器的观察窗 设置:Debug/Breakpoints 运行:Debug/Run,运行程序到第一个断点,在STDout观察窗内看定点运算是否正确;然后再运行程序到第二个断点,观察浮点运算是否正确。再运行程序,观察浮点与定点之间的转换是否正确。,观察CPU寄存器、Memory,在图示窗口中可观察到CPU个寄存器的值和外围寄存器的值,查看数据: View/Memory,调试工具(Debug) 在下拉菜单中可选择复位CPU、进入C主程序、重新开始等操作。,探测点调试Probe Points,查看程序执行到某一位置时各寄存器的值 设置:Debug/Probe points 与断点的区别:,这是CCS弹出有关Probe Points的设置表,进行如下设置,六实验说明 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,六实验说明 1.源程序错误 在函数fixed_add()中的z的定义未加“;”号; 函数float_add()中的号缺右边而未完整。 2.链接错误 DSP的空间分配重叠 DATA: origin = 3000h, length = 0120h STACK: origin = 3100h, length = 0500h 未给系统分配.stack堆栈段 /.stack STACK PAGE 1,附件一: 程序解析,程序结构 #define Qx 4 #define Qy 4 #define Qz 4 void main() fixed_add(1556,40); fixed_sub(334,222); fixed_mul(188,188); fixed_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); ,1.加法/减法运算的C语言定点模拟 设浮点加法运算的表达式为: float x,y,z; z=x+y; 将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标值一样。 若两者不一样,则在做加法/减法运算前先进行小数点的调整。 为保证运算精度,需使Q值小的数调整为与另一个数的Q值一样大。,结果不超过16位表示范围 设x的Q值为Qx,y的Q值为Qy,且QxQy,加法/减法结果z的定标值为Qz,则: zx+y,定点加法可以描述为: int x,y,z; long temp; /*临时变量*/ tempy(QxQz), 若QxQz z(int)(temp(QzQx), 若QxQz,举例:定点加法。 设x0.5,y3.1,则浮点运算结果为zx+y0.5+3.13.6; Qx15,Qy13,Qz13,则定点加法为: x16384;y25395; temp253952)29491; 因为z的Q值为13,所以定点值z29491即为浮点值z29491/81923.6,void 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); ,举例:定点减法。 设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。由于z的Q值为15,所以定点值z-3276即为浮点值z-3276/32768-0.1,void fixed_sub(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_sub was %i !n“,z); ,2.乘法运算的C语言定点模拟 设浮点乘法运算的表达式为: float x,y,z; z = xy; 假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为Qz,则 z = xy,定点表示的乘法为: int x,y,z; long temp; temp = (long)x; z = (temp*y) (Qx+Qy-Qz);,举例:定点乘法。 设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 = 21666/32 = 677.06,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); ,3.除法运算的C语言定点模拟 设浮点除法运算的表达式为: float x,y,z; z = x/y; 假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz,则: z = x/y,定点表示的除法为: int x,y,z; long temp; temp = (long)x; z = (temp(Qz-Qx+Qy)/y;,举例:定点除法。 设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,void fixed_div(int x,int y) long temp; int z; temp=(long)x; z=(temp(Qz-Qx+Qy)/y; fprintf(stdout,“the result of fixed_div was %i !n“,z); ,附件二: 链接文件,MEMORY PAGE 0: VECS: origin = 4B00h, length = 0080h PRAM: origin = 4C00h, length = 3000h PAGE 1: SCRATCH: origin = 0060h, length = 0020h DATA: origin = 3000h, length = 0120h STACK: origin = 3100h, length = 0500h EXRAM: origin = 3600h, length = 0900h SYSMEM: origin = 4600h, length = 0400h ,SECTIONS .cinit 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 ,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!