实验一 CCS使用及DSP基本数学运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
②观察CPU寄存器、Memory
• 在图示窗口中可观察到CPU个寄存器的值 和外围寄存器的值
查看数据: View/Memory
③调试工具(Debug) 在下拉菜单中可选择复位CPU、进入C主 程序、重新开始等操作。
④探测点调试Probe Points
查看程序执行到某一位置时各寄存器的值 设置:Debug/Probe points 与断点的区别:
.sysmem:用于程序中的malloc 、calloc 、 和realoc 函数动态分配存储空间 .vectors:中断向量表 .data:常数数据,如对变量的初始化数据 .trap: .cio:
地址说明 链接器为每个输出段都在目标存储器里分配两个 地址:一个是加载地址,一个是运行地址 通常情况下两个地址是相同的,可以认为输出段 只有一个地址,这时就可以不加“run=运行地址” 这条语句; 有时需要将两个地址分开,比如将程序加载到 FLASH,然后放到RAM中高速运行,这就用到了 运行地址和加载地址的分别配置
⑶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:为程序系统堆栈保留存储空间,用于保 存返回地址、函数间的参数传递、存储局部变量 和保存中间结果
六.实验说明 1.源程序错误 ⑴在函数fixed_add()中的z的定义未加“;”号; ⑵ 函数float_add()中的{}号缺右边而未完整。 2.链接错误 ⑴DSP的空间分配重叠 DATA: origin = 3000h, length = 0120h STACK: origin = 3100h, length = 0500h ⑵未给系统分配.stack堆栈段 //.stack > STACK PAGE 1
四、实验程序结构说明 1.math.c这个文件中包含了实验关于DSP运算的主演函数。 主要有: fixed_add(int x,int y):定点加法运算; fixed_sub(int x,int y):定点减法运算; fixed_mul(int x,int y):定点乘法运算; fixed_div(int x,int y):定点除法运算; float_add(double x,double y):浮点加法运算; float_sub(double x,double y):浮点减法运算; float_mul(double x,double y):浮点乘法运算; float_div(double x,double y):浮点除法运算; float_fixed(double x):浮点转定点运算; fixed_float(int x):定点转浮点运算;
②进行连接的参数设置,设置输出文件名、 堆栈的大小以及初始化的方式
③设置连接顺序。当使用rts.lib时将其放在最后
⑸编译
生成目标文件:*.out • 点击Project→Rebuild all,若正确则生成DTKmath.out; • 若是修改程序,可以使用Project →Build命令
⑹Load文件并运行
结果不超过16位表示范围 • 设x的Q值为Qx,y的Q值为Qy,且Qx>Qy,加法/ 减法结果z的定标值为Qz,则: • z=x+y
zq 2
Qz
xq 2
Qx
yq 2 ] 2
Qx
Qy
xq 2
Qx
yq 2
( Qx Qy )
2Qx
( Qz Qx )
1.加法/减法运算的C语言定点模拟 设浮点加法运算的表达式为: float x,y,z; z=x+y; • 将浮点加法/减法转化为定点加法/减法时最重要的 一点就是必须保证两个操作数的定标值一样。 • 若两者不一样,则在做加法/减法运算前先进行小 数点的调整。 • 为保证运算精度,需使Q值小的数调整为与另一 个数的Q值一样大。
4. GEL文件 GEL文件的功能是用于初始化DSP,实现 对各种寄存器的初始化。 GEL在CCS下有一个菜单,可以根据DSP 的对象不同,设置不同的初始化程序。
• 不同的DSP程序,其.cmd文件、.lib文件 和.gel文件大小一样吗?
五、实验步骤 1.硬件连接 将USB仿真器的USB插头插入PC机的USB 插槽中;将DSP仿真器的JTAG插头与SEEDDEC54xx 单元的J8相连接;启动计算机,当 计算机启动后,打开SEED-DTK5416 的电源。 观 察 SEED-DTK_IO 单 元 的 +5V 、 +3.3V 、 +15V、-15V的电源指示灯是否均亮;若有不 亮的,请断开电源,检查电源。
⑽调试工具
①断点调试,打开CPU与外设寄存器的观察窗 • 设置:Debug/Breakpoints • 运行:Debug/Run
• 运行程序到第一个断点,在STDout观察窗 内看定点运算是否正确;然后再运行程序 到第二个断点,观察浮点运算是否正确。 再运行程序,观察浮点与定点之间的转换 是否正确。
⑶加载源文件到工程
点击Project,选择Add Files to Project,添加 math.c、math.cmd、rts.lib文件到工程中。
①添加源文件到工程 在下拉菜单中选择.c点击打开,即可添加 源程序到工程中
②同样的方法可以添加文件math.cmd、rts.lib到工 程文件中 在下面窗口中可以看到math.c、rts.lib文件已经加 到工程文件中。
①加载文件: File→load program → debug→DTK-MATH.out
载入debug文件夹下的可执行文件DTK-MATH.out
②运行 Debug →Run(F5)
装载完毕
⑺点击窗口左侧的Go Main回到C程序的入口
⑻进入C程序入口
⑼保存调试环境
点击File→Workspace→Save Workspace保存调 试环境,以便下次调试时,不再需要重新进行设置。
• 这是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
2.math.cmd文件 DSP的链接文件,也叫命令文件 。 ⑴命令文件的组成 file1.obj //子目标文件名1 file2.obj //子目标文件名2 file3.obj //子目标文件名3 - o prog.out //连接器操作指令,用来指定输出文件 - m prog.m //用来指定MAP文件 MEMORY {略} SECTIONS {略} otherlink.cmd
“load=加载地址”的几种写法: ①首先“load”关键字可以省略 ② “=”可以写成“>” ③ “加载地址”可以是:地址值、存储区间的名 字、PAGE关键词等 “run =运行地址”中的“=”可以用“>”
3.rts.lib库文件 rts.lib是一个库文件,主要包含了有关C的 运行环境与相应的函数的代码。 该库文件存放在CCS的\cgtools\lib中 。
⑵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 }
③加载GEL文件 对各种寄存器的初始化 File→Load GEL 例如: File→Load GEL→\CCS-FFT\dtk-boot.gel
④文件操作 以下操作可对工程中的文件进行打开、删 除、查看属性等操作。
⑷设置编译与连接选项
①设置相应的编译参数,一般情况下,按默 认值就可以
2.打开CCS集成开发环境,进入CCS的操作环境
⑴新建源文件 ①创建一个未知名的源文件
②编写源代码并保存 设保存源程序名为math.c
③创建其它源程序(如.cmd)可重复上述步骤
⑵创建或打开一个工程 ①建立新工程,点击Project→New
②工程名及路径可任意确定
③点击完成,已新建一个名为DTK-MATH.prj的工 程,路径为D:\ti5000\myprojects\DTK-MATH 注:不认可汉字路径
二、实验内容 1.DSP源文件的建立; 2.DSP程序工程文件的建立; 3.编译与链接的设置,生成可执行的DSP文 件; 4.进行DSP程序的调试与改错; 5.学习使用CCS集成开发工具的调试工具; 6.观察实验结果;
三、实验背景知识 1.为什么DSP运算要做数的定标 2.数的定标方法 • Q表示法 • S表示法
实验一 CCS使用及DSP基本数学运算
一、实验目的 1.熟悉CCS 集成开发环境,掌握工程的生 成方法; 2.熟悉SEED-DTK5416 实验环境; 3.掌握CCS 集成开发环境的调试方法; 4.了解数在计算过程中的定标,掌握数的定 点、浮点表示方法,定点、浮点基本运算 以及定点、浮点间的相互转换。
附件一:
程序解析
程序结构 • #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); • }
[ xq yq 2
( Qx Qy )
zq [ xq yq 2
( Qx Байду номын сангаасy )
] 2
定点加法可以描述为: • int x,y,z; • long temp; /*临时变量*/ • temp=y<<(Qx-Qy); • temp=x+temp; • z=(int)(temp>>(Qx-Qz)), 若Qx≥Qz • z=(int)(temp<<(Qz-Qx)), 若Qx≤Qz