2024年1月8日发(作者:捷豹xk8多少钱)

众友科技 DSP实验开发系统

第二章、CCS软件的使用

2.1 CCS5000 1.2的安装与配置

1.软件安装步骤

a)运行光盘中客户软件CCS5000 1.2C5000installsetup,进入引导界面;

b)选择Install下的Code Composer Studio进入安装界面;

c)按照默认的方式安装,装在C:ti下,然后重新启动计算机;

d)按DEL键进入CMOS的设置界面CMOS SETUP UTILITY,将Integrated Peripherals中的Onboard Paralell Port改为378/IRQ,Parrallel Port Mode改为EPP,保存退出。

e)进入windows后会出现CCS C5000 1.20,Setup CCS C5000 1.20的图标,然后运行光盘中客户软件CCS5000 1.2sdgomainbordsetup,进入安装界面;

f)按照默认的方式安装,文件装在C:Composer下。

2.软件设置步骤

a)打开Setup CCS C5000 1.20,进入设置界面,如下图所示。

b)点击Install a Device Driver,进入驱动文件选择界面,如下图1所示,选择C:,然后打开,出现如图2所示界面,选择OK。

21

众友科技 DSP实验开发系统

图1

图2

c)在将Available Board/Simulator Type中的sdgo5xx32移入System Configuration中,出现如下图所示界面。

d)点击NEXT,出现如下图所示界面,将I/O Port中的0x240改为0x378。

22

众友科技 DSP实验开发系统

e)点击NEXT,出现如下图所示界面,点击Add Single,然后点击Finish完成。

f)关掉设置窗口,保存所作的改变。

3.计算机与ZY13DSP12BC2实验箱通过并口P1相连,然后打开电源S1、S2,再点击CCS5000软件的图标,检查是否能够进入CCS5000。

23

众友科技 DSP实验开发系统

2.2 CCS5000 1.2的使用方法

2.2.1 CCS文件名介绍

在使用CCS前,应该先了解以下软件的文件名约定:

? CCS定义的工程文件

? Program.c C程序文件

? 汇编语言程序文件

? Filename.h C语言的头文件,包括DSP/BIOS API模块

? 库文件

? 连接命令文件

? 编译后的目标文件

? 可在目标DSP上执行的文件,可在CCS监控下调试/执行

? 工作空间文件,可以记录你的工作环境设置

? CCS的设置数据库文件,是使用DSP/BIOS API必须的,其它没有使用DSP/BIOS API的程序也可以使用,当新建一个设置数据库时,会产生下面的文件:

?

? Programcfg.h54

? Programcfg.s54

2.2.2 编写一个简单的程序

这一部分将介绍如何在CCS下面新建一个程序,及如何编译、连接、下载、调试程序。

1.新建一个工程文件

(1) 如果你的CCS安装在c:ti目录下,请在c:timyproject目录下新建一个目录,名为test;

(2) 将光盘test文件夹下的所有文件拷贝到新目录中;

(3) 运行CCS程序;

(4) 选择Project/New菜单;

(5) 在Save New Project As窗口中,选择你新建的目录,键入test作为文件名,然后点击Save。CCS会给你新建一个名为的工程文件,它将保存你的工程文件设置和工程引用的相关文件。

2. 往工程中加入文件

(1) 选择Project/Add Files to Project,在文件类型选项中选择*.c文件,选择test.c,加入文件。

(2) 选择Project/Add Files to Project。在文件类型选项CMD文件(*.cmd),选择。

(3) 此时,可以点击工作窗口的工程视窗中旁的+号,展开工程查看其中的文件。结果如下图所示:

(4) 注意此时,一些包含的文件不会出现在include目录下,编译后CCS会自动加入,不必手动执行。

24

众友科技 DSP实验开发系统

3.浏览代码

和Windows的浏览器相似,只要打开+号展现下面的文件,然后双击文件的图标,在主窗口就会显示相应文件的源代码。

4. 编译/执行程序

(1)选择Project/Rebuild All,或工具条中的相应按钮。

(2)编译成功后,选择File/Load Program,选择你刚编译的可执行程序。

(3)选择Debug/Run,或工具条中的相应图标(4)运行程序。

5. 程序调试的环境应用

(1)跟踪/调试程序

(1)选择Debut/Restart,重新执行程序。

(2)不全速运行,而是选择Debug/StepInto或按F8,单步执行。

(3)单步执行程序的同时,选择View/CPU Registers/CPU Register观察主要寄存器的变化。

(2)关于出现问题的处理

如果在CCS的编译连接过程出现问题,CCS都会给出提示,用户可以通过阅读提示,寻找问题出现在什么地方。

如果是语法上的错误,请查阅相关的语法资料;如果是环境参数设置上有问题,一般应在Project/Options中进行相应的修改(如果你是新用户,最好不要更改缺省设置);如果是下载过程中出现问题,可以尝试Debug/Reset DSP,或是按下硬件上的复位键。

2.2.3 CCS软件应用和DSP编程

1. 概述

本节介绍DSP语言软件的开发流程和涉及到的软件开发工具。一个DSP应用软件的标准开发流程如图所示。

由下图可见,软件开发过程中将涉及到C编译器、汇编器、链接器等开发工具。不过,这里的C编译器不像在PC上开发C程序一样会输出目标文件(.obj),而是输出满足C5X条件的汇编程序(.asm)。而C5X中的C编程效率是较低的,所以它的C编译器才输出汇编程序,让用户可以对该汇编程序进行最大限度的优化,提高程序效率。C编译器将在本章后面介绍。下面从汇编程序开始介绍软件开发流程的各个环节。

25

众友科技 DSP实验开发系统

C源程序C编译器汇编源程序宏汇编器COFF目标文件目标文件库连接器COFF执行文件运行支持库交叉参考列表绝对列表C5X DSP调试工具

编制一个汇编程序,需要经历下列步骤:

(1) 用文本编辑器(Editor)编辑满足C5X汇编器(Assembler)格式要求的汇编源程序。

(2) 调用汇编器汇编该源文件,如果源文件中调用了宏,汇编器还会到宏库中搜索该宏。

(3) 汇编之后生成格式为公共目标文件格式(COFF,Common Object File Format)的目标文件(.obj),称为COFF目标文件。

(4) 调用链接器(Linker)链接目标文件,如果包含可运行支持库和目标文件库,链接器还会到所保护的库中搜索所需要的成员。

(5) 链接之后生成可执行的COFF执行文件(.out)。

(6) 将COFF执行文件下载到C5XDSP中执行,同时也可借助调试工具(Debugging Tool)对程序进行跟踪调试或优化,也可利用交叉参考列表器(Cross-reference Lister)和绝对列表器(Absolute Lister)生成一些包含调试信息的表。

下面先介绍汇编源文件(.asm)格式。

2. 汇编源文件(.asm)

C5X的程序以段(Section)为基本单元构成,一个程序文件由若干段构成,每段又由若干语句(Statement)构成。

C5X的程序段分为初始化(Initialized)段和未初始化(Uninitialized)段两大类。初始化段可以是程序代码,也可以是程序中用到的常量、数据表等。我们可以从程序下载的角度来理解,初始化就是需要往程序空间写数据(代码或数据)的段,如同初始化程序空间一样。而未初始化段为变量,在下载时,这些变量是没有值的,所以无需向程序空间写,只需留出一段空间以便在运行时存放变量的值。所以这段空间在程序未运行前是没有初始化的。

26

众友科技 DSP实验开发系统

段的名称和属性可以由用户自定义,如果用户不定义,汇编器将按默认的段来处理。C5X汇编器默认的段有3个:“.text”、“.data”、“.bss”。其中,“.text”为程序代码段,“.data”为数据段,“.bss”为未初始化段。用户自定义用“.sect”和“.usect”两个汇编指示符来完成,其中“.sect”用于定义初始化段,“.usect”用于定义未初始化段,语法如下:

