480 likes | 612 Views
第 5 章 CCS3.1 集成调试环境简介. 5.1 CCS3.1 集成调试环境主要菜单 及功能介绍. 系统的配置之后,给实验开发板供电,双击快捷方式 CCStudio 3.1 文件图标,就可进入集成调试环境。. 调试程序的一般步骤 创建工程: 添加文件到工程中: 编译连结和调试程序:. 5.1.1 Project (项目)菜单. CCS 集成调试环境不能直接将汇编源代码或 C 语言源代码文件 Build 生成 DSP 可执行代码,必须使用项目( Project )来管理整个设计和调试过程。 项目文件保存时为* .pjt 文件。.
E N D
5.1 CCS3.1集成调试环境主要菜单及功能介绍 系统的配置之后,给实验开发板供电,双击快捷方式CCStudio 3.1文件图标,就可进入集成调试环境。
调试程序的一般步骤 创建工程: 添加文件到工程中: 编译连结和调试程序:
5.1.1 Project(项目)菜单 CCS集成调试环境不能直接将汇编源代码或C语言源代码文件Build生成DSP可执行代码,必须使用项目(Project)来管理整个设计和调试过程。 项目文件保存时为*.pjt文件。
Project菜单中的主要命令 · New 新建一个项目,项目保存至新建项目文件夹中。 · Open 打开一个已有的项目。 · Add Files to Project 将文件加载到该项目中。
项目中可以加入的文件的扩展名: *.C C源程序文件,项目管理将对该类文件进行编译和链接。 *.ASM 汇编源程序文件,项目管理将对该类文件进行汇编和链接。 *.OBJ 目标文件,项目管理将对该类文件进行链接。 *.LIB 库文件,项目管理将对该类文件进行链接。 *.CMD链接命令文件,项目管理在链接各个文件时根据此文件分配系统程序空间及数据空间。 对于头文件和在程序中用include引用的文件,项目管理会自动加入。 项目管理不允许用户添入其它类型的文件。
·Save 将一个已打开的项目保存。 ·Close 将一个已打开的项目关闭。 ·Add Files to Project… 添加该项目中用到的所有文件和所需的库文件。 ·Compile Files 对项目中的C语言和汇编语言源代码文件进行编译。 ·Build 对项目进行编译、汇编和链接,生成可执行文件为*.OUT,对于没有修改的源程序文件不重新编译。
·Rebuild All 项目重新进行一次编译、汇编和链接,生成可执行文件为*.OUT。 ·Stop Build 停止对项目的编译、汇编和链接。 ·Show Project Dependencies 显示该项目中用到的所有文件和所需的库文件。 ·Scan All File Dependencies 详细查看该项目中用到的所有文件和所需的库文件。 ·Build Options 对编译器、汇编器和链接器的参数进行配置。 ·Recent Project Files 显示最近打开过的项目。
可以配置:寄存器优先调试,特定函数优先调试,或某个子程序优先调试等选项。可以配置:寄存器优先调试,特定函数优先调试,或某个子程序优先调试等选项。 通常在Build时采用默认设置。
5.1.2 View(观察)菜单 ·Disassembly 观察反汇编程序窗口。 当将DSP可执行程序*.OUT文件载入目标系统后,CCS集成调试环境将自动打开一个反汇编窗口,反汇编窗口根据存储器的内容显示反汇编指令和符号信息。
·Memory 观察存储器窗口。 Address:输入需要观察的存储器的起始地址。 Format:选择存储器的显示格式。 Page:选择显示存储器的类型。
在Watch Window中加入一个新的表达式: 在Watch Window中的Name文件框输入要观察的变量名,或者在程序窗口择选中要观察的变量名,然后单击右键,再在打开的快捷菜单中选择Add to Watch Window即可。
5.1.3 Debug(调试)菜单 Debug菜单中包含所有可用的调试命令 。 ·Breakpoints 断点设置。 将鼠标放在程序中需设置断点处,选择Breakpoints并进行相应的设置,可在程序中设置断点。 移动鼠标至需要设置断点的程序语句上,右击鼠标,在弹出的快捷菜单中选择Toggle breakpoint。 若要取消断点,则选中相应的断点处语句,再右击鼠标,在弹出的快捷菜单中再次选择Toggle breakpoint。
5.2 工作窗口区 在CCS集成调试环境中,常用工作窗口有Files(文件)窗口、Disassembly(反汇编程序)窗口、CPU寄存器窗口、Memory(存储器)窗口以及Watch(观察)窗口等。 根据需要,用户可对这些窗口分别打开、关闭、调整大小、移动和浏览窗口的内容等。
1. Files(文件)窗口 该窗口包括当前系统用到的GEL文件和项目。 GEL文件:包括缺省的f2407.gel文件。 项目:包括用户用到的头文件、用include定义的引用文件和用户建立或添加的C源程序文件*.C、汇编源程序文件*.ASM、目标文件*.OBJ、库文件*.LIB和链接命令文件*.CMD。
添加文件:把鼠标移到相应的*.pjt文件夹处,单击右键,可以从弹出的快捷菜单中选择Add Files to Project选项,选择添加适当的文件; 删除文件:把鼠标移到相应文件处,单击右键,在弹出的快捷菜单中选择Remove from project选项即可。
Disassembly(反汇编程序)窗口 显示程序的反汇编代码和程序存储器的内容。 在窗口中用一反显高亮条来表示当前程序指针。 可用鼠标单击汇编语句的方法来设置断点,再单击一次,则取消设置的断点。
CPU寄存器窗口 显示在程序调试过程中的CPU寄存器(程序指针PC、累加器ACC、状态寄存器ST0和ST1、重复计数器RTC、辅助寄存器XAR0-XAR7、中断使能寄存器IER和中断标志寄存器IFR等)的状态。 用户可通过CPU寄存器窗口来监视程序的执行过程。 若要改变寄存器内容,则可用鼠标单击需要改变的寄存器,直接输入修改值。
状态寄存器窗口 显示状态寄存器中的各个状态位: SXM、OVM、TC、C、Z、N、V、PM、OVC、INTM、DBGM、PAGE0、VMAP、SPA、LOOP、EALLOW、IDLESTAT、AMODE、OBJMODE、CNT、M0M1MAP、XF及ARP。 用户可以很清楚地看到程序执行过程中各状态位的变化。 若要改变状态位内容,则可用鼠标单击需改变的状态位,直接输入修改的值。
Memory(存储器)窗口 显示存储器的内容。 存储器: 程序存储器; 数据存储器; I/O空间。 改变存储器内容,可用鼠标单击需改变的存储器地址,再输入修改值。 注意,某些存储器内容不能被改变。
Watch(观察)窗口 显示所选择的变量、寄存器和存储器的内容 。 7. Build(建立)状态窗口 对项目进行编译、汇编和链接时,显示一些状态信息。 如果在编译、汇编和链接过程中发现错误,则该窗口显示出错误类型和错误的位置。 双击错误信息处,鼠标跳到程序中相应的位置。
5.3 4个基本文件和1个库函数文件简介 在CCS3.1集成调试环境中可以直接编写汇编语言程序和C语言程序,编写程序完成后可直接运行编译链接等调试。 编写模块化的程序块:在进行调试之前,一般需要1个库函数文件和书写4种格式的文件:C语言文件,汇编语言文件,头文件和命令文件。 在编写这4类文件时,通常要用到一些汇编伪指令。
定义段的伪指令 定义段的伪指令:把汇编语句程序的各部分与适当的段联系起来。 (1).asect 创建具有绝对地址的初始化命名段。包含代码或数据。在绝对段内,用户可以使用.label伪指令来定义可重定位标号。 (2).bss 为未初始化的变量。在.bss段内保留存储器空间。 (3).sect 定义初始化命名段并把后续代码或数据与该段相联系。用.sect定义的段可包含代码或数据。 (4).text 标示.text段内代码部分。.text段通常包含可执行代码。 (5).usect 在未初始化命名段内保留空间。.usect伪指令和.bss伪指令相类似,但是它允许用户与段.bss分开保留空间。
初始化常数的伪指令 (1).bes和.space:在当前段中保留特定的位数。汇编器用0填充这些保留位。用户可以通过把位数乘16来保留规定的字数。 当使用.space的标号时,指向保留位的第一个字。 当使用.bes的标号时,指向保留位的最后一个字。 (2).byte:将一个或多个8位的数值置入当前段连续的字中。除了每个数值的宽度限制为8位以外,与.word类似。 (3).field:将单个数值置入当前字规定的位数中。用户可以用.field伪指令将多个域(field)组装到单个字中,在字被填满之前,汇编器将不使SPC增量。
(4).float和.bfloat:计算单精度32位IEEE格式浮点数的值,并存入当前段的两个连续的字中,先存储低字,后存储高字。(4).float和.bfloat:计算单精度32位IEEE格式浮点数的值,并存入当前段的两个连续的字中,先存储低字,后存储高字。 .bfloat: float前加“b”,意味着保证定义的浮点数不会跨越数据页的边界。 (5).int和.word:将2个或多个16位值置入当前段的连续字中。 (6).long和.blong:将32位数值置入当前段连续两个字中,先存放低位字。 .blong:保证目标不会跨越数据页的边界。 (7).string:将8位字符从一个或多个字符串置入当前段。除了把两个字符组装入每一个字外,与.byte类似。需要时,字符串中最后一个字用空字符(0)填充。
引用其它文件的伪指令 (1).copy和.include:告诉汇编器开始从其它文件中读入源语句。 当汇编器完成从copy(复制)或者include(包含)文件内读入源语句时,恢复从当前文件读源语句。 (2).def:识别在当前模块中定义且可以被其它模块使用的符号。 (3).global:声明外部符号。 .global伪指令对于已定义符号起.def的作用,对于未定义符号起.ref的作用。 (4).ref:识别在当前模块中使用但在其它模块中定义的符号。
条件汇编伪指令 条件汇编伪指令使用户能指示汇编器根据表达式求值结果的真或假来汇编代码的某些段。 (1).if/.elseif/.else/.endif:告诉汇编器根据表达式的值有条件地汇编代码块。 .if expression标示条件块的开始,如果.if条件为真,那么汇编后面的代码块。 .elseif expression如果.if条件为假且.elseif为真,那么汇编后面的代码块。 .else如果.if为假,那么汇编后面的代码块。 .endif标志条件块的末尾并结束条件块。
(2).loop/.break/.endloop:告诉汇编器根据表达式的值来重复地汇编代码块。(2).loop/.break/.endloop:告诉汇编器根据表达式的值来重复地汇编代码块。 .loop expression 标示可重复代码块的开始。 .break expression 告诉汇编器当.break表达式为假时继续重复汇编;如果表达式为真,那么转移到紧接在.endloop之后的代码。 .endloop 标志可重复块的末尾。
汇编时(Assembly-Time)符号伪指令 (1).asg:把字符串赋给替代符号。 (2).set和.equ:把常量值赋予符号。 (3).struct/.endstruct:建立类C语言的结构定义。不分配存储器,它们简单地创建可重复使用的符号模板。 (4).tag:把类C的结构特性赋给标号。不分配存储器,结构标号必须在使用之前定义。 (4).eval:对表达式求值,把结果转化为字符,并把字符赋给替代符号。 类C的结构定义使用户能把类似的元素组合在一起,然后把元素偏移量(offest)的计算留给汇编器。
其他伪指令 (1).end:终止汇编。它是一个程序的最后一条源语句。此伪指令与文件结束符具有同样的效果。 (2).label:定义一个特定的标号,表示当前段的装载地址。当段在一个地址处装载但在另一个地址处运行时,该指令特别有用。 (3).version:告诉汇编器该代码是属于哪一种处理器。.version伪指令必须出现在指令之前,否则将出错。
5.3.1 C语言程序文件 C语言程序文件名的后缀为.c。 程序中实现DSP要完成的功能,由开发人员编写。
5.3.4 中断向量文件 中断向量文件vectors.asm:定义了系统各种中断服务程序。 5.3.5 库文件rts2xx.lib rts2xx.lib库文件可在“C:\CCStudio_v3.1\C2400\cgtools\lib”下找到 。 Rts2xx.lib包含: ANSIC标准库; 系统启动程序_c_int0; 允许C访问特殊指令的函数和宏。
5.4 利用CCS编译器开发调试程序的简单步骤 5.4.1 4种类型的文件 DSPC语言应用程序,需要以下4种类型的文件: C语言文件* .C ; 汇编语言文件*.ASM:编写复位初始化程序和中断向量表 ; 头文件*.H:定义DSP内部寄存器的地址分配 ; 命令文件*.CMD:定义堆栈、程序和数据空间分配。 文件用Windows操作系统中的“记事本” 编写,也可以用其它一些常用的文本编辑器编写,只须储存成相应的格式 。 注意: 4种类型的文件和1个库文件必须储存在同一个文件夹中。
(1)单击桌面上的CCStudio 3.1图标。 5.4.2 建立一个项目 安装好CCS3.1调试仿真软件。 建立一个项目的步骤:
(2)选择Project→New选项。 输入名称,并存于相应的子目录中。 该子目录必须包含前面所述的4种类型的文件。
(3)选择Project→Add Files to Project选项,然后找到前面所述的子目录,将该项目中用到的*.asm,*.s*,*.cmd,*.o*,*.lib等文件添加到该项目中。 如果程序中调用了一些库函数,比如_atan、_sqrt、_cos、_sin等,则需将这些函数所在的库文件添加到该项目中。 把C语言文件、汇编语言文件、命令文件和rts2xx . lib文件添加到当前项目后,头文件不需要用户自己添加,只要头文件和项目在同一个目录下,链接时调试工具将自动识别。
在安装目录之下会出现一个文件夹C:\CCStudio_v3.1\MyProjects,可将用户调试的项目放在该文件夹中,也可以将项目放在其它子目录。 一个项目的信息储存在一个项目文件中(*.pjt)。 当项目中建立多个文件时,每个文件名都是唯一的。 注意:由于不同项目使用的源程序文件和头文件不尽完全相同,所以最好每个项目选择一个文件夹,保存自己的源程序文件和头文件,以便把不同的项目区分开来。
5.4.3 编译环境的简单配置 选择Option→Customize选项 选择Load Program After Build选项,在每次Build(重建)源程序文件之后,如果没有语法错误,则生成的可执行代码将自动下载到DSP芯片中。
5.4.4 编译源程序文件 选择Project→Build选项,则可实现C源程序文件的编译。 如果没有语法错误,则可直接生成可执行代码并直接下载到DSP芯片中; 如果有语法错误或其它类型的错误,则编译器会给出相应的提示,根据提示改掉错误后,再进行同样的操作,直到没有任何错误为止。
编译和运行程序步骤 (1) 选择Project→Rebuild All选项,或者单击工具条中的 按钮。 CCS就会重编译、汇编并链接项目中所有的文件。 如果在汇编链接过程中没有错误,则生成一个名字和项目名相同的可下载执行的输出文件.out文件; 如果在编译链接过程中出现错误,则系统会提示该错误的类型和位置,用户可根据此信息返回到源程序中修改。
(2) 默认的“. out”文件放在项目的调试目录中。 要想改变这个目录,可以在CCS工具条中选择不同的目录。 (3) 选择File→Load Program选项(下载程序),则调试工具将.out文件下载到实验开发板上。 也可以在CCS中直接设置编译完后直接下载功能,这样每次编译后可以自动完成程序下载。 当.out文件下载之后,就可对源程序进行仿真调试。(4) 选择View→Mixed Source选项。可以直接观察C源程序代码以及汇编的结果代码。 (5) 选择Debug→Go Main选项。可以直接开始主程序的执行。执行就暂停在主程序入口并用标示。
(6) 选择Debug→Run 选项或者单击运行工具栏中的按钮可以运行程序。 当用户执行程序很大时,又想观察程序执行到某处相应寄存器的值,可以将run和Break Points一起使用。程序运行到断点处自动停止,重新选择run之后又可继续运行。 在调试过程中,对于数据存储器空间中的某些单元可以进行修改,以满足调试的需要。
(7)选择Debug →StepInto选项或快捷键F8可以进行单步调试。 在调试过程中,菜单栏Debug调试中给出了一些调试选项,用户可以选择单步执行并进入子程序StepInto来观察程序执行每一步时相应寄存器单元的变化,或者选择单步执行但不进入子程序Step Over来观察执行子程序的结果,或者采用全速运行run来运行程序等。 (8) 选择Debug→Halt选项,可以暂停正在运行的程序。 (9) 可以在GEL菜单下查看程序执行过程中寄存器的变化。
View→Register选项 将CPU寄存器和状态寄存器窗口打开,在CPU寄存器中,用户可观察到在仿真过程中累加器、乘积寄存器、状态寄存器、PC指针、数据页指针DP、全局中断屏蔽寄存器、全局中断标志寄存器以及8个辅助寄存器的单元值变化状况。 选择View→Memory选项 输入该外设所处的地址范围,例如在作A/D采样时希望知道采样的结果寄存器中的值,则输入地址为70A0h,选择page(页面)为data(数据)页,其它选项采用默认值,则系统将打开一个从70A0h开始的数据存储器空间,用户就可以很方便的观察到A/D采样的结果。
View→ Watch window选项 输入要观察的变量或表达式,调试工具就打开一个Watch窗口,显示变量或表达式的值。