dsp程序编写和调试环境简介.ppt
第4章:程序编写和调试环境简介,4.1 程序的编写4.2 调试环境代码编译器CC简介4.3 调试一个程序的简单步骤4.4 头文件和命令文件,4.1 程序的编写,汇编伪指令分成7类(根据功能):定义段的伪指令;初始化常数的伪指令;调准段程序计数器的伪指令;引用其他文件的伪指令;条件汇编伪指令;在汇编时定义符号的伪指令;执行其他功能的伪指令。,4.1 程序的编写,1.段定义伪指令作用:把汇编语言程序的各个部分划分在适当的段中。.asect 创建具有绝对地址的初始化命名段;.bss 为未初始化的变量保留空间;.sect 定义已初始化的带命名段,其后的数据存入该段;.text 该段包含了可执行的代码;.usect 在一个未初始化的有命名的段中为变量保留空间。.data 通常包含了初始化的数据;段是通过叠加方式来建立的。例如在汇编器第一次遇到.data伪指令时,data指令后面的语句都被汇编在.data段中(直到汇编器遇到.text和.sect伪指令为止)。如果后来又在其他的段中遇到.data指令,其后的语句继续加到.data段中。这样虽然程序中是多个.data段分散在各处,但汇编器只创建一个.data段,它可以连续地被分配到内存中。,4.1 程序的编写,2.常数初始化伪指令.bes和.space 在当前段中保留特点的位。汇编器用0填充这些保留位。用户可以通过把位数乘16来保留规定的字数。当使用.space的标号时,指向保留位的第一个字;当使用.bes标号时,指向保留位的最后一个字。.byte 把一个或多个8位的值放入当前段的连续字中。该指令类似于.word,不同之处在于.word中的每个值的宽度限制为16位。.field 将单个数值置入当前字规定的位数中。.float和.bfloat 计算以IEEE格式表示的单精度(32位)浮点数,并存放在当前段的连续字中,高位先存。.float能自动按域的边界排列,.bfloat不能。.int和.word 把一个或多个16位数存放到当前段的连续字中。.int为无符号整型量,.word为带符号整型量。.long和.blong 把32位数存放到当前段连续的两个字中,高位字先存。.long能自动按长字的边界排列,.blong 却不能。.string 把8位的字符从一个或多个字符串中传送到当前段中。,4.1 程序的编写,3.段程序计数器(SPC)定位指令.align 使SPC对准1字(16位)128字的边界,这保证了紧接着该指令的代码从一个整字或页的边界开始。如果SPC已经定位于选定的边界,它就不会增加了。.align伪指令的操作数必须等于20216之间的一个2的幂值(尽管超过27的值没有意义)。不同的操作数代表了不同的边界定位要求。操作数为1是让SPC对准字边界;操作数为2是让SPC对准长字(偶地址)边界;操作数为128是让SPC对准页边界;不带操作数时,其默认值为128,即对准页边界。.even 调准SPC,使其指向下一个完整字。在使用.field伪指令之后,用户应当使用.even。如果.field指令未填满一个字,那么.even指令将使汇编器填满全字,并把未用的位填0。,4.1 程序的编写,4.引用其他文件的伪指令.copy/.include 伪指令告诉汇编器开始从其他文件中读源语句。当汇编读完以后,继续从当前文件中读源语句。从.copy文件中读的语句会打印在列表中,而从.include文件中读的语句不会打印在列表中。.def 确认一个在当前模块中定义的且能被其他模块使用的符号,汇编器把这个符号存入符号表中。.ref 确认一个在当前模块中使用但在其他段中定义的符号。汇编器把这个符号标注成一个未定义的外部符号,且把它装入目标符号表中,以便链接器能还原它的定义。.global 表明一个外部符号,使其他模块在连接时可以使用。如果在当前段定义了该符号,那么该符号就可以被其他模块使用,与.def功能相同;如果在当前段没有定义该符号,则使用了其他模块定义的符号,与.ref功能相同。一个未定义的全局符号只有当它在程序中使用的时候,链接器才对其进行处理。,4.1 程序的编写,5.控制条件汇编的伪指令.if/.elseif/.else/.endif 这些指令告诉汇编器,根据表达式的值条件汇编一块代码。.if 表示一个条件块的开始,如果条件为真就汇编紧接着的代码;.elseif是表示如果.if的条件为假,而.elseif的条件为真,就汇编紧接着的代码;.endif结束该条件块。.loop/.break/.endloop 告诉汇编器按照表达式的值循环汇编一块代码。.loop标注一块循环代码的开始;.break告诉汇编器当表达式为假时,继续循环汇编,当表达式为真时,立刻转到.endloop后的代码去执行;.endloop标注一个可循环块的末尾。,4.1 程序的编写,6.在汇编时定义符号的伪指令作用:汇编时的定义符号指令是使有意义的符号名与常数值或字符串相等同。.asg 规定一个字符串与一个替代符号相等,并将其存放在替代符号表中。当汇编器遇到一个替代符号,就用对应的字符串来代替这个符号。替代符号可以重新定义。.eval 计算一个表达式的值并把结果传送到与一个替代符号等同的字符串中。该指令在处理计数器时非常有用。.label 定义一个专门的符号以表示当前段内装入时的地址,而不是运行时的地址。当段在一个地址装载在另一个地址处运行时,该指令特别有用。.set/.equ 把一个常数值等效成一个符号,存放在符号表中,且不能被清除。,4.1 程序的编写,7.其他方面的汇编伪指令.end 结束汇编。它是一个程序的最后一个源语句。.version 决定指令所运行的处理器。每一种C54x芯片都有自己的值。,4.1 程序的编写,3种基本的文件:汇编语言文件后缀为.ASM,书写该文件所用指令为LF2407支持的汇编语言指令。该程序中实现DSP要完成的功能。通常在该文件的最开始写上.include“F2407REGS.H”,表明包含了F2407REGS.H头文件里定义的一些寄存器。头文件后缀为.H,定义DSP系统用到的一些寄存器映射地址和用户用到的常量和用户自定义的寄存器。命令文件(.CMD)后缀为.CMD,实现对程序存储器空间和数据存储器空间的分配。该文件常用的伪指令:MEMORY和SECTIONS。,4.1 程序的编写,MEMORY伪指令用来标示实际存在目标系统中且可被使用的存储器范围,每个存储器范围具有名字、起始地址和长度。语法如下;MEMORYPAGE0:namel(attr):origin=constant,length=constant;PAGEn:namen(attr):origin=constant,length=constant;PAGE标示存储器空间。用户规定可以多达255页,通常PAGE0规定程序存储器,PAGE1规定数据存储器。name命名存储器。attr规定与已命名范围有关的14个属性。R可读;W可写;X可执行;I可初始化origin规定存储器范围的起始地址。length规定存储器范围的长度。,4.1 程序的编写,SECTIONS伪指令描述输入段怎样被组合到输出段内;在可执行程序内定义输出段;规定在存储器内何处放置输出段;允许重命名输出段。语法如下;SECTIONSname:property,property,property,name:property,property,property,每一个以name开始的段的规格说明定义了一个输出段。在段名后是特性列表,定义段的内容及分配方式。可能具有的特性如下:装载位置规定段将被装载到存储器何处;运行位置段将在存储器何处运行;输入段组成输出段的输入段;段类型特定段类型的标志;填充值用于填充未初始化空位的数值,4.2 调试环境代码编译器CC简介,本节要求:了解CCS开发环境具有的功能,能够操作CCS的窗口、菜单和工具条。掌握CCS工程管理的概念,能够完成简单程序的编辑、汇编、连接和调试。CCS是TI公司DSP软件的集成开发环境(IDE),本节以CCS2.0为参照讲述。,4.2 调试环境代码编译器CC简介,CCS集成开发环境简介Windows下工作,类似于VC+的集成开发环境;采用图形接口界面,有编辑工具和工程管理工具;它将汇编器、链接器、C/C+编译器、建库工具等集成在一个统一的开发平台中;CCS所集成的代码调试工具具有各种调试功能,能对TMS320系列DSP进行指令级的仿真和可视化的实时数据分析。丰富的输入/出库函数和信号处理库函数。,4.2 调试环境代码编译器CC简介,CCS 2.0系统的安装 用来对该编译器的运行环境进行配置。程序调试仿真环境。,4.2 调试环境代码编译器CC简介,系统配置原因:为使CCS IDE能工作在不同的硬件或仿真目标上。步骤:双击桌面上的Setup CCS 2(C 2000)图标,启动CCS设置。在弹出对话框中单击“Clear”按钮,清除以前定义的配置。从列出的可供选择的配置文件中,选择能与使用的目标系统相匹配的配置文件。单击加入系统配置按钮,将所选中的配置文件输入到CCS设置窗口当前正在创建的系统配置中。单击“FileSave(保存)”按钮,将配置保存在系统寄存器中。当完成CCS配置后,单击“FileExit”按钮,退出CCS Setup。,4.2 调试环境代码编译器CC简介,1.CCS的窗口双击桌面上CCS 2(C 2000)图标,启动CCS IDE显示CCS主界面。,用来组织用户的若干程序并由此构成一个项目,用户可以从工程列表中选中需要编辑和调试的特定程序。,帮助用户查看机器指令,查找错误,用户既可以编辑程序,又可以设置断点和探针,并调试程序。,可以根据用户需要显示数据。,查看、编辑内存和寄存器。,查看、编辑内存和寄存器。,显示对工程进行编译,汇编和连接时的一些状态信息,如果在编译、汇编和连接过程中发现错误,则该窗口显示出错误类型和错误位置。,主菜单:用户可以通过条目来管理各窗口。,4.2 调试环境代码编译器CC简介,2、CCS的菜单File(文件):文件管理,载入执行程序、符号及数据,文件输入输出等Edit(编辑):文件及变量编辑,如剪贴、撤消、字符串查找等View(查看):工具条显示设置,内存、寄存器和图形显示等Project(工程):工程管理(新建、打开、关闭及添加文件等)、编译、构建工程等Debug(调试):断点、探针设置,单步执行、复位等Profiler(性能):性能菜单,包括时钟和性能断点设置等,4.2 调试环境代码编译器CC简介,2、CCS的菜单GEL(扩展功能):利用通用扩展语言设置扩展功能Option(选项):选项设置,设置字体、颜色、键盘属性、动画速度、内存映射等Tools(工具):包括引脚连接、端口连接、命令窗口、连接设置等DSP/BIOS(实时分析工具):用来辅助CCS环境实现程序实时调试Windows(窗口):窗口管理,包括窗口排列、窗口列表等Help(帮助):CCS在线帮助菜单,包括用户手册、入门指南等,4.2 调试环境代码编译器CC简介,Project菜单(工程文件被存盘为*.pjt文件)New 新建一个工程,将该工程保存至新建工程的文件夹里。Add Files to Project 工程中支持C源文件(*.C)、汇编源文件(*.ASM)、库文件(*.OBJ、*.LIB)和链接命令文件(*.CMD)。工程管理会自动加入头文件和include引用的文件,不允许添入其他类型的文件。Compile File 对C或汇编源文件进行编译。Biuld 对工程进行编译、汇编和连接,生成可执行文件.OUT。Rebuiled All 对工程中所有文件重新编译并链接生成输出文件。Stop Build 停止对工程的编译、汇编和连接。Biuld Options 用来设定编译器、汇编器和链接器的参数,通常采用默认设置。Recent Project Files 显示最近打开过的工程。,4.2 调试环境代码编译器CC简介,View菜单Dis-Assembly 观察汇编程序窗口;可在此窗口中对汇编程序进行修改。Memory 观察存储窗口;可选择观察的存储器类型和存储器的起始地址。CPU Registers 考察调试过程中CPU寄存器的和各个状态位的变化情况。Watch Window 观察调试过程中的变量,C表达式,地址和寄存器的值。Mixed Source and ASM 在调试过程中即观察C程序又观察汇编程序。,4.2 调试环境代码编译器CC简介,Debug菜单Breakpoints 将光标放在要设置断点的程序处可在程序中设置断点;程序运行到断点处自动停止。Probe Points 在程序中设置探测点。StepInto 单步执行程序并进入调用的子程序。StepOver单步执行程序但不进入调用的子程序或中断服务程序。StepOut 跳出子程序。Run 执行程序到断点、探测点或用户中断。Halt 用来停止程序的执行。Reset DSP 对处理器进行复位。Restart 将程序指针指向程序的起始地址,从程序最开始处执行程序。提示:善用CCS的Help,4.2 调试环境代码编译器CC简介,3、CCS的工具栏Standard Toolbar:包括新建、打开、保存、剪切、复制、粘贴、取消、恢复、查找、打印和帮助等Project Toolbar:包括选择当前工程、编译文件、设置和移去断点/Probe Point等功能。Edit Toolbar:提供一些常用的查找和设置标签命令。GEL Toolbar:提供了执行GEL函数的一种快捷方法。ASM/Source Stepping Toolbar:提供了单步调试C或汇编源程序的方法 Target Control Toolbar:提供了目标程序控制的一些工具 Debug Window Toolbar:提供了调试窗口工具,4.3 调试一个程序的简单步骤,CCS的工程管理 CCS对程序采用工程(Project)的集成管理方法。工程保持并跟踪在生成目标程序或库过程中的所有信息。典型工程文件记录的信息源程序文件名和目标库;编译器、汇编器和链接器选项;头文件;创建和管理工程工程的创建、打开和关闭(ProjectNew/Open/Close)使用工程观察窗口(单击工程文件夹、工程名(*.pjt)和各个文件夹上的“+/”号即可)添加文件到工程(ProjectAdd Files to Project)从工程中删除文件(Remove from Project),4.3 调试一个程序的简单步骤,调试(1)装载可执行程序 FileLoad Program(2)复位(CCS提供4种方法)Reset DSP:DebugReset DSP命令初始化所有R并停止运行程序。Load Kernel:Lode Kernel 命令重新装入DSP核 Why?若用户使用一基于核的调试器,则DSP核应负责主机的通信。如果DSP核被破坏,则设备驱动程序将无法与目标板通信。Restart:Debug Restart 命令将PC恢复到当前载入程序的入口地址,但不执行当前程序。Go main:Debug Go main命令提供了一种快速运行用户应用程序的方法。(在主程序入口处设置临时断点,然后开始执行。当程序被暂停或遇到一个断点时,临时断点被删除。),4.3 调试一个程序的简单步骤,调试(3)程序执行方式单步执行操作单步进入:DebugStep Into:每操作一次,执行一条指令;单步执行:DebugStep Over:每操作一次,执行一条指令(函数,子程序看作一条);单步调出:DebugStep Out:从子程序跳出;执行到光标处:Debug Run to Cursor:程序运行到光标所在语句。连续运行操作(实时运行)运行程序:DebugRun:从当前PC所指位置开始执行到结束或断点;停止程序:Debug Halt:暂停程序的执行;自由运行:Debug Run free:全速执行用户程序,忽略所有断点。,4.3 调试一个程序的简单步骤,调试(3)程序执行方式断点运行程序(动画)在执行各个命令前应当预先设置好程序断点,每按一次按钮,从当前程序位置执行到所有遇到的第一个断点,。命令:Debug animate;断点设置:使用对话框;采用工程工具条“设置断点”按钮探针(probe)断点:CCS在源程序某条语句上设置的一种断点。每个探针断点都有相应的属性(用户设置)用来与一个文件的读/写相关联。用户程序运行到探针断点所在语句时,自动读入数据或将计算结果输出到某个文件中。,4.3 调试一个程序的简单步骤,调试(4)存储器、寄存器、变量的操作 存储器:拷贝数据块/填充数据块/察看/编辑内存寄存器:显示寄存器/编辑寄存器变量:用观察窗口查看变量/编辑变量(5)数据输入/输出利用数据读入/写出功能命令:FileData(Lode/Save)用途:偶尔的手工读入/写出场合利用探针功能:适用于自动调入和输出数据场合。,4.4 CCS工程组成,(1).pjt文件CCS工程文件。在CC中,工程文件的扩展名为.mak。(2).lib文件CCS运行支持库。(3).h文件头文件。(4).c文件C源文件。(5).asm文件汇编语言源文件。(6).cmd文件链接命令文件。(7).obj文件目标文件,COFF格式。(8).out文件可执行文件,COFF格式。,4.4 CCS工程组成,头文件 CCS工程中的头文件与其它基于C语言的开发环境中的头文件基本相同,主要是用来定义工程中的常量和数据结构。为了提高开发效率,开发人员往往会将DSP片内的控制寄存器定义写成一个头文件,这样在各个基于相同型号DSP的开发中,可以共享这个定义控制寄存器的头文件。,4.4 CCS工程组成,中断向量定义 与传统的单片机类似,DSP的中断也可以采用查询和回调两种方式来处理。如果采用回调方式处理,其实现方式是在中断向量地址处放置一个跳转语句,跳转到相应的中断处理函数。在CCS中,需要编写一个.asm文件,定义所有的中断向量。,4.4 CCS工程组成,链接命令文件CCS的链接器也可以有很多选项,如-l、-stack、-o等,另外在链接器选项中还应该将开发中的逻辑段与目标系统存储器物理地址的对应关系定义清楚。这些链接器选项的实现有三种方式:利用命令行实现:即在命令行中link命令后面将所有的链接选项写明,使链接器按照选项设定去工作。利用工程选项菜单实现:在CCS菜单ProjectBuild OptionsLinker页面中可以对链接器选项进行设置。利用链接命令文件实现:即编写一个链接命令文件,将所有链接选项写在文件中,并将此文件加入工程。链接命令文件实际上就是一个ASCII码文件,扩展名是.cmd。推荐使用工程选项菜单和链接命令文件的方式来实现链接器选项的设置。链接器对命令文件名的大小写是敏感的,空格和空行是没有意义的,但可以用作定界符。,4.4 CCS工程组成,链接命令文件链接器命令文件主要包含以下3部分内容:(1)输入文件名。就是链接的目标文件和文档库文件或者是其他的命令文件,可以没有。(2)链接器选项。如-l、-stack、-o等,这些选项可以用在链接命令行,也可以用在命令文件中。(3)MEMORY和SECTIONS都是链接命令,MEMORY命令定义目标存储器的配置,SECTIONS命令定义逻辑段与目标存储器的对应关系,4.4 CCS工程组成,链接命令文件 常用的几个伪指令.cinit标示部分存放已明确初始化的全局变量和静态变量;.const标示部分存放已明确初始化的字符串常量、全局常量和静态常量;.switch标示部分存放大型switch语句的跳转表;.text标示部分存放可执行代码和浮点数常量;.bss标示部分用于存放没有初始化的全局变量和静态变量;.stack定义软件堆栈。,4.4 CCS工程组成,链接命令文件,4.4 CCS工程组成,链接命令文件.CMD文件同.ASM文件必须对应,否则,即使ASM程序代码语法完全正确编译也不会通过。在配置.CMD文件时,用户必须对DSP的数据存储空间、程序存储空间和汇编伪指令十分熟悉。所有的空间分配都必须建立在DSP的物理结构基础上,用户不能通过.CMD文件虚拟出DSP在物理结构上不存在或不合法的空间。,作 业,1、说明.text段、.data段、.bss段、.sect段、.usect段、.asect段分别包含什么内容?2、进行模块化程序块调试之前,一般需要哪几个基本文件,各文件功能是什么?3、在文件的链接过程中,需要用到命令文件(.cmd)。请按如下参数设计一个命令文件,其参数为:中断向量表 起始地址为7600h,长度为8000h;源程序代码 在中断向量之后;初始化数据 起始地址为1F10h,长度为4000h;未初始化数据 在初始化数据之后。4、CCS提供了哪些菜单和工具条?,The End,