[symbol] .sect “section_name”

[symbol] .usect “section_name”,length

3. 汇编器

本节介绍C5X汇编器的使用。在编辑好汇编文件后就可以调用汇编器对文件进行汇编。先来看看C5X汇编器的情况。

1、汇编器概述

汇编器把汇编语言源文件汇编成COFF目标文件。C5X汇编器为:asm500(algebraic

assembler),用于汇编采用C5X的助记符指令编写的源文件,这个汇编器可完成如下工作:

(1) 处理汇编语言源文件中的源语句,生成一个可重复定位的目标文件;

(2) 根据要求,产生源程序列表文件,并提供对源程序列表文件的控制;

(3) 将代码分成段,并为每个目标代码段设置一个段程序计数器SPC(Section

Program Counter),并把代码和数据汇编到指定的段中,在存储器中为未初始化段留出空间;

(4) 定义(.def)和引用(.ref)全局符号(global symbol),根据要求,将交叉参考列表加到源程序列表中;

(5) 汇编条件段;

(6) 支持宏调用,允许在程序中或在库中定义宏。

汇编器接受汇编语言源文件作为输入,汇编语言源文件可以是文本编辑器直接编写的,也可以是由C语言经编译后得到的。

2、汇编器调用方法

可以在命令行用如下命令格式调用汇编器,也可以在集成开发环境下由CCS调用

asm500[input file[object file[listing file]]][-options]

asm500为调用汇编器。

Input file为汇编源文件名。如果不写扩展名,汇编器将使用缺省的.asm。

Object file为汇编器输出的COFF目标文件名。如果不写扩展名,汇编器将使用缺省的.obj,如果连目标文件名都不写,汇编器将使用输入的文件名作为目标文件名。

Listing file为汇编器输出的列表文件名。如果不写列表文件名也不写列表选项-1或-x,汇编器将不会生成列表文件。如果有列表文件名,将生成列表文件;如果没有列表文件名,而有列表选项,汇编器将使用输入文件名生成扩展名为.list的列表文件。

Option为汇编选项。选项不分大小写,可以放在命令行中汇编命令之后的任何地方。只要有连字符“-”就作为选项处理。不带参数的单个字母选项可以组合在一起,如-lc等效于-l-c。而带有参数的选项,如-I,则必须单独指定。

4. COFF目标文件

TMS320C5X的汇编器和链接器都会生成公共目标文件格式(COFF,Common Object File

Format)的目标文件。在本章中,将汇编器生成的文件称为COFF的目标文件,将链接器生成的文件称为COFF执行文件。目前,COFF目标文件格式已被广泛使用,因为它支持模块化(段)编程,能够提供有效灵活的管理代码段和目标系统(Target System)存储空间的方法。

1、COFF文件结构

27

众友科技 DSP实验开发系统

(1) 一个文件头

长度为22字节,包含COFF文件结构的版本号、段头的数量、创建日期、符号表起始地址和入口数量、可选文件头的长度等信息。

(2) 可选的文件头信息

由连接器生成,包含执行代码的长度(字节)和起始地址、初始化数据的长度和起始地址、未初始化段的长度、程序入口地址等信息,以便在下载时进行重定位。

(3) 各个段的头信息列表

每个段都有一个头,用于定义各段在COFF文件中的起始位置。段头包含段的名称、物理地址、虚拟地址、长度、原始数据长度等信息。

(4) 每个初始化段的原始数据

包含每个初始化段的原始数据,即需要写入程序存储空间的代码和初始化数据。

(5) 每个初始化段的重定位信息

汇编器自动生成各初始化段的重定位入口信息,链接时再由链接器读取该入口信息并结合用户对存储空间的分配进行重定位。

(6) 每个初始化段的行号入口(entry)

主要用于C语言程序的符号调试,因为C程序先被编译为汇编程序,这样,汇编器就会在汇编代码前生成一个行号,并将该行号映射到C源程序里相应的行上,便于调试程序。

(7) 一个符合表

用于存放程序中定义的符合入口,以便调试。

(8) 一个字符串表

表中直接使用符号名称,当符号名称超过8个字符时,就在符合表中使用指针,该指针指向字符串表中对应的符号名称。

2、段的顺序

汇编器在将汇编源程序汇编成COFF目标文件时,将按“.text、.data、用户自定义初始化段、.bss、用户自定义的未初始化段”的顺序将各段放入生成的COFF文件中。

因为未初始化段(.bss和.usect)仅仅是用于在存储空间中保留空间,并没有代码或数据,所以未初始化段只有段头,而没有原始数据、重定位信息和行号等。另外,如果程序中没有使用缺省的段(.text,.data和.bss),那么它们在COFF文件中也没有原始数据、重定位信息和行号等,因为它们的原始数据长度为零。

5. 链接器

汇编器生成COFF目标文件后,就可以调用链接器进行链接了。本节介绍C5X链接器的使用。

1、链接器概述

C5X的链接器能够把COFF目标文件链接成可执行文件(.out)。它允许用户自行配置目标系统的存储空间,也就是为程序中的各个段分配存储空间。链接器能根据用户的配置,将各段重定位到指定的区域,包括各段的起始地址、符号的相对偏移等。因为汇编器并不关心用户的定义,而是直接将“.text”的起始地址设为00 0000H,后面接着是.data和用户自定义段。如果用户不配置存储空间,链接器也将按同样的方式定位各段。

C5X的链接器能够接受多个COFF目标文件(.obj),这些文件可以是直接输入的,也可以是目标文件库(object library)中包含的。在多个目标文件的情况下,链接器将会把各个文件中的相同段组合在一起,生成COFF执行文件。

用链接器链接目标文件时,它要完成下列任务:

? 将各段定位到目标系统的存储器中;

28

众友科技 DSP实验开发系统

? 为符号和各段指定最终的地址;

? 定位输入文件之间未定义的外部引用。

用户可以利用链接器命令语言来编制链接器命令文件(.cmd),自行配置目标系统的存储空间分配,并为各段指定地址。常用的命令指示符有MEMORY和SECTIONS这两个,利用它们可以完成下列功能:

? 为各段指定存储区域;

? 组合各目标文件中的段;

? 在链接时定义或重新定义全局符号。

2、链接器调用方法

调用链接器的命令格式为:

lnk500[-option][filename]??filename n

其中lnk500为链接器调用命令。

Filename 为输入文件名,可以是目标文件、链接器命令文件或库文件。输入文件的缺省扩展名是.obj。使用其他扩展名时必须显示指定。链接器能够确定输入文件是目标文件还是包含链接器命令的ASCLL文件。链接器的缺省输出文件名是。

Option 为链接器的选项,用于控制链接操作,可以放在命令行或 链接器命令文件中的任何地方。链接器的调用方法有下列4种:

(1) 在命令行指定选项和文件名。例如:lnk500-o file 。

(2) 只输入lnk500命令,在链接器给出的提示符下输入相应内容:

Command files:可以输入一个或多个命令文件名;

Object files[.obj]:可以输入一个或多个目标文件,文件名之间用空格或逗号隔开;

Output files[]:链接器输出文件名,缺省为;

Option:选项可以在命令行中给出,也可以在这里给出。

(3)把目标文件名和选项放入一个链接器命令文件。假定一个命令文件包含有以下几行:

-o

在命令行运行链接器:link500 ,则链接器链接两个文件和产生名为的输出文件。

在使用命令文件时,仍然可以在命令行使用选项和文件名,例如:

lnk500-m

(4)在集成开发环境CCS下,先写好链接命令文件和相应的选项,然后由CCS自行调用。

3、链接器命令文件

如前所述,链接器命令文件允许用户将链接信息放入一个文件中,以便于在相同情况下的多次调用,同时还可以灵活应用MEMORY和SECTIONS命令配置存储空间。链接器命令文件为ASCLL文件,包含以下内容:

