资源描述
No.1Sep 2013复习第四讲:复习第四讲:ARM指令集和汇编语言概述指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍嵌入式系统调试原理介绍基于基于ARM7 内核微处理器调试原理内核微处理器调试原理开发工具开发工具 ADS1.2 介绍介绍ARM7开发工具开发工具uVision4.0 介绍介绍CM3第第 六六 讲讲 嵌入式系统开发和调试原理嵌入式系统开发和调试原理No.2Sep 2013ARM指令集的特点指令集的特点所有的所有的ARM指令都是指令都是32位宽,在存储器中以位宽,在存储器中以4字节的边界对齐字节的边界对齐3地址的数据处理指令(即两个源操作数和结果寄存器都独立设定)地址的数据处理指令(即两个源操作数和结果寄存器都独立设定)LOAD/STORE架构,包含非常强大的多寄存器架构,包含非常强大的多寄存器Load和和Store指令指令能够在单时钟周期的单条指令来完曾一项普通移位操作和一项普通的能够在单时钟周期的单条指令来完曾一项普通移位操作和一项普通的ALU操作操作可以通过协处理器来扩展新的寄存器和数据类型可以通过协处理器来扩展新的寄存器和数据类型指令可条件执行指令可条件执行ARM指令的分类指令的分类p数据处理指令(数据处理指令(16条数据处理和乘法)条数据处理和乘法)p分支指令分支指令(B,BL,BX)p数据传送指令(访问存储器)数据传送指令(访问存储器)LDR/STR,批量传送批量传送p其他指令其他指令l软件中断软件中断SWI指令指令l程序状态寄存器指令程序状态寄存器指令No.3Sep 2013ARM汇编语言伪操作汇编语言伪操作在在ARM汇编语言程序中,有一些特殊的助记符,这些助记汇编语言程序中,有一些特殊的助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊助记符为伪操作标示符(称这些特殊助记符为伪操作标示符(directive),其完成),其完成的操作称为伪操作。的操作称为伪操作。符号定义(符号定义(Symbol Definition)伪操作)伪操作 数据定义(数据定义(Data Definition)伪操作)伪操作 汇编控制(汇编控制(Assembly Control)伪操作)伪操作 信息报告(信息报告(Reporting)伪操作)伪操作 其他(其他(Miscellaneous)伪操作)伪操作 No.4Sep 2013ARM汇编语言伪指令汇编语言伪指令伪指令语法格式作 用ADRADRcond register,expr将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。ADRLADRL cond register,expr将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。LDRLDR cond register,=expr|label-expr将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。NOPNOP在汇编时将被替换成ARM中的空操作。No.5Sep 2013ATPCS介绍寄存器的使用规则介绍寄存器的使用规则定义:定义:pATPCS(arm-thumb procedure call standard)是)是 子程序之间的调用设定一定的规子程序之间的调用设定一定的规则,则,ATPCS就是就是ARM 程序中的子程序调用的基本规则程序中的子程序调用的基本规则PCS:p规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起p定义了一套有关过程(函数)调用者与被调用者之间的协议。定义了一套有关过程(函数)调用者与被调用者之间的协议。pPCS规范强制实现如下约定:调用函数如何传参(即压栈方法,以何种方式存放参数)规范强制实现如下约定:调用函数如何传参(即压栈方法,以何种方式存放参数),被调用函数如何获取参数,以何种方式传递函数返回值。,被调用函数如何获取参数,以何种方式传递函数返回值。基本的基本的ATPCS包含的内容包含的内容p各个寄存器的使用规则和相应的名称:各个寄存器的使用规则和相应的名称:lR0R3 参数寄存器参数寄存器lR4R11 通用变量寄存器通用变量寄存器p数据栈的使用规则:数据栈是数据栈的使用规则:数据栈是FD(满递减堆栈)(满递减堆栈)p参数传递的规则:对于参数个数可变的子程序,但参数不超过参数传递的规则:对于参数个数可变的子程序,但参数不超过4个时,可以使用寄存器个时,可以使用寄存器R0R3来传递参数;当参数超过来传递参数;当参数超过4个时,还可以使用数据栈来传递参数。个时,还可以使用数据栈来传递参数。No.6Sep 2013复习第四讲:复习第四讲:ARM指令集和汇编语言概述指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍嵌入式系统调试原理介绍基于基于ARM7 内核微处理器调试原理内核微处理器调试原理开发工具开发工具 ADS1.2 介绍介绍ARM7开发工具开发工具uVision4.0 介绍介绍CM3第第 六六 讲讲 嵌入式系统开发和调试原理嵌入式系统开发和调试原理No.7Sep 2013嵌入式系统的开发过程嵌入式系统的开发过程No.8Sep 2013PC 上的调试上的调试程序编写,项目管理,编译,调试都在同一台计算机上完程序编写,项目管理,编译,调试都在同一台计算机上完成(成(IDE,Integrated Design Environment)pMS VCpMS VBpBorland C+Builder一般是通过在断点插入相关的调试软陷指令来实现调试功一般是通过在断点插入相关的调试软陷指令来实现调试功能的能的.No.9Sep 2013交叉编译环境交叉编译环境宿主机宿主机p开发机器开发机器(包含开发用软件编辑器包含开发用软件编辑器,调试器调试器,编译器编译器,汇编器汇编器)目标机目标机p程序运行的机器程序运行的机器宿主机宿主机=目标机目标机 称为本地编译称为本地编译(VB编写应用程序编写应用程序)“交叉编译交叉编译”是指是指 宿主机和目标机是不同的系统宿主机和目标机是不同的系统p使用使用PC 机是机是X86系统系统,而目标机是而目标机是ARM,单片机或者其他系统单片机或者其他系统嵌入式应用软件开发要使用交叉开嵌入式应用软件开发要使用交叉开发环境。发环境。p交叉开发环境集成了编辑器、交叉编译器、交叉调试器、仿真软件交叉开发环境集成了编辑器、交叉编译器、交叉调试器、仿真软件(simulator)、工程管理器于、工程管理器于一体一体 p商业化的界面友好的同商业化的界面友好的同Microsoft Visual Studio可视化开发环境相似,免费如可视化开发环境相似,免费如GNU工具链运行工具链运行在字符界面下在字符界面下 p交叉开发的硬件环境包括宿主机和目标板。交叉开发的硬件环境包括宿主机和目标板。No.10Sep 2013?嵌入式系统调试的需求嵌入式系统调试的需求Run Control(运行控制)(运行控制)pSet watchpoints on data accesses(观察感(观察感兴趣的数据)兴趣的数据)pSet breakpoints on instructions(指令断点)(指令断点)pSingle step through code(单步调试)(单步调试)State Control(状态控制)(状态控制)pProcessor state(处理器状态)(处理器状态)lRead and write register valuespSystem state(系统状态)(系统状态)lAccess to system memorylDownload codeExecution History(执行过程)(执行过程)pExecution trace information(跟踪程序信息)(跟踪程序信息)pMemory access history(存储器访问历史数(存储器访问历史数据)据)No.11Sep 2013嵌入式系统调试的一般方法嵌入式系统调试的一般方法基于交叉编译环境下的调试基于交叉编译环境下的调试调试方法解决调试器与被调试程序之间如何通信以达到调试目标p能够获取处理器数据总线、地址总线,处能够获取处理器数据总线、地址总线,处理器状态等信息,以便在选中的数据点(理器状态等信息,以便在选中的数据点(watchpoints)和指令点和指令点(breakpoints)进入调试状态)进入调试状态p能够获取处理器内核寄存器的信息能够获取处理器内核寄存器的信息p能够插入指令运行能够插入指令运行p能够访问存储器的内容能够访问存储器的内容p记录指令记录指令/数据的执行和访问记录数据的执行和访问记录No.12Sep 2013ARM 调试系统组件调试系统组件执行AXD调试器的主机(ADS的一部分)和 Multi-ICE server协议转换器(Multi-ICE)跟踪接口单元(MultiTrace)开发板(Integrator Core Module)Trace PortJTAG Port并口串口l/以太网No.13Sep 2013交叉编译环境的内容交叉编译环境的内容集成开发系统提供高效明晰的图形化的嵌入式应用软件开发平台,包括一集成开发系统提供高效明晰的图形化的嵌入式应用软件开发平台,包括一整套完备的面向嵌入式系统的开发和调试工具整套完备的面向嵌入式系统的开发和调试工具。一般包括编辑器、编译器、连接器、调试器、工程管理器和底层调试接口一般包括编辑器、编译器、连接器、调试器、工程管理器和底层调试接口设备(设备(BDM/JTAG仿真器)等仿真器)等 No.14Sep 2013复习第四讲:复习第四讲:ARM指令集和汇编语言概述指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍嵌入式系统调试原理介绍基于基于ARM7 内核微处理器调试原理内核微处理器调试原理开发工具开发工具 ADS1.2 介绍介绍ARM7开发工具开发工具uVision4.0 介绍介绍CM3第第 六六 讲讲 嵌入式系统开发和调试原理嵌入式系统开发和调试原理No.15Sep 2013调试方法调试方法调试有四种基本方法有四种基本方法p模模拟调试(Simulator)p软件件调试(Debugger)p全仿真全仿真调试(Emulator)pJTAG调试(JTAG Debugger)调试辅助工具助工具示波器、示波器、逻辑分析分析仪与硬件关系密切与硬件关系密切No.16Sep 2013模拟调试方法模拟调试方法调试工具和待工具和待调试的嵌入式的嵌入式软件都在主机上运行,由主机件都在主机上运行,由主机提供一个模提供一个模拟的目的目标运行运行环境,可以境,可以进行行语法和法和逻辑上的上的调试。p优点:点:简单方便,不需要目方便,不需要目标板,成本低板,成本低p缺点:功能非常有限,无法缺点:功能非常有限,无法实时调试大多数大多数调试工具都提供工具都提供Simulator功能功能No.17Sep 2013指令集模拟器指令集模拟器利用在宿主机(一般是利用在宿主机(一般是PC)的资源构建一个虚拟的目标的资源构建一个虚拟的目标机系统,该系统通过解释执机系统,该系统通过解释执行目标处理器的二进制代码行目标处理器的二进制代码来仿真运行目标程序来仿真运行目标程序pARM Armulator模拟运模拟运行行ARM指令系统指令系统PCPCPC OS(MS Windows)PC OS(MS Windows)VM(VM(虚拟机虚拟机虚拟机虚拟机)虚拟机构建的环境:寄存器,存储器等等目标机的RTOSApp1App2App n.No.18Sep 2013模拟器的改进虚拟原型模拟器的改进虚拟原型ARM ADSRDI接口接口ArmulatorMultiICE ServerAngleArmulator Mem 接口虚拟的虚拟的AMBA C语言模型语言模型EMI 模型模型SDRAM 模型模型中断控制器模型中断控制器模型其他模块模型其他模块模型用户自己编写的模型用户自己编写的模型ARM IDEARM IDENo.19Sep 2013ARMULATOR 软件仿真器软件仿真器ARMulator(ARM仿真器):是一个指令级的仿真程序,仿真器):是一个指令级的仿真程序,运行在主机上运行在主机上p没有硬件的情况下,调试应用程序没有硬件的情况下,调试应用程序pARMulator可以报告各指令执行时的机器周期,所以也可以用来进行应用可以报告各指令执行时的机器周期,所以也可以用来进行应用程序的性能分析。程序的性能分析。ARMulator 提供了一套扩展机制提供了一套扩展机制p处理器核模型:能够仿真现有的各种处理器核模型:能够仿真现有的各种ARM核,包括核,包括Thumb指令集指令集p存储器接口:它能够模拟目标存储器系统的各种特征。提供各种原型以支存储器接口:它能够模拟目标存储器系统的各种特征。提供各种原型以支持快速建模,但接口需要全定制以实现需要的细节持快速建模,但接口需要全定制以实现需要的细节p协处理器接口:它支持定制的协处理器模型协处理器接口:它支持定制的协处理器模型p操作系统接口:使个别系统调用可以由主机处理,或在操作系统接口:使个别系统调用可以由主机处理,或在ARM模型上模拟模型上模拟实现了完整的片上系统(SOC)的软硬件协同设计验证No.20Sep 2013OS 模拟器的调试方法模拟器的调试方法除了指令集模拟器还有除了指令集模拟器还有操作系统模拟器操作系统模拟器pSymbian OS 模拟器模拟器pPocketPC 模拟器模拟器p由于在由于在OS层面上进层面上进行仿真,应用程序运行仿真,应用程序运行在行在PC的二进制代的二进制代码,所以在目标系统码,所以在目标系统上需要重新编译上需要重新编译PCPCPC OS(MS Windows)PC OS(MS Windows)RTOS API RTOS API 封装封装封装封装App1App2App n.由PC OS模拟的RTOS环境:任务,任务间通信No.21Sep 2013软件调试方法软件调试方法(Debugger)主机和目主机和目标板通板通过某种接口(通常是串口)某种接口(通常是串口)连接,主机上提接,主机上提供供调试界面,待界面,待调试软件下件下载到目到目标板上运行。板上运行。这种方式的先决条件是要在种方式的先决条件是要在Host和和Target之之间建立起通信建立起通信联系(目系(目标板上称板上称为监控程序控程序Monitor)p优点:点:纯软件,价格件,价格较低,低,简单,软件件调试能力能力较强p缺点:缺点:需要事先需要事先烧制制Monitor(往往需多次(往往需多次试验才能成功)才能成功)且目且目标板工作正常,功能有限,特板工作正常,功能有限,特别是硬件是硬件调试能力能力较差。差。PCTargetMonitor串口No.22Sep 2013基于调试代理基于调试代理(Angel)的调试方法的调试方法Angel是一段驻留在开发板ROM中的一段程序,系统Boot后,Angle接管整个系统并初始化系统和通信接口.Angel通过一定的通信协议(ADP协议)与主机的Debugger通信.Debugger通过特定的命令通知Angel将用户调试的程序下载到目标板的SDRAM中的特定地址,并可以按照Debugger的要求将控制权交给相应的代码地址对于用户设置的断点,Angel会在断点的位置插入一条软陷指令(当然在插入之前会保存原来的那条指令),当用户的程序执行到断点时,系统会产生一个软陷异常,这时可以由Angel接管系统,并将系统当前的寄存器的值传给主机Debugger如果主机Debugger需要查看内存,也将通过Angel读取后将存储器的值上传给主机。通信接口flashsdramHost PC&Host PC&DebuggerDebugger串口电缆以太网USBCPUNo.23Sep 2013Angel调试的优缺点调试的优缺点Angel调试的缺点:调试的缺点:p需要占用目标板的资源:处理器,存储器和通信接口需要占用目标板的资源:处理器,存储器和通信接口p没有办法在没有办法在ROM区设置断点区设置断点p难以跟踪数据变化难以跟踪数据变化Angel调试的优点:调试的优点:p不需要外的调试硬件,成本低廉不需要外的调试硬件,成本低廉No.24Sep 2013全仿真调试方法全仿真调试方法全仿真全仿真调试(Emulator)这种方式用仿真器完全取代目种方式用仿真器完全取代目标板上的板上的MCU,因而目,因而目标系系统对开开发者来者来说完全是透明的、可控的。仿真器与目完全是透明的、可控的。仿真器与目标板通板通过仿真仿真头连接,与主机有串口、并口、网口或接,与主机有串口、并口、网口或USB口等口等连接接方式。由于仿真器自成体系,方式。由于仿真器自成体系,调试时既可以既可以连接目接目标板,也板,也可以不可以不连接目接目标板(板(Stand alone)。)。p优点:点:功能非常功能非常强大,大,软硬件均可做到完全硬件均可做到完全实时在在线调试p缺点:缺点:价格昂价格昂贵。No.25Sep 2013采用采用在线调试方法的优缺点在线调试方法的优缺点优点p一般内存采用双口内存,能在执行时同时看到数据的变化p内部附有功能强大的分析器,可以分析状态,效率和时序等p采用存储器断点技术实现硬件断点,数量不受限制p 它不但可以往前执行,还可以倒退执行,所有信息都可以记录起来,包括计时器状态、工作切换状态、内存状态、寄存器状态和变量等信息,而且全部是实时的。p这种调试方法在没有片内调试逻辑的微处理器中,尤其式单片机系统中得到广泛的采用.缺点p在线仿真器具有侵入性,其中的嵌入式微处理器并不在线仿真器具有侵入性,其中的嵌入式微处理器并不是目标系统中的处理器,电气特性不同,无法真实反是目标系统中的处理器,电气特性不同,无法真实反映实际时序。映实际时序。p在线仿真器拥有自己的目标处理器、在线仿真器拥有自己的目标处理器、RAM、ROM和自和自己的嵌入式软件,所以是非常昂贵的己的嵌入式软件,所以是非常昂贵的(由其对于高速设由其对于高速设备而言备而言)。No.26Sep 2013基于在线仿真器(在线调试)的调试方法基于在线仿真器(在线调试)的调试方法在线仿真器提供自己的处理器和存储器不依赖目标系统的处理器和内存仿真器上的处理器可以是一个相同的芯片,也可以是一个有更多引脚的变型芯片(对内部状态有更高的可观察性)。仿真器上还有NMI(不可屏蔽中断)控制逻辑,存储器控制逻辑,映象ROM,映象RAM等其他各种硬件资源,所有的硬件资源由运行在主桌面系统上的软件来管理。flashsdramHost PC&Host PC&DebuggerDebuggerCPU插座通信接口仿真器仿真器CPU控制逻辑监测数据总线监测数据总线监测数据总线监测数据总线和控制总线和控制总线和控制总线和控制总线CPU电缆No.27Sep 2013关于在线调试的进一步的思考关于在线调试的进一步的思考既然通过片外的控制逻辑可以实现对芯片的调试既然通过片外的控制逻辑可以实现对芯片的调试,为什么不为什么不把这个控制逻辑作在片内把这个控制逻辑作在片内,从而省掉仿真器呢从而省掉仿真器呢?pAt Speed 调试方案:调试方案:因为调试逻辑在片上p增加芯片成本:增加芯片成本:对于32位处理器,增加比例有限!p如何从芯片外获得调试的控制权如何从芯片外获得调试的控制权?会不会增加额外的封装成本会不会增加额外的封装成本?:可以复用JTAG测试接口新的解决方案:片上在线调试新的解决方案:片上在线调试新的解决方案:片上在线调试新的解决方案:片上在线调试(On Chip ICE)(On Chip ICE)No.28Sep 2013JTAG调试方法调试方法JTAG调试 这种方式有一个硬件种方式有一个硬件调试体。体。该硬件硬件调试体与目体与目标板通板通过JTAG调试接口相接口相连,与主机通,与主机通过串口、并口、网口或串口、并口、网口或USB口口相相连。待。待调试软件通件通过JTAG调试器下器下载到目到目标板上运行。板上运行。p优点:点:方便、方便、简单,无,无须制作制作Monitor,软硬件均可硬件均可调试p缺点:缺点:需要目需要目标板,且目板,且目标板工作基本正常(至少板工作基本正常(至少MCU工工作正常),作正常),仅适用于有适用于有调试接口的芯片接口的芯片 TargetPC接口JTAG DebuggerNo.29Sep 2013JTAG 基本原理基本原理IEEE Standard 1149.1(JOINT TEST ACTION GROUP)-Test Access Port and Boundary-Scan Architecture边界扫描(边界扫描(Boundary-Scan):):基基本本思思想想:在在靠靠近近芯芯片片输输入入/输输出出管管脚脚上上增增加加一一个个移移位位寄寄存存器单元(边界扫描寄存器)。器单元(边界扫描寄存器)。正正常常状状态态下下,边边界界扫扫描描寄寄存存器器对对芯芯片片来来说说是是透透明明的的,所所以以正正常的运行不会受到任何的影响。常的运行不会受到任何的影响。TAP:控制边界扫描链:控制边界扫描链No.30Sep 2013 调试状态下,边界扫描寄存器将芯片和外的输入输出隔离调试状态下,边界扫描寄存器将芯片和外的输入输出隔离开,通过这些边界扫描寄存器可以实现对芯片输入输出信开,通过这些边界扫描寄存器可以实现对芯片输入输出信号的控制。具体控制过程如下:号的控制。具体控制过程如下:、输入管脚:通过与之相连的边界扫描寄存器把信输入管脚:通过与之相连的边界扫描寄存器把信号(数据)加载到该管脚中去。号(数据)加载到该管脚中去。、输出管脚:通过与之相连的边界扫描输出管脚:通过与之相连的边界扫描 寄存器寄存器“捕捕获获”该管脚上的输出信号。该管脚上的输出信号。JTAG 基本原理基本原理注意:注意:芯片芯片输入输出管脚上的边界扫描寄存器单元可以相互连输入输出管脚上的边界扫描寄存器单元可以相互连接起来,在芯片周围形成一个边界扫描链。接起来,在芯片周围形成一个边界扫描链。该链可以实现该链可以实现串行的输入输出,通过相应的时钟信号和控制信号,可方串行的输入输出,通过相应的时钟信号和控制信号,可方便的观察和控制在调试状态下的芯片。便的观察和控制在调试状态下的芯片。No.31Sep 2013TAP(Test Access Port):):TAP是一个通用的端口,利用它可以访问是一个通用的端口,利用它可以访问芯片提供的所有芯片提供的所有DR和和IR。对整个。对整个TAP的控制是通过的控制是通过TAP Controller来来完成的。完成的。TAP包括包括5个信号接口:个信号接口:TCK(Test Clock Input)JTAG时钟信号位。时钟信号位。标准强制要求标准强制要求 TMS(Test Mode Select)测试模式选择,通过该信号控制测试模式选择,通过该信号控制JTAG状态机的状态。状态机的状态。TMS在在TCK的上的上升沿有效。升沿有效。标准强制要求标准强制要求 TDI(Test Data Input)数据输入口。所有要输入到特定寄存器的数据都是通过数据输入口。所有要输入到特定寄存器的数据都是通过TDI口一位一位串口一位一位串行输入的(行输入的(TCK驱动)。驱动)。标准里强制要求标准里强制要求TDO(Test Data Output)数据输出口。所有要从特定的寄存器中输出的数据都是通过数据输出口。所有要从特定的寄存器中输出的数据都是通过TDO口串行的口串行的一位一位输出的(一位一位输出的(TCK驱动)。驱动)。标准里强制要求标准里强制要求TRST(Test Reset Input)JTAG复位信号。复位信号。标准里是可选的标准里是可选的JTAG 基本原理基本原理No.32Sep 2013JTAG的工作状态机的工作状态机No.33Sep 2013JTAG的工作过程的工作过程通过TAP接口,对数据寄存器(DR)进行访问的一般过程是:通过指令寄存器(IR),选定一个需要访问的数据寄存器;把选定的数据寄存器连接到TDI和TDO之间;由TCK驱动,通过TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过TDO读出来No.34Sep 2013复习第四讲:复习第四讲:ARM指令集和汇编语言概述指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍嵌入式系统调试原理介绍基于基于ARM7 内核微处理器调试原理内核微处理器调试原理开发工具开发工具 ADS1.2 介绍介绍ARM7开发工具开发工具uVision4.0 介绍介绍CM3第第 六六 讲讲 嵌入式系统开发和调试原理嵌入式系统开发和调试原理No.35Sep 2013ARM Debug System ComponentsEmbeddedICELogicARM CoreSOCJTAGPortRunControlUnitTAPe.g.Multi-ICE,RVIHost computer runningAXD(+TDT for trace)or RVDAddressControlEmbeddedICELogicARM CoreSOCEmbeddedTraceMacrocellTracePortJTAGPortTraceCapture UnitRunControlUnitDataTAPe.g.Multi-ICE,RVIe.g.MultiTrace,RVTHost computer runningAXD(+TDT for trace)or RVDAddressControlEmbeddedICELogicARM CoreSOCEmbeddedTraceMacrocellTracePortJTAGPortRunControlUnitDataTAPEmbeddedTrace Buffere.g.Multi-ICE,RVIHost computer runningAXD(+TDT for trace)or RVDAddressControlEmbeddedICELogicARM CoreSOCEmbeddedTraceMacrocellTracePortJTAGPortTraceCapture UnitRunControlUnitDataTAPEmbeddedTrace Buffere.g.Multi-ICE,RVIe.g.MultiTrace,RVTHost computer runningAXD(+TDT for trace)or RVDARM7TDMI处理器包括三大部分:处理器包括三大部分:ARM CPU Main Processor Logic 包括了对调试的硬件支持包括了对调试的硬件支持Embedded ICE-RT Logic 包括一组寄存器和比较器,用来产生调试异包括一组寄存器和比较器,用来产生调试异常,设置断点和观察点。常,设置断点和观察点。TAP Controller 通过通过JTAG接口来控制和操作扫描链接口来控制和操作扫描链No.36Sep 2013基于基于JTAG的片上的片上ICE扫描链扫描链0:113位,包含数据总位,包含数据总线、控制信号、地址总线线、控制信号、地址总线扫描链扫描链1:33位,为扫描链位,为扫描链0子子集,包括数据总线和集,包括数据总线和DBGBREAK信号信号 扫描链扫描链2:38位,主要用于访问位,主要用于访问ICE 逻辑部件中的各寄存器逻辑部件中的各寄存器 扫瞄链扫瞄链3:ARM7TDMI 和外围设和外围设备备EmbeddedICE逻辑电路包括一逻辑电路包括一组寄存器和比较器,组寄存器和比较器,3个附件信个附件信号号pDBGREQ:调试请求:调试请求pDBGACK:调试确认:调试确认pBREAKPT:断点信号:断点信号TAP控制器可以通过控制器可以通过JTAG接口接口控制各个硬件扫描链控制各个硬件扫描链 调试原理:调试原理:如何设置断点?,如何进入如何设置断点?,如何进入调试状态,和正常运行状态有调试状态,和正常运行状态有什么区别?在调试状态下如何访问内部什么区别?在调试状态下如何访问内部寄存器、如何访问内存?寄存器、如何访问内存?No.37Sep 2013EmbeddedICE-RT Logic的结构的结构 通过对通过对EmbeddedICE控制,以及通过对控制,以及通过对EmbeddedICE中寄存器的读取,可以获得中寄存器的读取,可以获得ARM内核的内核的状态,为程序设置断点观察点以及读取状态,为程序设置断点观察点以及读取Debug通信通道通信通道(DCC)。)。这里的这里的断点断点用来标识某个地址上的一条指令,而用来标识某个地址上的一条指令,而观察点观察点用来观察某个地址上的数据变化,所以这二者是用来观察某个地址上的数据变化,所以这二者是有区别的。有区别的。DCC用来完成主调试器和目标机间的信息发用来完成主调试器和目标机间的信息发送。送。No.38Sep 2013EmbeddedICE的结构的结构EmbeddedICE的长度是的长度是38位,位,包括:包括:32位数据位数据 5位地址,访问寄存器位地址,访问寄存器 1个读写控制位个读写控制位EmbeddedICE的寄存器主要包的寄存器主要包括括Debug状态和控制寄存器,状态和控制寄存器,Debug通信寄存器和断点设通信寄存器和断点设置相关的寄存器置相关的寄存器No.39Sep 2013The EmbeddedICE Logic通过扫瞄链2访问ICE的寄存器,ICE包含三个部分Debug Control and Status registers(调试寄存器)(调试寄存器)p控制ICE-RT pICE的状态p判断异常产生的原因Two watchpoint units(观察点单元)(观察点单元)p2组,每组3个寄存器(数据,地址,控制)p通过监控数据、地址和控制信号,判断数据观数据观察点察点watchpointwatchpoint和程序断点程序断点breakpointbreakpointp每一个组单元可以提供l1 watchpoint,l1 hardware breakpointhardware breakpoint in ROM or RAM,orlMultiple software breakpointssoftware breakpoints in RAMDebug Communications Channel(调试通信通道)(调试通信通道)No.40Sep 2013EmbeddedICE寄存器格式及含义寄存器格式及含义Debug Control Register 格式:格式:DBGACK:用来控制用来控制DBGACK信号的值信号的值DBGRQ:是是调试请求信号调试请求信号,通过将该信号置,通过将该信号置“1”,可以强制,可以强制ARM7TDMI暂停当前的指令,进入调试状态暂停当前的指令,进入调试状态INTDIS:用来控制中断用来控制中断SBZ/RAZ:任何时候都必须被置任何时候都必须被置“0”Monitor Mode Enable:用来控制用来控制是否进入是否进入Monitor模式模式EmbeddedICE-RT Disable:用来控制整个用来控制整个EmbeddedICE-RT,是启是启用还是禁用用还是禁用No.41Sep 2013Debug Status Register 格式:格式:DBGACK:用来标识当前系统是否处于调试状态。用来标识当前系统是否处于调试状态。1,表示进,表示进入;入;0,表示未进入。,表示未进入。DBGRQ:用来标识用来标识DBGRQ信号的当前状态信号的当前状态IFEN:用来标识系统的中断控制状态:启用还是禁用用来标识系统的中断控制状态:启用还是禁用cgenL:用来判断当前对调试器在调试状态下用来判断当前对调试器在调试状态下 对内存的访问是否对内存的访问是否完成完成TBIT:该位用来判断该位用来判断ARM7TDMI是从是从ARM 状态还是状态还是THUMB状态状态进入到调试状态的进入到调试状态的EmbeddedICE寄存器格式及含义寄存器格式及含义Abort Status Register 格式该寄存器的长度为该寄存器的长度为1,来判断一个异常的产生的原因:断点触发?,来判断一个异常的产生的原因:断点触发?观察点触发?还是一个真的异常?观察点触发?还是一个真的异常?No.42Sep 2013实例实例:用用Scan Chain 2 设置设置Debug Control Register 第一步:选择扫描链第一步:选择扫描链2,将其连接到,将其连接到TDI,TDO 之间:之间:通通过过TAP将将SCAN_N指指令令写写入入到到指指令令寄寄存存器器当当中中去去,TAP状状态态转转换换 如如 下下:RUN-TEST/IDLESELECT-DR-SCAN SELECT-IR-SCAN CAPTURE-IR SHIFT-IR EXIT1-IR UPDATE-IR RUN-TEST/IDLE,在在SHIFT-IR状状态态下下,将将SCAN_N通通过过TDI写写到到指指令令寄寄存存器器中中去去;接接下下来来,访访问问被被SCAN_N指指令令连连接接到到TDI 和和TDO之之间间的的扫扫描描链链选选择择寄寄存存器器,通通过过将将2写写入入到到扫扫描描链链选选择择寄寄存存器器当当中中去去,以以将将扫扫描描链链2连连接接到到TDI和和TDO之之间间。将将2写写入入扫扫描描链链选选择择寄寄存存器器的的状状态态转转换换如下:如下:RUN-TEST/IDLE SELECT-DR-SCAN CAPTURE-DR SHIFT-DR EXIT1-DR UPDATE-DR RUN-TEST/IDLE 在在SHIFT-DR状态下,将数值状态下,将数值2通过通过TDI写到扫描链选择寄存器当中去。写到扫描链选择寄存器当中去。第二步:将第二步:将Scan Chain 2置为内测试模式置为内测试模式 用用INTEST 指令实现该操作,指令写入与指令实现该操作,指令写入与SCAN_N指令的过程类似指令的过程类似No.43Sep 2013第三步:第三步:写写Debug Control Register 假假设设要要将将Debug Control Register的的6位位全全部部置置“1”,按照扫描链按照扫描链2的格式,需要写入到扫描链的格式,需要写入到扫描链2第序列应该为:第序列应该为:1,00000,0000,0000,0000,0000,0000,0000,0011,1111 1表表示示写写操操作作,00000标标识识的的是是Debug Control Register的的地地址址,中中间间32位位是是要要写写入入到到Debug Control Register的的数数据据。因因Debug Control Register长长度度为为6,所所以只有低以只有低6位的数据序列位的数据序列111111有效。有效。在在SHIFT-DR状状态态下下,通通过过38个个TCK时时钟钟驱驱动动,就就可可以以将上面的序列串行输入到扫描链将上面的序列串行输入到扫描链2当中去。当中去。实例实例:用用Scan Chain 2 设置设置Debug Control RegisterNo.44Sep 2013 EmbeddedICE有两个WtchPoint单元。下面介绍一下WatchPoint寄存器的使用:EmbeddedICE的一个主要作用是可以在ARM程序中设置软件或硬件断点。在EmbeddedICE中,集成了一个比较器,负责把ARM处理器取指的地址A31:0,数据 D31:0以及一些控制信号与EmbeddedICE中WatchPoint寄存器中设置的数值相比较(具体说应该是进行与或运算),比较结果用来确定输出一个ARM断点(BreakPoint)信号。具体运算关系如下公式所描述:EmbeddedICE的断点的断点/观察点设置观察点设置Av31:0,Cv4:0 XOR A31:0,C4:0 ORAm31:0,Cm4:0=0 xFFFFFFFF当上述表达式值为真时,断点/观察点信号有效,ARM内核进入Debug模式No.45Sep 2013Watchpoints(数据观察点)(数据观察点)ControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA31:0ComparatorWatchpointD31:00 xF0000 x00 xffffffffData write0 xF000MemoryLocation to be watched读写完成访问的数据以后进入调试状态:A watchpoint:当约定存储器被约定的方式访问以后触发断点;这个例子说明当地址0 xF000 被写入的时候产生的观察点每一个观察点单元可以产生一个数据观察点断点No.46Sep 2013Hardware Breakpoints(硬件断点)(硬件断点)0 x8000ARM-0 x3Thumb-0 x10 xffffffffOpcode fetch0 x8000MemoryBreakpoint to be set hereControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA31:0ComparatorBreakpointD31:0A hardware breakpoint:当程序再约定地址的取出指令时候,触发断点这个例子说明:在0 x8000地址取指令的时候产生程序断点 Hardware breakpoints can can be set in RAM or ROM.Each watchpoint unit can be used to set one(and only one)hardware breakpoint.No.47Sep 2013Software Breakpoints(软件断点)软件断点)Memory0 xffffffff0 xeeeeeeee0 x0Opcode fetchControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA31:0ComparatorBreakpointD31:01.Read and store opcode2.Write“special”valueA software breakpoint:软:软件断点是约定的一条指令被件断点是约定的一条指令被取指的时候触发程序断点取指的时候触发程序断点(这条指令可以在任何地址)(这条指令可以在任何地址)i这个例子说明了软件断点实现的过程首先在Data mask寄存器中写入特定指令,Addr Mask为0 xffffffff,当取值到特殊指令的时候产生断点。只能在RAM中产生。Each watchpoint unit can be used to set an unlimited number of software breakpoints.(The“special”value)当需要在某地址代码处设置软件断点的时候,仿真器会先将此处代码进行备份保护,然后将预先设定好的断点特征值(一般为0 x0000等不易与代码混淆的值)写入此地址,覆盖原来的代码数据。No.48Sep 2013产生硬件断点:产生硬件断点:p触发,取指地址触发触发,取指地址触发p屏蔽数据,存入地址屏蔽数据,存入地址p2个点个点产生数据观察点产生数据观察点p对应地址数据读取完成以后触发对应地址数据读取完成以后触发p屏蔽数据,存入地址屏蔽数据,存入地址p2个点个点产生软件断点产生软件断点p对应数据触发对应数据触发p屏蔽地址,存入特殊数据屏蔽地址,存入特殊数据Xp断点地址插入特殊数据断点地址插入特殊数据X,改写存储器,所以只能在改写存储器,所以只能在RAM中设置中设置p无穷多的无穷多的No.49Sep 2013在调试状态访问寄存器和存储空间在调试状态访问寄存器和存储空间ARM7TDMI已经进入到调试状态(DBGRQ、断点、观察点)。通过扫瞄链1 在流水线中插入指令,系统运行在DCLK,不是MCLK(系统正常时钟)在调试状态下支持数据处理指令、Load/Store指令、MSR,MRS指令。扫描链1中的第33位,BREAKPT输入,在调试过程当中有很重要的作用重要的作用p如果BREAKPT置0,意味着下一条指令以调试速度执行(DCLK驱动)p如果BREAKPT置1,意味着下一条指令以系统速度执行(MCLK驱动)No.50Sep 2013在调试状态读取在调试状态读取/修改寄存器修改寄存器读取读取R0的值的值p插入指令STR R0,R0&BREAKPT=0:这步相当于指令STR R0,R0的取指令周期(3级流水线);p 插入空指令MOV R0,R0&BREAKPT=0:这一步读取新指令MOV R0,R0,同时,相当于指令STR R0,R0的译指令周期(3级流水线);p插入空指令MOV R0,R0&BREAKPT=0:这一步读取新指令MOV R0,R0,同时,插入的STR R0,R0指令开始执行(3级流水线)。p通过扫描链1读出捕获的数据总线上的数据:修改R0的值p插入指令LDR R0,R0&BREAKPT=0:p插入两条空指令p通过扫瞄链1放数据在数据总线上p插入一条空指令No.51Sep 2013调试状态下读写内存调试状态下读写内存Read 10 words from address 0 x8000 onwardsMOV r0,#0 x8000LDMIA r0!,r1-r10-system speedSTMIA r0,r1-r10-debug speedTDITCKDatabusARMTCKregistersDebugspeedDatabusARMxDTDOr1-r1013MCLKSystemspeedDatabusARM2registersPipelineNo.52Sep 2013复习第四讲:复习第四讲:ARM指令集和汇编语言概述指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍嵌入式系统调试原理介绍基于基于ARM7 内核微处理器调试原理内核微处理器调试原理开发工具开发工具 ADS1.2 介绍介绍ARM7开发工具开发工具uVision4.0 介绍介绍CM3第第 六六 讲讲 嵌入式系统开发和调试原理嵌入式系统开发和调试原理No.53Sep 2013嵌入式系统的开发过程嵌入式系统的开发过程软件设计交叉开交叉开交叉开交叉开发环境发环境发环境发环境IDEIDE烧结程序串口,并口,串口,并口,以太网,以太网,USBNo.54Sep 2013No.55Sep 2013ADS集成开发环境(集成开发环境(IDE)ARM AXDRDI接口接口ArmulatorMultiICE ServerAngleArmulator Mem 接口ARM IDEARM IDE并行口串行口Code WorrierCode Worrier仿真器目标板目标板目标板目标板JTAG接口串口编译器汇编器联接器CPUflashsdramNo.56Sep 2013集成开发环境集成开发环境ADS1.2ADS1.2p“ARM Developer Suite V1.2”,ARM公司出品,取代早公司出品,取代早期期SDT、ADS1.0/1.1;pIDE环境,包括环境,包括lARM/Thumb汇编器:汇编器:armasmlANSI C 编译器编译器-armcc 和和 tcclISO/Embedded C+编译器编译器 -armcpp and tcppl链接器链接器 armlinklWindows 集成开发环境集成开发环境 CodeWarriorl格式转换器格式转换器 fromelfl库管理器库管理器-armarl调试器调试器u模拟调试器:模拟调试器:ARMulatoruJTAG调试:调试:AXD(与(与Multi-ICE配合)配合)ADS 简介简介No.57Sep 2013ADS的软件组成的软件组成ADS的主要组成部件有:的主要组成部件有:u命令行开发工具命令行开发工具uARM运行时库运行时库uGUI开发环境开发环境(Code Warrior和和AXD)u实用程序实用程序u支持软件支持软件 No.58Sep 2013命令行开发工具命令行开发工具pArmcc:ARM C编译器编译器 pArmcpp:ARM C+编译器编译器 pArmasm:ARM汇编编译器汇编编译器:pArmlink:ARM连接器连接器ADS的软件组成的软件组成n完成将源代码编译,链接成可执行代码的功能No.59Sep 2013ADS的命令行开发工具的命令行开发工具命令行开发工具命令行开发工具Armccparmcc用于将用用于将用ANSI C编写的程序编译成编写的程序编译成32位位ARM指令代码指令代码parmcc最基本的用法为:最基本的用法为:larmcc options file1 file2.filenl这里的这里的option是编译器所需要的选项,是编译器所需要的选项,fiel1,file2filen是相是相关的文件名关的文件名命令行开发工具命令行开发工具Armcppparmcpp是是ARM C编译器,它将编译器,它将ISO C和和EC编译成编译成32位的位的ARM指令代码。指令代码。命令行开发工具命令行开发工具Armasmparmasm是是ARM和和Thumb的汇编器的汇编器p它对用它对用ARM 汇编语言和汇编语言和Thumb 汇编语言写的源代码进行汇编汇编语言写的源代码进行汇编No.60Sep 2013No.61Sep 2013ADS的软件组成的软件组成命令行开发工具命令行开发工具Armlinkparmlink是是ARM连接器连接器p即可以将编译得到的一个或多个目标文件和相即可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行连接,生成一个可执关的一个或多个库文件进行连接,生成一个可执行文件,也可以将多个目标文件部分连接生成一行文件,也可以将多个目标文件部分连接生成一个目标文件,以供进一步的连接。个目标文件,以供进一步的连接。p生成生成ELF格式的可执行映像文件,格式的可执行映像文件,-image.axf。No.62Sep 2013ADS的软件组成的软件组成运行时库运行时库运行时库(运行时库(C run-time library)pC 程序运行时需要这些库中的函数程序运行时需要这些库中的函数pC run-time library里面含有初始化代码,还有错误处理代码里面含有初始化代码,还有错误处理代码(例如例如divide by zero处理处理)p如果没有了如果没有了C run-time库,库,main()就不会被调用,就不会被调用,exit()也不能被响也不能被响应。因为应。因为C run-time library包含了包含了C程序运行的最基本和最常用的程序运行的最基本和最常用的函数函数p当用户对汇编程序,当用户对汇编程序,C C程序或程序或C+C+程序进行链接的时候,链接器会根程序进行链接的时候,链接器会根据在建立时所指定的选项,选择适当的据在建立时所指定的选项,选择适当的C C或或C+C+运行时库的类型运行时库的类型pARM C库函数是以二进制格式提供的;库函数是以二进制格式提供的;pARM库函数禁止修改,如果想对库函数创建新的实现,可以把新函库函数禁止修改,如果想对库函数创建新的实现,可以把新函数编译成目标文件,连接时将其包含进来;数编译成目标文件,连接时将其包含进来;pRogue Wave Stand C函数库源码不是免费发布的,可以从函数库源码不是免费发布的,可以从Rogue Wave Inc.;N
展开阅读全文