DSP开发环境和流程的简单例程精.docx
- 文档编号:6265137
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:35
- 大小:1.03MB
DSP开发环境和流程的简单例程精.docx
《DSP开发环境和流程的简单例程精.docx》由会员分享,可在线阅读,更多相关《DSP开发环境和流程的简单例程精.docx(35页珍藏版)》请在冰豆网上搜索。
DSP开发环境和流程的简单例程精
1概述
1.1CCS简介
CCS(CodeComposerStudio)是美国德州TI公司推出的DSP系统的一种开发软件,它提供了环境配置、源文件编译、程序调试、跟踪、分析等工具,可以帮助用户在一个软件环境下完成编辑、编译、连接、调试和数据分析等工作,和其他DSP软件相比,利用CCS软件能够加快软件开发进程,提高工作效率。
CodeComposerStudio包含一整套用于开发和调试嵌入式应用的工具。
它包含适用于每个TI器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。
CCSIDE提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。
借助于精密的高效工具,用户能够利用熟悉的工具和界面快速上手并将功能添加至他们的应用。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS支持如下所示的开发周期的所有阶段。
图1-1CCS开发周期
1.2CCS基本结构
1.2.1CCS构成及接口
CCS包括如下各部分:
CCS代码生成工具、CCS集成开发环境(IDE)、DSP/BIOS插件程序和API、RTDX插件、主机接口和API。
CCS构成及接口见图1-2。
图1-2CCS构成及接口
1.2.2代码生成工具
代码生成工具奠定了CCS所提供的开发环境的基础。
图2是一个典型的软件开发流程图3,图中阴影部分表示通常的C语言开发途径,其它部分是为了强化开发过程而设置的附加功能。
图3描述的工具如下:
C编译器(Ccompiler)产生汇编语言源代码,其细节参见TMS320C54x最优化C编译器用户指南。
汇编器(assembler) 把汇编语言源文件翻译成机器语言目标文件,机器语言格式为公用目标格式(COFF),其细节参见TMS320C54x汇编语言工具用户指南。
连接器(linker) 把多个目标文件组合成单个可执行目标模块。
它一边创建可执行模块,一边完成重定位以及决定外部参考。
连接器的输入是可重定位的目标文件和目标库文件,有关连接器的细节参见TMS320C54x最优化C编译器用户指南和汇编语言工具用户指南。
归档器(archiver)允许你把一组文件收集到一个归档文件中。
归档器也允许你通过删除、替换、提取或添加文件来调整库,其细节参见TMS320C54x汇编语言工具用户指南。
助记符到代数汇编语言转换公用程序(mnimonic_to_algebricassemblytranslatorutility)把含有助记符指令的汇编语言源文件转换成含有代数指令的汇编语言源文件,其细节参见TMS320C54x汇编语言工具用户指南。
可以利用建库程序(library_buildutility)建立满足你自己要求的“运行支持库”,其细节参见TMS320C54x最优化C编译器用户指南。
运行支持库(run_time_supportlibraries)它包括C编译器所支持的ANSI标准运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数,其细节参见TMS320C54x最优化C编译器用户指南。
十六进制转换公用程序(hexconversionutility)它把COFF目标文件转换成TI-Tagged、ASCII-hex、Intel、Motorola-S、或Tektronix等目标格式,可以把转换好的文件下载到EPROM编程器中,其细节参见TMS320C54x汇编语言工具用户指南。
交叉引用列表器(cross_referencelister)它用目标文件产生参照列表文件,可显示符号及其定义,以及符号所在的源文件,其细节参见TMS320C54x汇编语言工具用户指南。
绝对列表器(absolutelister)它输入目标文件,输出.abs文件,通过汇编.abs文件可产生含有绝对地址的列表文件。
如果没有绝对列表器,这些操作将需要冗长乏味的手工操作才能完成。
图1-3典型的软件开发流程图
1.2.3硬件仿真和实时数据交换
TIDSPs提供在片仿真支持,它使得CCS能够控制程序的执行,实时监视程序运行。
增强型JTAG连接提供了对在片仿真的支持,它是一种可与任意DSP系统相连的低侵扰式的连接。
仿真接口提供主机一侧的JTAG连接,如TIXSD510。
为方便起见,评估板提供在板JTAG仿真接口。
在片仿真硬件提供多种功能:
DSP的启动、停止或复位功能
向DSP下载代码或数据
检查DSP的寄存器或存储器
硬件指令或依赖于数据的断点
包括周期的精确计算在内的多种记数能力
主机和DSP之间的实时数据交换(RTDX)
CCS提供在片能力的嵌入式支持;另外,RTDX通过主机和DSP APIs提供主机和DSP之间的双向实时数据交换,它能够使开发者实时连续地观察到DSP应用的实际工作方式。
在目标系统应用程序运行时,RTDX也允许开发者在主机和DSP设备之间传送数据,而且这些数据可以在使用自动OLE的客户机上实时显示和分析,从而缩短研发时间。
RTDX由目标系统和主机两部分组成。
小的RTDX库函数在目标系统DSP上运行。
开发者通过调用RTDX软件库的API函数将数据输入或输出目标系统的DSP,库函数通过在片仿真硬件和增强型JTAG接口将数据输入或输出主机平台,数据在DSP应用程序运行时实时传送给主机。
图1-4 RTDX系统组成
在主机平台上,RTDX库函数与CCS一道协同工作。
显示和分析工具可以通过COMAPI与RTDX通信,从而获取目标系统数据,或将数据发送给DSP应用例程。
开发者可以使用标准的显示软件包,诸如NationalInstruments’LabVIEW,Quinn-Curtis’Real-TimeGraphicsTools,或MicrosoftExcel。
同时,开发者也可研制他们自己的VisualBasic或VisualC++应用程序。
图1-5 RTDX实例
RTDX能够记录实时数据,并可将其回放用于非实时分析。
下述样本由NationalInstruments’LabVIEW软件产生。
在目标系统上,一个原始信号通过FIR滤波器,然后与原始信号一起通过RTDX发送给主机。
在主机上,LabVIEW显示屏通过RTDXCOMAPI获取数据,并将它们显示在显示屏的左边。
利用信号的功率谱可以检验目标系统中FIR滤波器是否正常工作。
处理后的信号通过LabVIEW,将其功率谱显示在右上部分;目标系统的原始信号通过LabVIEW的FIR滤波器,再将其功率谱显示在右下部分。
比较这两个功率谱便可确认目标系统的滤波器是否正常工作。
RTDX适合于各种控制、伺服和音频应用。
例如,无线电通信产品可以通过RTDX捕捉语音合成算法的输出以检验语音应用程序的执行情况;嵌入式系统也可从RTDX获益;硬磁盘驱动设计者可以利用RTDX测试他们的应用软件,不会因不正确的信号加到伺服马达上而与驱动发生冲突;引擎控制器设计者可以利用RTDX在控制程序运行的同时分析随环境条件而变化的系数。
对于这些应用,用户都可以使用可视化工具,而且可以根据需要选择信息显示方式。
未来的TIDSPs将增加RTDX的带宽,为更多的应用提供更强的系统可视性。
关于RTDX的详细资料,请参见CCS中RTDX在线帮助。
2CCS开发环境
2.1CCS一般操作流程
利用CCS集成开发环境,可以在一个开发环境下完成工程的定义、程序编辑、编译、链接、调试和数据分析等工作环节。
使用CCS开发应用程序的一般步骤为:
(1)开发或创建一个工程文件。
工程文件中包括源程序、目标文件、库文件、连接命令文件和包含文件。
(2)使用CC3集成编译环境,编译各类文件。
如头文件(.h文件)、命令文件(.cmd文件)和源程序.c,.asm文件)等。
(3)对工程进行编译。
如有语法错误,将在构建窗口中显示出来。
用户可以根据显示的错误信息定位错误位置,更改错误。
(4)排除语法错误之后,用户可以对计算结果/输出数据进行分析,评估算法性能。
CCS提供了探针、图形显示、性能测试等工具来分析数据,评估性能。
2.2CCS的窗口,主菜单和工具条
CCS应用窗口。
整个窗口由主菜单、工具条、工程窗口、编辑窗口、图形显示窗口、内存单元显示窗口和寄存器显示窗口等构成,如图3所示。
工程窗口用来组织用户的若干程序构成一个项目,用户可以从工程列表中选中需要编译和调试的特定程序。
在源程序编译/调试窗口中用户既可以编译程序又可以设置断点、探针,调试程序。
反汇编窗口可以帮助用户查看机器指令,查找错误。
内存和寄存器显示窗口可以查看、编辑内存单元和寄存器。
图形显示窗口可以根据用户需要直接或经过处理后显示数据。
用户可以通过主菜单Windows条目来管理窗口。
图2-1CCS应用窗口示例
2.3建造和运行程序
建造(Building)在这里指编译(Compiling)、汇编(Assembling)、链接(Linking)三个独立步骤按顺序联合运行。
在DOS命令行下,这些步骤需要手工分步执行,而在CCS集成开发环境里,一个“Building”命令即可自动完成上述三个独立步骤。
在主菜单中单击“Project”,选择“RebuildAll”,或者单击工具条图标(RebuildAll),CCS将重新对工程中所有文件进行编译、汇编和连接,并同步在底部窗口中显示编译连接信息。
连接完毕,CCS生成一个“.out”文件,默认存放在“debug”目录内。
建造完毕之后,再完成装载程序的步骤:
在主菜单中单击“File”,选择“LoadProgram”,如图2-2所示。
在弹出的对话框中,在CCS的安装目录下,选择“.out”文件并打开。
CCS装载完毕该.out文件到目标DSP之后,会自动弹出“Disassembly”窗口,显示构成源代码的反汇编指令,如图2-3所示。
同时,CCS还会在底部窗口弹出“stdout”栏,用于显示程序在运行时的输出信息。
图2-2装载程序
图2-3反汇编(Disassembly)窗口
现在可以开始运行我们的程序:
在主菜单中单击“Debug”,选择“GoMain”,让程序从主函数开始执行。
程序会停在main()处,并会有一个黄色的箭头标记当前要执行的C语言代码。
如果希望同时看到C语言代码和对应编译生成的汇编代码,在主菜单中单击“View”,选择“MixedSource/ASM”,此时会有一个绿色的箭头量标记当前要执行的汇编代码,如图2-4所示。
此时,在浅灰色显示的汇编指令上单击鼠标,然后按F1键,CCS会对该汇编指令进行搜索并弹出帮助窗进行解释。
可以利用该功能来了解不熟悉的汇编指令。
在主菜单中单击“Debug”,选择“Run”,或单击工具条图标(Run),让程序全速执行。
在主菜单中单击“Debug”,选择“Halt”,或单击工具条(Halt),让程序退出运行。
图2-4同时观察C语言与对应的汇编代码
2.4改变建造选项和修改语法错误
改变建造(Building)选项和修改语法错误:
需要注意的是,改变了建造选项后,只有“RebuildAll”之后,改变的选项才会生效。
单击“确定”按钮后,在主菜单中单击“Project”,选择“RebuildAll”,或者单击工具条图标(RebuildAll)。
这时在底部窗口会出现建造消息,指示程序包含着编译错误。
单击“Build”标签,向上滑动,找到有“error”
信息的行,如图2-5所示。
图2-5编译错误的提示
这实际上是一个语法错误,CCS用红色的编译错误给出了出错的位置“line68”。
双击这个错误提示,CCS会打开源文件,并将光标停在错误语句行处。
阅读上面一行语句,会发现少了一个“;”,改为“puts(“beginprocessing”);”。
如果发现编辑不起作用,修改不了源文件,是因为混合观察源文件与反汇编时,CCS禁止编辑。
在主菜单中单击“View”,选择“MixedSource/ASM”,将“M1xedSource/ASM”前的对勾去掉即可。
修改后,在编辑窗的标题栏的文件名后面会出现一个“*”的标记,指示本文件被修改过。
在主菜单中单击“File”,选择“Save”,或使用快捷键Ctrl+S,保存源文件。
存储后,“*”标记就会消失。
在主菜单中单击“Project”,选择“Build,或单击工具条(1ncrementalBuild),这个建造选项会只编译更新过的文件,而并不重新编译所有的工程文件。
然后在主菜单中单击“Fi1e”,选择“LoadProgram”,装载刚生成的“.out”文件。
我们也可以通过配置CCS的工程环境,让CCS自动在建造后装载程序。
方法是在主菜单中单击“Option”,选择下面选项“Customize”,在弹出的对话框中单击“ProgramLoadOptions”标签,选中第二个复选框“LoadProgramAfterBuildOption”即可。
在主菜单中单击“Debug”,选择“GoMain”,让程序从主函数开始执行;再在“Debug”菜单中选择“Run”,或单击工具条(Run),观察运行输出结果,如图2-6所示。
图2-6修改后的运行结果
再在“Debug”菜单中选择“Halt”,或单击工具条图标(Halt),让程序退出运行。
2.5使用断点与观察窗
使用断点与观察窗:
在程序的开发与测试中,我们经常要检查某个变量在程序运行中的取值变化情况,这就需要用到断点与观察窗。
在主菜单中单击“File”,选择“ReloadProgram”,在源文件中找到语句行“dataIO();”,并让光标停在该行。
单击工具图标(ToggleBreakpoint)插入断点,或F9键。
在“选择区”可以看到在这一行出现了一个红点,标记本行设置了断点。
在主菜单中单击“View”,选择“WatchWindow”,CCS会弹出一个独立的区域,用于显示运行时所观察的变量值。
默认的情况下观察窗显示“WatchLocals”标签,在其中显示当前执行的函数的所有局部变量,如图9所示。
如果在观察窗中没有任何变量显示,在主菜单中单击“Debug”,选择“GoMain”,让程序进入主函数。
单击工具条图标(Run),让程序执行到刚才设置的断点处,然后在观察窗中选择“Watch1”标签,单击“name”列的表达式图标,输入“dataIO”作为所观察的变量名,按Enter键后,dataIO的值会立即出现在“Value”列中,如图2-8所示。
图2-7观察窗口
图2-8观察dataIO的值
单击工具条图标(SingleStep),或按F8键,让程序单步执行,这样可以跟踪到dataIO函数内部观察程序执行情况。
或者单击工具条图标(StepOver),等同于按F10键,CCS会把datalO函数当做一条语句执行,而不进入其内部。
顺便说明,工具条图标(Stepout)或Shlft+F7组合键,其作用是当程序通过单步或断点等方式运行进入函数内部时,Stepout可以令程序执行完毕这个函数,然后退回到调用处。
工具条图标(RunToCursor)或Ctrl+10组合键,其作用是令程序执行到光标处。
上述四种程序运行方式是基本而有效的调试手段。
观察窗除了观察简单变量之外,还可以观察结构型变量。
在工程浏览窗中打开头文件,找到语句行“structPARMS”,这是一个全局声明的结构类型,类型名为“PARMS”。
volume.c文件使用该类型声明了一个全局变量“str”,我们现在就来观察这个结构型变量。
方法是在观察窗中选择“Watchl”标签,单击“name”列的表达式图标,输入“str”作为所观察的变量名,然后单击str左边的“+”号,CCS就会展开这一行并列出该结构变量的所有成员与它们的值,如图2-9所示。
图2-9观察结构变量
在观察窗中的“Value”栏,双击任一变量的值,就可对这个值进行编辑,按Enter键后,修改的值会生效,并用红色的值回显,表示该值有所变化。
如果要取消观察某个变量,单击该变量,然后按Delete键即可。
如果要取消所有断点,有两种方式,单击工具条图标题(RemoveAllBreakpoints),或者在主菜单中单击“Debug”,选择“Breakpoints”,在弹出的对话框中选择“Breakpoints”标签,然后单击“DeleteAll”按钮即可。
2.6利用图形窗口分析数据
运算结果也可以通过CCS提供的图形功能经过一定的处理显示出来,CCS提供的图形显示包括时频分析、星座图、眼图和图像显示,如表1所示。
用户淮备好需要显示的数据后,选择命令View—Graph,设置相应的参数,即可按所选的图形显示数据,如图12所示。
各种图形显示所采用的工作原理基本相同,即采用双缓冲区(取样缓冲区和显示缓冲区)分别存储和显示图形。
取样缓冲区存在于实际或仿真目标板,包括用户需要显示的数据区。
显示缓冲区存在于主机内存中,内容为取样缓冲区的拷贝。
用户定义好显示的参数后,CCS从取样缓冲区中读取规定长度的数据进行显示n显示缓冲区容量大小可以和取样缓冲区的不同,如果用户允许左移数据显示(1eft—shifteddatadisptay),则取样数据从显示区的右端向左端循环显示。
“左移数据显示”特性对显示串行数据特别有用。
表1CCS图形显示类型
图2-10CCS图形显示类型
CCS提供图形显示类型有9种,每种显示所需的设置参数各不相同。
这里仅列举时频图单曲线显示设置方法。
其他图形的参数设置可参阅在线帮助。
选择命令View—Gragh—Time/Frequency弹出Time/Frequency对话框,在“DisplayType”中选择“SingleTime”(单曲线显示),则弹出图形显示参数对话框。
需要设置的参数如下:
(1)显示类型(displaytype)。
单击“DisplayType”栏区域,则出现显示类型下拉菜单条,单击所需的显示类型,则Time/Frequency对话框随之变化。
(2)视图标题(graphtitle)。
定义图形视图标题。
(3)起始地址(startaddress)。
定义取样缓冲区的起始地址。
当图形被更新时,取样缓冲区内容亦更新显示缓冲区内容。
此对话栏允许输入符号和表达式。
当显示类型为“DualTime”时,需要输入两个取样缓冲区的苗地址。
(4)数据页(datapage):
指明选择的取样缓冲区来自程序、数据还是I/O空间。
(5)取样缓冲区尺寸(acquisitionbuffersize)。
用户可以根据所需定义取样缓冲区尺寸。
例如当依次显示一帧数据时,则取样缓冲区储存为帧的大小。
用户希望观察串行数据,则定义缓冲区尺寸为1,同时允许左移数据显示。
(6)索引递增(indexincrement)。
定义在显示缓冲区中每隔几个数据取一个取样点。
(7)显示数据尺寸(displaydatasize)。
此参数用来定义显示缓冲区的大小。
一般地,显示缓冲区的尺寸取决于“显示类型”选项。
对时域图形,显示缓冲区尺寸取决于要显示的取样点的数目,并且大于等于取样缓冲区尺寸。
若显示缓冲区尺寸大于等于取样缓冲区尺寸,则取样数据可以左移到显示缓存显示。
对频域图形,显示缓冲区尺寸等于FFT帧尺寸,取整为2的幂次。
(8)DSP数据类型(DSPdatatype)。
DSP数据类型可以为32比特有符号整数;32比特无符号整数;32比特浮点数;32比特IEEE浮点数;16比特有符号整数;16比特无符号整数;8比特有符号整数;8比特无符号整数。
(9)Q值(Q—value)。
取样缓冲区中的数始终为16进制数,但是它表示的实际数值由Q值确定。
Q值为定点数定标值,指明小数点所在的位置。
Q值取值范围为0—15,假定Q值为XX,则小数点所在的位置为从最低有效位向左数的第XX位。
(10)取样频率(samplingrate)。
对时域图形,此参数指明在每个取样时刻定义对同一数据的取样数。
假定取样频率为XX,则一个取样数据对应XX个显示缓冲区单元,由于显示缓冲区尺寸固定,因此时间轴取值范围为0-(显示缓冲区尺寸采样频率)。
对频域图形,此参数定义频率分析的样点数。
频率的取值范围为0-取样率/2。
(11)数据绘出顺序(plotdatafrom)。
此参数定义从取样缓冲区取数的顺序:
从左到右:
取样缓冲区的第一个数被认为是最新或最近到来的数据;
从右到左:
取样缓冲区的第一个数被认为是最旧数据。
(12)左移数据显示(1eft—shiftdatadisplay)。
此选项确定取样援冲区与显示缓冲区的哪一边对齐。
用户可以选择此特性允许或禁止。
若允许,则取样数据从右端填入显示缓冲区。
每一次更新图形,则显示缓冲数据左移,留出空间填人新的取样数据。
注意显示缓冲区初始化。
若此项被禁止,则取样数据简单地覆盖显示缓存o
(13)自动定标(autoscale)。
此选项允许Y轴最大值自动调整。
若此选项设置为允许,则图形被显示缓冲区数据最大值归一化显示。
若此选项设置为禁止,则对话框出现一新的设置项“MaximumY—Value”,设置Y轴显示最大值。
(14)直流量(DCvalue)。
此参数设置Y轴中点的值,即零点对应的数值。
对FFT幅值显示,此区域不显示。
(15)坐标显示(axesdisplay)。
此选项设置X、Y坐标是否显示。
(16)时间显示单位(timedisplayunit)。
定义时间轴单位。
可以为秒、毫秒、微秒或取样点。
(17)状态条显示(statusbardisplay)。
此选项设置图形显示窗口是否显示。
(18)幅度显示比例(magnitudedisplayscale)。
有两类幅度显示类型:
线性或对数显示(公式为20log(x))。
(19)数据曲线格式(dataplotsyle)。
此选项设置数据如何显示在图形窗口中。
Line:
数据之间用直线相连;
Bar:
每个数据点用竖直线显示。
(20)栅格类型(grNstytc)。
此选项设置水平或垂直方向底线显示。
有3个选项
NoGrid:
无栅格;
Zeroline:
仅显示O轴;
FullGrid:
显示水平和垂直栅格。
(21)光标模式(cursormode)。
NoCursor:
无光标;
DataCursor:
在视图状态栏显示数据和光标坐标;
ZoomCursor:
允许放大显示图形。
方法:
按住鼠标左键拖动,则定义的矩形框被放大。
2.7测算DSP/BIOS代码执行时间
LOG_printf所需的指令周期数,可像前面的puts()一样,利用CCS的功能来测算。
1.选择File→ReloadProgram。
2.选择Profiler→EnableClock,在EnableClock旁边可见到√。
3.在ProjectView中,双击hello.c文件。
4.选择View→MixedSource/ASM,则灰色的汇编指令紧随C源程序。
5.将光标放在LOG_printf(&trace,"helloworld!
")行上。
6.
点击工具栏按钮(ToggleProfile-point),则这一行和其下一行的汇编指令变为绿色高亮显示。
7.
向下移动滚动条,把光标放在程序结尾的大括号所在的行上,然后点击工具栏按钮(ToggleProfile-point),你可能会认为在程序的return行上设置了第二个测试点。
但是,要注意直到大括号后一直没有相应的汇编语言显示出来。
如果在return这一行上设置了测试点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 开发 环境 流程 简单 例程