? 输入文件名,可以是目标文件,库文件或其他命令文件;

? 链接器选项;

? MEMORY和SECTIONS命令,MEMORY用于指定目标存储器配置,SECTIONS用于指定段的地址;

? 赋值语句,用于定义全局符号,并赋值。

29

众友科技 DSP实验开发系统

注意,在链接器命令文件中,不能将下列保留字用作符合或段的名称:

align DSECT len o run

ALIGN f length org RUN

Attr fill LENGTH origin SECTIONS

ATTR FILL load ORIGIN spare

Block group LOAD page type

COPY I NOLOAD range UNION

6. C编译器及其他

本节介绍C编译器、交叉参考列表器和绝对列表器。

1、C编译器

C编译器包含三个功能模块:语法分析、代码优化和代码产生,如下图所示。其中语法分析(Parser)完成C语法检查和分析;代码优化(Optimizer)对程序进行优化,以提高效率;代码产生(Code Generator)将C程序转换成C5X的汇编源程序。

C源程序语法分析C编译器优化(可选)代码产生汇编源程序

C5X的C编译器可以单独使用,也可以连同链接器一起完成编译,汇编和链接的工作。C编译器的调用格式为:

cl500[-options][filenames][-z[link-options]][object files]

其中,

cl500为调用命令。

Filenames为输入文件名。

Object为编译选项。如:

-q屏蔽列表器输出的提示信息。

-z为调用链接器的指示,当有-z时就表示在编译之后要调用链接器。

Link-options为调用链接器时的链接选项。

例如:c1500symtab.c file.c 就是将文件symtab.c和file.c编译生成汇编程序。

2、交叉参考列表器

交叉参考列表器属于调试工具,能以链接器输出的文件为输入,生成一个交叉参考列表器的调用命令格式为:

xref500[-options][input filename[output filename]]

其中,

xref500为调用命令。

Filename为输入/输出文件名。

Option为选项:

-l num指定输出文件中每页的行数。

-q屏蔽列表器输出的提示信息。

3、绝对列表器

绝对列表器属于调试工具,能以链接器输出的文件为输入,生成一个列表文件(.abs)。该列表文件将列出程序代码的绝对地址。绝对列表器的调用命令格式为:

abs500[-options]input file

30

众友科技 DSP实验开发系统

其中,

abs500为调用命令。

Input file为输入文件名。

Option为选项:

-e改变程序文件的缺省命名规则(缺省规则:汇编文件为.asm,C文件为.c,头文件为.h)。

-q屏蔽列表器输出的提示信息。

2.2.4 CCS应用详解

1. 概述

利用CCS集成开发环境,用户可以在一个开发环境下完成工程定义、程序编辑、编译链接、调试和数据分析等工作环节。使用CCS开发应用程序的一般步骤为:

(1) 打开或建立一个工程文件。工程文件中包括源程序(C或汇编)、目标文件、库文件、连接命令文件和包含文件。关于工程文件的使用请参见3.8.3节。

(2) 使用CCS集成编辑环境,编辑各类文件。如头文件(.h文件),命令文件(.cmd文件)和源程序(.c,.asm文件)等。

(3) 对工程文件进行编译。如果有语法错误,将在构建(Build)窗口中显示出来。用户可以根据显示的信息定位错误位置,更改错误。有关编译和调试的进一步描述参见3.8.4和 3.8.5节。

(4) 排除程序的语法错误后,用户可以对计算结果/输出数据进行分析,评估算法性能。CCS提供了探针、图形显示、性能测试等工具来分析数据、评估性能。

2. CCS的窗口、主菜单和工具条

CCS应用窗口

整个窗口由主菜单、工具条、工程窗口、编辑窗口、图形显示窗口、内存单元显示窗口和寄存器显示窗口等构成。

31

众友科技 DSP实验开发系统

工程窗口用于组织用户的若干程序构成一个项目,用户可以从工程列表中选中需要编辑和调试的特定程序。在源程序编辑/调试窗口中用户既可以编辑程序,又可以设置断点、探针、调试程序。反汇编窗口可以帮助用户查看机器指令,查找错误。内存和寄存器显示窗口可以查看、编辑内存单元和寄存器。图形显示窗口可以根据用户需要直接或经过处理后显示数据。用户可以通过主菜单Windows条目来管理各窗口。

3. 关联菜单

在任一CCS活动窗口中单击鼠标右键都可以弹出与此窗口内容相关的菜单,我们称其为关联菜单(Context Menu)。利用此菜单用户可以对本窗口内容进行特定的操作。例如,在Project View Windows窗口中单击鼠标右键,弹出菜单。选择不同的条目,用户完成添加程序,扫描相关性,关闭当前工程等功能。

4. 主菜单

主菜单中各选项的使用在后续的章节中会结合具体使用详细介绍,在此仅简略对菜单项功能作简要说明。用户如果需要了解更详细的信息,请参阅CCS在线帮助“Commands”。

5. 常用工具条

CCS将主菜单中常用的命令筛选出来,形成四类工具条:标准工具条,编辑工具条、工程工具条和调试工具条,依次如图所示。用户可以单击工具条上的按钮执行相应的操作。

标准工具条

编辑工具条

工程工具条

调试工具条

2.2.5 建立工程文件

下面按照CCS开发应用程序的一般步骤,先介绍工程文件的建立与使用。与Visual

Basic、Visual C和Delphi等集成开发工具类似,CCS采用工程文件夹集中管理一个工程。一个工程包括源程序、库文件、链接命令文件和头文件等,它们按照目录树的结构组织在工程文件中。工程构建(编译链接)完成后生成可执行文件。

一个典型的工程文件记录下述信息:

源程序文件名和目标库;

32

众友科技 DSP实验开发系统

编译器、汇编器和链接器选项;

头文件。

1. 创建、打开和关闭工程

命令Project-New用于创建一个新的工程文件(后缀为“.mak”),此后用户就可以编辑源程序、连接命令文件和头文件等,然后加入到工程中。工程编译链接后产生的可执行程序后缀为“.out”。

命令Project-Open用于打开一个已存在的工程文件。例如,用户打开位于“c:titest”目录下的工程文件时,工程中包含的各项信息被载入,其工程窗口如前面图所示。命令Project-Close用于关闭当前工程文件。

2. 在工程中添加/删除文件

以下任一操作都可以添加文件到工程中:

(1) 选择命令Project-Add File to Project?

(2) 在工程视图中右键单击调出关联菜单,选择Add File?

上图所示的Source源文件及Libraries库文件需要用户指定加入,头文件(Include文件)通过扫描相关性自动加入到工程中。在工程视图中右键单击某文件,从关联菜单中选择“Remove from project”可以从工程中删除此文件。

3. 扫描相关性

如前所述,头文件加入到工程中通过“扫描相关性”完成。另外,在使用增量编译时(参见3.8.4构建工程),CCS同样要知道哪些文件互相关联。这些都通过“相关性列表”来实现。

CCS的工程中保存了一个相关性列表,它指明每个源程序和哪些包含文件相关。在构建工程时,CCS使用命令Project+Show Dependencies或Project-Scan All Dependencies创建相关树。源文件中以“#include”、“.include”和“.copy”指示的文件被自动加入至CCS工程文件中。

4. 编辑源程序

CCS集成编辑环境可以编辑任何文本文件,对C程序和汇编程序,还可以彩色高亮显示关键字、注释和字符串。CCS的内嵌编辑器支持下述功能:

33

众友科技 DSP实验开发系统

(1) 语法高亮显示。关键字、注释、字符串和汇编指令用不同的颜色显示相互区别。

(2) 查找或替换。可以在一个文件和一组文件中查找替换字符串。

(3) 针对内容的帮助。在源程序内,可以调用针对高亮显示字的帮助。这在获得汇编指令和GEL内建函数帮助特别有用。

(4) 多窗口显示。可以打开多个窗口或对同一文件打开多个窗口。

(5) 可以利用标准工具条和编辑工具条帮子用户快速使用编辑功能。

(6) 作为C语言编辑器,可以判别圆括号或大括号是否匹配,排除语法错误。

(7) 所有编辑命令都有快捷键对应。

5. 工具条和快捷键

命令View-Standard Toolbar和View-Edit Toolbar分别调出标准工具条和编辑工具条。工具条上的按钮含义参见3.8.2.4。CCS内嵌编辑器所用快捷键可查阅在线帮助的“Help-Ceneral Help—Using Code Composer Studio+ The Integrated Editor+ Using

Keyboard Shortcuts or Default Keyboard Shortcuts”。用户可以根据自己的喜好定义快捷键。除编辑命令外,CCS所有的菜单命令都可以定义快捷键。选择Option-Keyboard命令打开自定义快捷方式对话框,选中需要定义快捷键的命令。如果此命令已经有快捷键,则在Assigned框架中有显示,否则为空白,用户可以点击Add按钮,敲下组合键(一般为ctrl+某键),则相应按键描述显示在“Press new shortcut”框中。

6. 查找或替换文字

除具有与一般编辑器相同的查找、替换功能外,CCS还提供了一种“在多个文件中查找”的功能。这对在多个文件中追踪、修改变量、函数特别有用。

命令Edit-Find in Files或点击标准工具条的“多个文件中查找”按钮,弹出如下对话框如下图所示。分别在“Find what”、“In files of”和“In folder”中键入需要查找的字符串、搜寻目标文件类型以及文件所在目录,然后点击“Find”按钮即可。

查找的结果显示在输出窗口中,按照文件名、字符串所在行号、匹配文字行依次显示。

7. 使用书签

书签的作用在于帮助用户标记着重点。CCS允许用户在任意类型文件的任意一行设置书签,书签随CCS工作空间(Workspace)保存,在下次载入文件时被重新调入。

1、设置书签

将光标移到需要设置书签的文字行,在编辑视窗中单击右键,弹出关联菜单,从“Book

marks”子菜单中选中“Set a Book mark”。或者点击编辑工具条的“设置或取消标签”按钮

。光标所在行被高亮标识,表示标签设置成功。

34

众友科技 DSP实验开发系统

设置多个书签后,用户可以点击编辑工具条的“上一书签”,“下一书签”快速定位书签。

2、显示和编辑书签列表

以下两种方法都可以显示和编辑书签列表。

(1) 在工程窗口中选择Bookmark标签,得到书签列表图。用户可以双击某书签,则在编辑窗口,光标跳转至此书签所在行。右键单击之,用户可以从弹出窗口中编辑或删除此书签。

(2) 选择命令“Edit-Bookmarks”或点击编辑工具条上的“编辑标签属性”按钮。双击某书签,则在编辑窗内光标跳转至此书签所在行,同时关闭此对话框。用户也可以单击某书签并且编辑或删除之。

8. 构建工程

工程所需文件编辑完成后,可以对该工程进行编译连接,产生可执行文件,为调试做准备。

CCS提供可4条命令构建工程:

(1) 编译文件:命令Project-Compile或单击工程工具条“编译当前文件”按钮,仅编译当前文件,不进行链接。

(2) 增量构建:单击工程工具条“增量构建”按钮则只编译那些自上次构建后修改过的文件。增量构建(incremental build)只对修改过的源程序进行编译,先前编译过、没有修改的程序不再编译。

(3) 重新构建:命令Project+ Rebuild或单击工程工具条“重新构建”按钮编译链接当前工程。

(4) 停止构建:命令Project-Stop Build或单击工程工具条“停止构建”按钮停重新止当前的构建进程。CCS集成开发环境本身并未包含编译器和链接器,而是通过调用本章所

35

众友科技 DSP实验开发系统

述的软件开发工具(C编译器、汇编器和链接器)来编译链接用户程序。编译器等所用参数可以通过工程选项设置。选择命令Project-Options或从工程窗口的关联菜单中选择Options。弹出对话框。在此对话框中用户可以参阅有关编译器、汇编器和连接器方面的内容,或者查阅联机帮助“Using Code Composer Studio+ The Project Environment+ Setting

Build Options”.

用户也可以对特定的文件设置编译链接选项。操作方法为在工程视窗中右键单击需要设置的程序,选择File Specific Options然后在对话框中设置相应选项。

2.2.6 调试

CCS提供了异常丰富的调试手段。在程序执行控制上,CCS提供了4种单步执行方式。

从数据流角度上,用户可以对内存单元和寄存器进行查看和编辑,载入/输出外部数据,设置探针等。一般的调试步骤为:调入构建号的可执行程序,先在感兴趣的程序段设置断点,然后执行程序停留在断点处,查看寄存器的值或内存单元的值,对中间数据进行在线(或输出)分析。

反复这个过程直到程序完成预期的功能。

2.2.7 载入可执行程序

命令File-Load Program载入编译链接好的可执行程序。用户也可以修改“Program

Load”属性,使得在构建工程后自动装入可执行程序。设置方法为选择命令Options-Program

Load。

2.2.8 使用反汇编工具

36

众友科技 DSP实验开发系统

在某些时候(例如调试C语言关键代码),用户可能需要深入到汇编指令一级。此时可以CCS的反汇编工具。用户的执行程序(不论是C程序或是汇编程序)载入到目标板或仿真器时,CCS调试器自动打开一个反汇编窗口。

对每一条可反汇编的语句,反汇编窗口显示对应的反汇编指令(某些C语句一条可能对应几条反汇编指令),语句所处地址和操作码(即二进制机器指令),当前程序指针PC(Program Point)所在语句用彩色高亮表示。当源程序为C代码时,用户可以选择使用混合C源程序(C源代码和反汇编指令显示在通用窗口)或汇编代码(只有反汇编指令)模式显示。

除在反汇编窗口中可以显示反汇编代码外,CCS还允许用户在调试窗口中混合显示C和汇编语句。用户可以选择命令View-Mixed Source/Asm,则在其前面出现一对选中标志。选择Debug-Go Main,调试器开始执行程序并停留在main()处C源程序显示在编辑窗中,与C语句对应的汇编代码以暗色显示在C语句下面。

2.2.9 程序执行控制

在调试程序时,用户会经常用到复位、执行、单步执行等命令。我们统称其为程序执行控制。下面我们依次介绍CCS的目标板(包括仿真器)复位、执行和单步操作。

1、CCS提供了3种方法复位目标板

(1) Reset DSP:Debug-Reset DSP命令初始化所有的寄存器内容并暂停运行中的程序。如果目标板不响应命令,并且用户正在使用一基于核的设备驱动,则DSP核可能被破坏,用户需要重新装入核代码。对仿真器,CCS复位所有寄存器到其上电状态。

(2) Restart:Debug-Restart命令将PC恢复到当前载入程序的入口地址。此命令不执行当前程序。

(3) GoMain:Debug-GoMain命令在主程序入口处设置一临时断点,然后开始执行。当程序被暂停或遇到一断点时,临时断点被删除。此命令提供了一快速方法来运行用户应用程序。

2、CCS提供了4种执行操作

(1) 执行程序。命令为Debug-Run或单击调试工具条上的“执行程序”

序运行直到遇到断点为止。

(2) 暂停执行。命令为Debug-Halt或单击调试工具条上的“暂停执行”

序运行直到遇到断点为止。

(3) 动画执行。命令为Debug-Animate或单击调试工具条上的“动画执行” 按钮。按钮。程按钮。程用户可以反复运行执行程序,直到遇到断点为止。

(4) 自由运行。命令为Debug-Run Free。此命令禁止所有断点,包括探针断点和Profile断点,然后运行程序。在自由运行中对目标处理的任何访问都将恢复断点。若用户在基于JTAG设备驱动上使用模拟时,此命令将断开与目标处理器的连接,用户可以拆卸JTAG或MPSD电缆。在自由运行状态下用户也可以对目标处理器进行硬件复位。注意在仿真器中Run Free无效。

3、CCS提供的单步执行操作

CCS提供的单步执行操作有4种类型,它们在调试工具条上分别有对应的快捷按钮(参阅3.8.2.4)。罗列如下:

(1) 单步进入(快捷键F8)。命令为Debug-Step Into或单击调试工具条上的“单步

37

众友科技 DSP实验开发系统

进入”按钮。当调试语句不是最基本的汇编指令时,此操作将进入语句内部(如子程序或软件中断)调试。

(2) 单步执行:命令为Debug-Step Over或单击调试工具条上的“单步执行”按钮。此命令将函数或子程序当作一条语句执行,不进行其内部调试。

(3) 单步跳出(快捷键Shift+”)命令为Debug-Step Out或单击调试工具条上的“单步跳出”按钮。此命令将从子程序中跳出。

(4) 执行到当前光标处(快捷键Ctrl+F10).命令为Debug-Run to Cursor或单击调试工具条上的“执行到当前光标处”按钮。此命令使程序运行到光标所在的语句处。

2.2.10 断点设置

断点的作用在于暂停程序的运行,以便观察/修改中间变量或寄存器数值。CCS提供了两断点:软件断点和硬件断点。这可以在断点属性中设置。设置断点应当避免以下两种情形:

(1)将断点设置在属于分支或调用的语句上。

(2)将断点设置在块重复操作的倒数第一或倒数第二条语句上。

1、软件断点

只有当断点被设置而且被允许时,断点才能发挥作用。下面我们依次介绍断点的设置、删除和使能。

(1)断点设置

● 有两种方法可以增加一条断点:

使用断点对话框选择命令Debug-Breakpoints将弹出断点对话框。

在“Breakpoint Type”栏中可以选择“无条件断点(Break at Location)”或“有条件断点(Break at Location if expression is TURE)”。在“Location”栏中填写需要中断的指令地址。用户可以观察反汇编窗口,确定指定所处地址。对C代码,由于一条C语句可能对应若干条汇编指令。难以用唯一地确定位置。为此用户可以采用“file Name line line

number”的形式定位源程序中的一条C语句。例如“hello.C line 32”指明在hello.C程

38

众友科技 DSP实验开发系统

序从第32行处语句设置断点。断点类型和位置设置完成后,依次单击“Add”和“OK”按钮即可。断点设置成功后,该语句条用彩色光条显示,如果用户选择的是带条件断点,则“Expression”栏有效,用户可以按照3.8.6.13节所述GEL语法输入合适的表达式。当此表达式运算结果为真(ture=1)时,则程序在此断点位置暂停。否则继续执行下去。

● 采用工程工具条。

将光标移到需要设置断点的语句上,点击工程工具条上的“设置断点”按钮。则在该语句位置设置一断点,默认情况下为“无条件断点”。用户也可以使用断点对话框修改断点属性,例如将“无条件断点”改变为“有条件断点”。

(2)断点的删除

在断点对话框中,单击“Breakpoint”列表中的一个断点,然后点击“Delete”按钮即可删除此断点。点击“Delete all”按钮或工程工具条上的“取消所有断点”按钮,将删除所有断点。

(3)允许和禁止断点

在断点对话框中,单击“Enable All”或“Disable All”将允许或禁止所有断点。“允许”状态下,断点位置前的复选框有“对勾”符号。注意只有当设置一断点,并使其“允许”时,断点才发挥作用。

2、硬件断点

硬件断点与软件断点相比,它并不修改目标程序,因此适用于在ROM存储器中设叠断点或在内存读写产生中断两种应用。注意在仿真器中不能设置硬件断点。

添加硬件断点的命令为:Debug-Break point。对两种不同的应用目的,其设置方法为:

(1) 对指令拦截(ROM程序中设置断点),在断点类型(Breakpoint Type)栏中选择“H/W

breakpoint。在Location”栏中填入置断点语句的地址,其方法与前面所述软件断点地址设置一样。“Count”栏中填入发计数,即此指令执行多少此后断点才发生作用。依次单击“Add”和“OK”按钮即可。

(2) 对内存读写的中断,在断点类型(Breakpoint Type)栏中选择。“Location”栏中填入存地址。“Count”栏中填入发计数N。则当读写此内存单元N次后,硬件断点发生作用。

硬件断点的允许/禁止和删除方法与软件断点的相同,不再赘述。

2.2.11 探针断点

CCS的探针断点可提供一种手段允许用户在特定时刻从外部文件中读入数据或写出数据到外部文件中。3.8.6.2节详细介绍了探针断点的设置与使用,此处略去不述。

2.2.12内存、寄存器和变量操作

在调试过程中,用户可能需要不断观察和修改寄存器、内存单元和数据变量。下面,我们依次介绍如何修改内存块,如何查看和编辑内存单元、寄存器和数据变量。

1、内存块操作

CCS提供的内存块操作包括拷贝数据块和填充数据块这在数据块初始化时较为有用。

(1)拷贝数据块

功能:拷贝某段内存到一个新位置。

命令:Edit-Memory-Copy,在对话框中填入源数据块首地址、长度和内存空间类型以及目标数据块首地址和内存空间类型即可。

(2)填充数据块

功能:用特定数据填充某段内存。

39

众友科技 DSP实验开发系统

命令:Edit-Memory-Fill,在对话框中填入内存首地址、长度、填充数据和和内存空间类型即可。

2、查看、编辑内存

CCS允许显示特定区域的内存单元数据。方法为选择View-Memory或单击调试工具条上的“显示内存数据”按钮。在弹出对话框中输入内存变量名(或对应地址)、显示方式即可显示指定地址的内存单元。为改变内存窗口显示属性(如数据显示格式,是否对照显示等),可以在内存显示窗口中单击右键,从关联菜单中选择Properties即弹出选项对话框。如下图所示。

内存窗口选项包括以下内容:

(1) Address:输入需要显示内存区域的起始地址。

(2) Q-Value:显示整数时使用的Q值(定点位置)。新的整数值=整数/2Q。

(3) Format:从下拉菜单中选取数据显示格式。

(4) Use IEEE Float:是否使用IEEE浮点格式。

(5) Page:选择显示的内存空间类型-程序、数据或I/O。

(6) Enable Reference Buffer:选择此检查框将保存一特定区域的内存块照以便用于比较。例如,用户允许“Enable Reference Buffer”,并定义可寻地址范围为0x0000~0x002F。此区段的数据将保存到主机内存中。每次用户执行暂停目标板、命中一断点、刷新内存等操作时,编译器都将比较参考缓冲区(Reference Buffer)与当前内存段的内容。数值发生变换的内存单元将用红色突出显示。

(7) Start Address:用户希望保存到参考缓冲区的内存段的起始地址。只有当用户选择了“Enable Reference Buffer”检查框时此区域才被激活。

(8) End Address:用户希望保存到参考缓冲区的内存段的终止地址。只有当用户选择了“Enable Reference Buffer”检查框时此区域才被激活。

(9) Update Reference Buffer Automatically:若选择此检查框,则参考缓冲区的内容将自动被内存段(由定义参考缓冲区的起始/终止地址所规定的内存区域)的当前内容覆盖。

在“Format”栏下拉条中,用户可以选择多种显示格式显示内存单元。

编辑某一内存单元的方法为:在内存窗口中鼠标左键双击需要修改的内存单元,或者选择命令Edit-Memory-Edit,在对话框中指定需要修改的内存单元地址和内存空间类型,并输入新的数据值即可。注意输入数据前面加前缀“0x”为十六进制,否则为十进制。凡是前面所讲到的需要输入数值(修改地址、数据)的场合,均可输入C表达式。C表达式由函数

40

众友科技 DSP实验开发系统

名、已定义的变量符号、运算式等构成。下面的例子都是合法的C表达式。

例:C表达式举例

My Function 0x000+2×35×(mydata+10)

(int)My Function +0x100

PC+0x10

3、CPU寄存器

(1) 显示寄存器

选择命令View-CPU Registers-CPU Register或单击调试工具条上的“显示寄存器”

按钮。CCS将在CCS窗口下方弹出一寄存器查看窗口。

(2) 编辑寄存器

有3种方法可以修改寄存器的值:

● 命令Edit Edit Register。

● 在寄存器窗口双击需要修改的寄存器。

● 在寄存器窗口单击右键,从弹出的菜单中选择需要修改的寄存器。

三种方法都将弹出一编辑对话框,在对话框中指定寄存器(如果在“Register”栏中不是所期望的寄存器)和新的数值即可。

4、编辑变量

命令Edit-Edit Variable可以直接编辑用户定义的数据变量,在对话框中填入变量名(Variable)和新的数值(Value)即可。用户输入变量名后,CCS会自动在Value栏显示原值。注意变量名前应加“*”前缀,否则显示的是变量地址。在变量名输入栏,用户可以输入C表达式,也可以采用偏移地址@内存页方式来指定某内存单元。例如:*0x1000@prog,0x2000@io和0x1000@data等。

5、通过观察窗口查看变量

在程序运行中,用户可能需要不间断地观察某个变量的变换情况CCS提供了观察窗口(Watch Windows)用于在调试过程中实时地查看和修改变量值。

(1)加入观察变量

选择命令View-Watch Window或单击调试工具条上的“打开观察窗口” 按钮,则观察窗口出现在CCS的下部位置。CCS最多提供4个观察窗口,在每一个观察窗口用户都可以定义若干个观察变量。有3种方法可以定义观察变量:

● 将光标移到观察窗口中按“Insert”键,弹出表达式加入对话框,在对话框中填入变量符号即可。

● 将光标移到观察窗口中单击右键,从弹出菜单中选择“Insert New Expression”,在表达式加入对话框中填入变量符号即可。

● 在源文件窗口或反汇编窗口双击变量,则该变量反白显示,右键单击连接“Add to

Watch Window”则该变量直接进入当前观察窗口列表。

表达式中的变量符号当作地址还是变量处理取决于目标文件是否包含有符号调试信息。若在编译链接时有-g选项(此意味着包含符号调试信息),则变量符号当作真实变量值处理,否则作为地址。对应后一种情况,当显示该内存单元的值,应当在其前面加上前缀星号“*”。

(2)删除某观察变量

有两种方法可以从观察窗口中删去某变量:

● 双击观察窗口中某变量,选中后该变量以色彩亮条显示。按“Delete”键,则从列表中删除此变量。

41

众友科技 DSP实验开发系统

● 选中某变量,右键单击,然后选择“Remove Current Expression”.

(3)观察数组或结构变量

某些变量可能包含多个单元,如数组、结构或指针等,这些变量加入到观察窗口中时,会有“+”或“—”的前缀。“+”表示此变量被折叠,组成单元内容不显示,“—”表示此变量的组成单元已展开显示。用户可以通过选中变量,然后按回车键来切换这两种状态。

(4)变量显示格式

用户可以在变量名后面跟上格式后缀以显示不同的数据格式,例如:My Var,x或My Var,d等。用户也可以用“快速观察”按钮来观察某变量。有两种操作方法:

● 在调试窗口中双击选中需要观察的变量,使其反白。点击调试工具条上的“快速观察”按钮。

● 选中需要观察的变量后,右键单击从关联菜单中选择“Quick Watch”菜单。

操作完成后,在弹出对话框中单击“Add Watch”按钮,即可将变量加入到观察窗口变量列表中。

2.2.13数据输入与结果分析

在开发应用程序时,常常需要使用外部数据。例如,用户为了验证某个算法的正确性,需要输入原始数据,DSP程序处理完后,需要对输出结果进行分析。CCS提供了两种方法来调用和输出数据。

(1)利用数据读入/写出功能。即调用命令“File-Data(Load/Save)”。这种方式适合于偶尔的、手工的读入和写出数据场合。

(2)利用探针(Probe功能)。即设置探针,通过将探针与外部文件关联起来读入和写出数据。这种方式适用于自动调入和输出数据场合。

2.2.14 载入/保存数据

“载入/保存数据”功能允许用户在程序执行的任何时刻从外部文件中读入数据或保存数据到文件中。需要注意的是,载入数据的变量应当是预先被定义并且有效的。

1、载入外部数据

程序执行到适当时候,需要向某变量定义的缓冲区载入数据时,选择命令File-Data-Load命令,弹出文件载入对话框,选择预先准备号的数据文件。此后,弹出一装载对话框。“Address”栏和“Length”栏已被文件头信息自动填入。用户也可以在对话栏中重新指定变量名(或缓冲区首地址)和数据块长度。

2、保存数据到文件中

程序执行到适当时候需要保存某缓冲区时,选择命令File-Data-Store弹出一对话框要求给出输出文件名。完成后,弹出一“Store Memory into File”对话框。输入需要保存变量名(和数据块首地址)和长度,单击“OK”按钮即可。

2.2.15 外部文件输入/输出

CCS提供了一种“探针(probe)”断点来自动读入外部文件。所谓探针是指CCS在源程序某条语句上设置的一种断点。每个探针断点都有相应的属性(由用户设置)用来与一个文件的读/写相关联。用户程序运行到探针断点所在语句时,自动读入数据或将计算结果输出到某文件中(依此断点属性而定)由于文件的读写实际上调用的是操作系统功能,因此不能保证这种数据交换的实时性。有关实时数据交换功能请参考帮助。

使用CCS文件输入/输出功能遵循以下步骤:

(1)设置探针断点。将光标移到需要设置探针的语句上,点击工程工具条上的“设置探

42

众友科技 DSP实验开发系统

针”按钮。光标所在语句被彩色光条高亮显示。取消设置的探针,亦点击按钮。此操作仅定义程序执行到何时读入或写出数据。

(2)选择命令“File-File I/O”,显示对话框。在此对话框中选择文件输入或文件输出功能(对应“File Input”和“File-Output”标签)。

假定用户需要读入一些数据,则在“File Input”标签窗口中点击“Add File”按钮,在对话框指定输入的数据文件。

注意此时该数据文件并未和探针关联起来,“Probe”栏中显示的是“Not Connected”。

(3) 将探针与输入文件(或者输出文件)关联起来。点击对话框中的“Add Probe Points”按钮,弹出Break Probe/Profile Points对话框。在“Probe Points”列表中,点击选中需要关联的探针。在本例中只定义了一个探针,故列表中只有一行。从“Connect”一栏中选择刚才加入的数据文件。点击“Replace”按钮。注意在“Probe Points”列表中显示探针所在的行已与文件对应起来。出现Break/Probe/Profile Point对话框。

(4)Break/Probe/Profile Point对话框设置完成后,回到“File I/O”对话框。“c:My

”出现在“File-Output”栏。在此对话框中,指定数据读入存放的起始地址(对文件输出为输出数据块的起始地址)和长度。起始地址可以用事先已定义的缓

43

众友科技 DSP实验开发系统

冲区符号代替。数据的长度以WORD为单位。对话框中的“Wrap Around”选项是指当读指针到达文件末尾时,是否回到文件头位置重新读入。这在用输入数据产生周期信号场合较为有用。

(5)“File I/O”对话框完成后,点击“OK”按钮,CCS自动检查用户的输入是否正确。将探针与文件关联后,CCS给出“File I/O”控制窗口。程序执行到探针断点位置调入数据时,其进度会显示在控制窗口内。控制窗口同时给出了若干按钮来控制文件的输入/输出进程。各按钮的作用分别如下所述:

运行按钮:在暂停后恢复数据传输。

停止按钮:中止所有的数据传输进程。

回退按钮:对文件输入,下一采入数据来自文件头位置;对数据输出,新的数据写往文件首部。

快进按钮:仿真探针被执行(程序执行探针所在语句)情形。

2.2.16 数据文件格式

1、CCS允许的数据文件格式有两种:

(1)COFF格式。二进制的公共目标文件格式,能够高效地存储大批量数据。

(2)CCS数据文件。此为字符格式文件,文件由文件头和数据两部分构成。文件头指明文件类型、数据类型、起始地址和长度等信息。其后为数据,每个数据占一行。数据类型可以为十六进制、整数、长整数和浮点数。

2、CCS数据文件文件头格式为:

文件类型 数据类型 起始地址 数据页号 数据长度

解释如下:

文件类型:固定为16510

数据类型:取指1~4,对应类型为十六进制、整数、长整数和浮点数。

起始地址:十六进制,数据存放的内存缓冲区首地址。

数据页号:十六进制,指明数据取自哪个数据页。

数据长度:十六进制,指明数据块长度,以WORD为单位。

例:某CCS数据文件的头几行内容。

651201200:起始地址0,数据类型为整数,数据长度为200。

366

-1479

??

2.2.17 利用图形窗口分析数据

运算结构也可以通过CCS提供的图形功能经过一定处理显示出来,CCS提供的图形显示包括时频分析、星座图、眼图和图像显示。用户准备好需要显示的数据后选择命令View-Graph,设置相应的参数,即可按所选图形类型显示数据。

各种图形显示所采用的工作原理基本相同,即采用双缓冲区(采集缓冲区和显示缓冲区)分别存储和显示图形。采集缓冲区存在于实际或仿真目标板,包含用户需要显示的数据区。

显示缓冲区存在于主机内存中,内容为采集缓冲区的拷贝。用户定义好显示参数后,CCS从采集缓冲区中读取规定长度的数据进行显示。显示缓冲区尺寸可以和采集缓冲区的不同。如果用户允许左移数据显示(Left-Shifted Data Display),则采样数据从显示区的右端向左端循环显示。“左移数据显示”特性对显示串行数据特别有用。

CCS提供的图形显示类型共有9种,每种显示所需的设置参数各不相同。限于篇幅,这

44

众友科技 DSP实验开发系统

里仅举例时频图单曲线显示设置方法。其他图形的设置参数说明请查阅在线帮助“Help-ceneral Help-How to Display Results Graphically?”。

选择命令View-Graph-Time/Frequency弹出Time/Frequency对话框,在“Display Type”中选择“Signal Time”(单曲线显示),则弹出图形显示参数设置对话框如下图所示。

需要设置的参数解释如下:

(1)显示类型(Display Type):单击“Display Type”栏区域,则出现显示类型下拉菜单条。点击所需的显示类型,则Time/Frequency对话框(参数设置)相应随之变换。

(2)视图标题(Graph Title):定义图形视图标题。

(3)起始地址(Start Address):定义采样缓冲区的起始地址。当图形被更新时,采样缓冲区内容亦更新显示缓冲区内容。对话框栏允许输入符号和C表达式。当显示类型为“Dual

Time”时,需要输入两个采样缓冲区首地址。

(4)数据页(Data Page):指明选择的采用缓冲区来自程序、数据还是I/O空间。

(5)采样缓冲区(Acquisition Buffer Size):用户可以根据所需定义采样缓冲区的尺寸。例如当一次显示一帧数据时,则缓冲区尺寸为帧的大小。若用户希望观察串行数据,则定义缓冲区尺寸为1,同时允许左移数据显示。

(6)索引递增(Index Increment):定义在显示缓冲区中每隔几个数据取一个采样点。

(7)显示数据尺寸(Display Data Size):此参数用来定义显示缓冲区大小。一般地,显示缓冲区的尺寸取决于“显示类型”选项。对时域图形,显示缓冲区尺寸等于要显示的采样点数目,并且大于等于采用缓冲区尺寸。若显示缓冲区尺寸大于采样缓冲区尺寸,则采样数据可以左移到显示缓冲区显示。对频域图形,显示缓冲区尺寸等于FF帧尺寸,取整为2的次幂。

(8)DSP数据类型(DSP Data Type):

DSP数据类型可以为:

32比特有符号整数;

32比特无符号整数;

32比特浮点数;

45

众友科技 DSP实验开发系统

32比特IEEE浮点数;

16比特有符号整数;

16比特无符号整数;

8比特有符号整数;

8比特无符号整数。

(9)Q值(Q-Value):采样缓冲区中的数据始终为16进制数,但是它表示的实际数取值范围由Q值确定。Q值为定点数定标值,指明小数点所在的位置。Q 值取值范围为0~15,假定Q值为xx,则小数点所在的位置为从最低有效位向左数的第xx位。

(10)采样频率(Sampling Rate(HZ)):对时域图形,此参数指明在每个采样时刻定义对同一数据的采样数。假定采样频率为xx,则一个采样数据对应xx个显示缓冲区单元。由于显示缓冲区尺寸固定,因此时间轴取值范围为0~(显示缓冲区尺寸/采样频率)。对频域图形,此参数定义频率分析的样点数。频率的取值范围为0~采样率/2。

(11)数据绘出顺序(Plot Data From):此参数定义从采样缓冲区取数的顺序:

从左至右:采样缓冲区的第一个数被认为是最新或最近到来数据。

从右至左:采样缓冲区的第一个数被认为是最旧数据。

(12)左移数据显示(Left-Shifted Data Display):此选项确定采样缓冲区与显示缓冲区的哪一边对齐。用户可以选择此特性允许或禁止。若允许,则采样数据从右端填入显示缓冲区。每更新一次图形,则显示缓存数据左移,留出空间填入的采样数据。注意显示缓冲区初始化为0。若此特性被禁止,则采样数据简单地覆盖显示缓存。

(13)自动定标(Autoscale):此选项允许Y轴最大值自动调整。若此选项设置为允许,则视图被显示缓冲区数据最大值归一化显示。若此选项设置为禁止,则对话框中出现一新的设置项“Maximum Y-Value”,设置Y轴显示最大值。

(14)直流量(DC Value):此参数设置Y轴中点的值,即零点对应的数值。对FFT幅值显示,此区域不显示。

(15)坐标显示(Axes Display):此选项设置X、Y坐标轴是否显示。

(16)时间显示单位(Time Display Unit):定义时间轴单位。可以为秒(s),毫秒(ms),微秒(μs)或采样点。

(17)状态条显示(Status Bar Display):此选项设置图形窗口的状态条是否显示。

(18)幅度显示比例(Magnitude Display Scale):有两类幅度显示类型-线性或对数显示(公式为20log(X))。

(19)数据标绘风格(Data Plot Style):此选项设置数据如何显示在图形窗口中。Line:数据点之间用直线相连,Bar:每个数据点用竖直线显示。

(20)栅格类型(Grid Style):此选项设置水平或垂直方向底线显示。有3个选项。No

Grid:无栅格,Zero Line:仅显示0轴,Full Grid:显示水平和垂直栅格。

(21)光标模式(Cursor Mode):此选项设置光标显示类型。有3个选项。No Cursor:无光标,Data Cursor:在视图状态栏显示数据和光标坐标,Zoom Cursor:允许放大显示图形。方法:按住鼠标左键拖动,则定义的矩形框被放大。

2.2.18 评估代码性能

用户完成一个算法设计和编程后,一般需要测试程序效率以便进一步优化代码。CCS提供了“代码性能评估”工具来帮助用户评估代码性能。其基本方法为:在适当的语句位置设置断点(软件断点或性能断点),当此程序执行通过断点时,有关代码执行的信息被收集并统计。用户通过统计信息评估代码性能。

46

众友科技 DSP实验开发系统

2.2.19测量时钟

测量时钟用来统计一段指令的执行时间。指令周期的测量随用户使用的设备驱动不同而变化。假若设备驱动采用JTAG扫描通道,则指令周期采用片内分析(on-chip analysis)计数。

使用测量时钟的步骤为:

(1)首先允许时钟计数。选择命令Profile-Enable Clock。有一选中符号出现在菜单项“Enable Clock”前面。

(2)选择命令Profile-View Clock。则时钟窗口出现在CCS主窗口下部位置。

(3)假定需要测试A和B两条指令(B在A之后)之间程序段的执行时间。为此,在B之后至少隔4个指令位置设置断点C,然后在位置A设置断点A,注意先不要在位置B设置断点。

(4)运行程序到断点A,双击时钟窗口,使其归零,然后清除A断点。

(5)继续运行程序到C断点,然后记录Clock的值,其为A,C之间程序运行时间r1。

(6)用上述方法测量B、C断点之间的运行时间r2。则(r1-r2)即为断点A、B之间的执行时间。用这种方法可以排除由于设置断点引入的时间测量误差。

注意上述方法中设置的是软件断点(有关软件断点的使用见3.8.5.4节)。

选择命令Profile-Clock Setup可以设置时钟属性。弹出CLOCK SETUP对话框。

对话框中的各输入栏解释如下:

(1)Count:计数的单位。对simulator,只有CPU执行周期(CPU Cycles)选项。

(2)Instruction Cycle:执行一条指令所花费时间,单位为纳秒。此设置将周期数转化为绝对时间。

(3)Pipeline Adjustments:流水线调整花费周期数。当遇到断点或暂停CPU执行时,CPU必须重新刷新流水线,耗费一定周期数。为了获得较好精度的时钟周期计数,需要设置此参数。值得注意的是,CPU的停止方式不同,其调整流水线的周期数亦不同。此参数设置只能提高一定程度的精度。

(4)Reset Option:用户可以选择手工(Manual)或自动(Auto)选项。此参数设置指令周期计数值是否自动复位(清0)。若选择“自动”则CLK在运行目标板之前自动清零,否则其值不断累加。

2.2.20 性能测试点

性能测试点(Profile Points)是专门用来在特定位置获取性能信息的断点。在每个性能测试点一下,CCS记录本测试点命中次数以及距上次测试点之间的指令周期数等信息。与软件断点不同的是,CPU在通过性能测试点时并不暂停。

1、设置——性能测试点

将光标置在某特定(需要测试位置)源代码行或反汇编代码行上,单击工程工具条上

47

众友科技 DSP实验开发系统

的“设置性能断点”图标。完成后此代码行以彩色光条显示。

2、删除某性能测试点

选择命令Profile-Profile Point,则弹出性能测试点对话框。从Profile Point列表中选择需要删除的测试点,单击“Delete”即可。若注意单击对话框中的“Delete All”按钮或工程工具条上的“取消性能断点”图标将删除所有测试点。

3、允许和禁止测试点

测试点设置后,用户可以赋予它“允许”或“禁止”属性。只有当测试点被“允许”后,CCS才在此点统计相关的性能信息。若测试点不被删除,则它随工程文件保存,在下次调入时依然有效。操作方法为:在上述对话框中单击测试点前面的复选框,有“√”符号表示允许,否则表示禁止。单击“Enable All”或“Disable All”按钮将允许或禁止所有测试点。

2.2.21 查看和定义内存映射

内存映射规定用户代码和数据在内存空间的分配。一般地,用户在链接命令文件(.cmd)中定义内存映射表。除此之外,CCS还提供了在线手段来定义内存映射。用户允许“内存映射”时,CCS调试器检查每一条内存读写命令,看它是否与定义的内存映射属性相矛盾。若用户试图访问未定义内存或受保护区域,则CCS仅显示其默认值,而不访问内存。

选择命令Option-Memory Map,弹出对话框。用户可以利用对话框查看和定义内存映射。在默认情况下,“Enable Memory Mapping”复选框是未选中的,目标板上所有RAM都是有效可访问的。为利用内存映射机制,确保“Enable Memory Mapping”复选框选中(单击复选框,前面出现√符号)。选择需要定义的内存空间(代码、数据或I/O)。在“Starting Address”和“Length”栏中输入需要映射的内存块起始地址和长度,选择读/写属性。单击“Add”按钮,则新的内存映射定义被输入。用户也可以选中一个已定义好的内存映射并删除之。

用户新定义的内存区域可以和以前定义的相重叠,重叠部分的属性按新定义的来算。注意“Reset”按钮将禁止所有内存单元的读写。

2.2.22利用GEL来定义内存映射

48

众友科技 DSP实验开发系统

用户可以利用GEL文件来定义内存映射。在启动CCS 时,将GEL文件名作为一个参数引用,则CCS自动调入GEL文件,允许内存映射机制。

下列GEL函数可用来定义内存映射。下面给出了一个利用GEL函数定义内存映射的例子。在本例中,程序空间和数据空间[0:0xF000]内存段被定义为可读可写。

例:利用GEL函数来定义内存映射。

StartUp()

{

GEL-Map On();

GEL-Map Reset():

GEL-Map Add(0,0,0Xf000,1,1);

GEL-Map Add(0,1,0Xf000,1,1);

}

2.2.23 通用扩展语言GEL

GEL(General Extension Language)通用扩展语言是一种与C类似的解释性语言。利用GEL语言,用户可以访问实际/仿真目标板,设置GEL菜单选项,特别适用于自动测试和自定义工作空间。

2.2.24 GEL函数调用

CCS提供了3种方法调用GEL函数:在命令行中,在GEL菜单中和自动调用GEL函数。

(1)在命令行中调用GEL函数,选择命令Edit-Edit command,弹出命令行对话框,输入调用GEL函数的命令后,用户可以在GEL工具条中选定命令行(命令View-GEL Tool使能GEL工具条),并执行之。

(2)在GEL菜单中调用GEL函数其方法为:先载入包含GEL函数的.gel文件。GEL函数驻留在CCS内,直到用户从工程中删除GEL文件。GEL加载器在载入GEL文件时检查GEL函数语法,并显示可能的错误信息。只有改正所有错误后,CCS才能使用GEL函数。选择命令File-Load GEL或在工程窗口中右键单击“GEL Files”文件夹。从关联菜单中选择“Load GEL”可以载入.gel文件。GEL文件调入后,GEL函数自动出现在主菜单的GEL下拉菜单中。

(3)自动调用GEL函数,CCS提供了一个名为StartUp的GEL函数,可以在CCS启动时自动载入运行。利用此函数,用户可以建立起所需的工作环境。

2.2.25 GEL语法

GEL是C编程语言的子集。在GEL程序中,用户不能声明参数变量,所有变量都是由DSP程序定义并存在的。实际上,仿真目标板中GEL函数就是利用这些已有变量完成相应的功能。

GEL函数定义形式为:

FuncName([parameter1[,parameter2?[,parameter6]?]]

{statements}

其中参数说明如下:

FuncName:GEL函数名称。

Parameters:GEL函数参数。

Statements:GEL函数语句。

例:GEL函数参数使用

Initialize(a, filename, b)

{ targ Var=0;

49

众友科技 DSP实验开发系统

a=0;

GEL_Load(Filename);

Return b*b;}

Initialize GEL函数执行后,“target Symbol”变量被赋值为0,“”被调入CCS中,参数“b”赋予常数116.220,在执行GEL函数之前,必须保证参数列表中的DSP符号信息已经被载入到CCS中。例如在例中执行Initialize函数前,包含“target Symbol”符号信息的COFF文件应已经被载入到CCS中。

50

更多推荐

文件,显示,用户,数据,断点