您好,欢迎访问三七文档
1TMTHEARCHITECTUREFORTHEDIGITALWORLDARM调试方案2TM2122v01ARMDebugSolutions议程基本的调试需求你需要什么样的功能?ARM公司的调试和开发工具。嵌入式核的调试实现和利用JTAG的调试方案停止模式和监控模式嵌入式跟踪使用ETMARM开发板3TM3122v01ARMDebugSolutions?基本的调试需求运行控制设置数据访问断点设置指令断点代码的单步执行状态控制处理器状态读写寄存器值系统状态系统内存访问下载代码执行历史执行跟踪信息内存访问历史4TM4122v01ARMDebugSolutionsARM调试系统组件执行AXD调试器的主机(ADS的一部分)和Multi-ICEserver协议转换器(Multi-ICE)跟踪接口单元(MultiTrace)开发板(IntegratorCoreModule)TracePortJTAGPort并口串口l/以太网5TM5122v01ARMDebugSolutions议程基本的调试需求你需要什么样的功能?ARM公司的调试和开发组成工具。嵌入式核调试实现和利用JTAG的调试方案停止模式和监控模式嵌入式跟踪整体化和利用ETMARM开发板6TM6122v01ARMDebugSolutions嵌入式核调试5线JTAG被调试的系统可以是最终的系统!也可以用第三方的协议转换工具:(可以运行在不同的机器上)TAPEmbeddedICELogic-RT7TM7122v01ARMDebugSolutions嵌入式ICE逻辑两个观察点单元可以通过监控地址总线,数据总线和控制信号来探测观察点(watchpoint)和断点。每个单元可以用来提供1观察点,或1个ROM或RAM里的硬件断点,或RAM里的多个软件断点调试控制和状态寄存器调试通讯通道注意:ARM10ARM10家族的调试结构是不同的,虽然原理是一样的。一共包括8个观察点单元6个在指令地址总线上2个在数据地址总线上这个将在另外一个课题中讲解8TM8122v01ARMDebugSolutions观察点ControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorWatchpointD[31:0]0xF0000x00xffffffffDatawrite0xF000MemoryLocationtobewatched一个观察点就是一个断点,这个断点在当以某种方式访问特定内存区域时被触发.这个例子里,当向地址0xF000写时,将触发这个观察点.每一个观察点单元可以设置成一个观察点,而且只能设置一个.9TM9122v01ARMDebugSolutions硬件断点0x8000ARM-0x3Thumb-0x10xffffffffOpcodefetch0x8000MemoryBreakpointtobesethereControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorBreakpointD[31:0]当内核试图执行内存里一个特定地址的指令时,将会触发一个硬件断点.这个例子里,当要执行从地址0x8000索取的指令时,将会触发一个硬件断点.硬件断点可以在RAM或ROM里设置.每个观察点单元可以被用来设置一个硬件断点,而且只能一个.10TM10122v01ARMDebugSolutions软件断点Memory0xffffffff0xeeeeeeee0x0OpcodefetchControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorBreakpointD[31:0]1.Readandstoreopcode2.Write“special”value一个软件断点是当一个特定的指令从任何地址被预取时触发的一个断点.这个例子表明了观察点单元的配置–这对所有的软件断点都是一样的.为了设置一个断点,可以使用Multi-ICE在特定的地方写一个特别的指令.这些只能在RAM里在操作.每一个观察点单元可以用来设置无数的软件断点.(The“special”value)11TM11122v01ARMDebugSolutions命中一个断点停止模式调试由标准的EmbeddedICE&EmbeddedICE-RT支持内核进入调试状态和停止状态内核与系统的其余部分分离发出DBGACK信号(调试器通过JTAG而检测到)没有中断处理,除非调试器重新启动执行代码处理器和系统的状态可以通过扫描内核的指令来察看和修改,紧接着执行它们.监控模式调试只由增强功能的EmbeddedICE-RT支持在ARM9E,ARM10和稍后的ARM7TDMI版本上有内核通过一个异常中断而进入常驻软件监控程序可以连续处理中断处理器和系统的状态可以通过监控程序的调试命令来察看和修改.12TM12122v01ARMDebugSolutions读系统状态(在停止模式)从地址0x8000向后读10个字MOVr0,#0x8000LDMIAr0!,{r1-r10}-systemspeedSTMIAr0,{r1-r10}-debugspeedTDITCKDatabusARMxDTCKregistersDebugspeedDatabusARMxDTDOr1-r1013MCLKregistersSystemspeedDatabusARMxD2FDE13TM13122v01ARMDebugSolutionsDebuggerRMHost(RealMonitor.dll)主机RMTargetApplicationCode+Data目标板经过DCC传送的实时监控协议监控模式调试主机-在AXD和Multi-ICE之间的控制器实时监控协议非常简单的协议快速–没有出错检查允许后台命令实际目标板小的调试监控程序(2k代码字节)集成在目标里.以目标代码和原代码的形式提供14TM14122v01ARMDebugSolutions调试通讯通道在ARM和主机调试器之间通过JTAG的通讯信息是由简单串行通讯口来实现的.不进入调试模式和停止程序执行.ARM上运行的应用代码经过协处理器14来访问.三个寄存器通讯数据读寄存器(CommsDataReadRegister)主机到ARM的通讯通讯数据写寄存器(CommsDataWriteRegister)ARM到主机的通讯通讯数据控制寄存器(CommsDataControlRegister)提供在ARM和主机之间同步的握手信号位1–写位-当ARM写入新数据时清掉位0–读位–当ARM有新数据读时设置15TM15122v01ARMDebugSolutionsDCC查询模式通讯WriteRegisterRW10ControlRegisterScanchain2;拷贝DCC控制寄存器到r2MRCp14,0,r2,c0,c0,0;检查DCC控制寄存器的位1TSTr2,#0x2;如果位1清掉了,拷贝数据从r1到DCC写寄存器MCREQp14,0,r1,c1,c0,0;拷贝DCC控制寄存器到r2MRCp14,0,r2,c0,c0,0;检查DCC控制寄存器的位0TSTr2,#0x1;如果位0设置,拷贝数据从DCC写寄存器到r3MRCNEp14,0,r3,c1,c0,0调试器查询控制寄存器利用扫描链2来察看什么时候写位被设置,读位被清掉.接着数据可以被扫描进入或者输出.r1r3ReadRegister16TM16122v01ARMDebugSolutionsARMDCC利用中断进行通讯RCOMMRXInterruptControllerCOMMTXnIRQWOtherinterruptsources通过Multi–ICE连接的调试器17TM17122v01ARMDebugSolutions向量捕获允许没有处理软件的异常机制的捕获在ARM7TDMI上执行利用断点当从ROM地址0x0调试时关闭在ARM9TDMI/ARM10和后来的版本上执行利用专门的硬件只对硬件异常敏感.到向量表里的跳转将不被捕获留下观察点单元作为一般使用.一旦有你自己的处理,则关掉向量捕获.AXD:sppvector_catch0%RUsPDaifFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x0018TM18122v01ARMDebugSolutionsARM目标上运行的库代码,但是任何需要的底层的I/O是由主机提供的.SWI机制提供的主机访问.SWI接口是ARMulator,Angel和Multi-ICE通用的组成部分.Semihosted程序将运行在所有的ARM目标板上,而不需要移植.需要连接的调试工具提供这些功能.Semihosting:printf(“hello\n”);:应用代码:SWI:库代码SWI服务程序与主机上运行的调试器通讯hello19TM19122v01ARMDebugSolutions通过JTAG的Semihostingsppsemihosting_vector0x8sppsemihosting_enabled1关掉:sppsemihosting_enabled0Breakpoint0x1080x1040x100…….....SWI,,,,,…......pc=0x8lr=0x108MOVSpc,lrMulti-ICE仿真的SWI服务程序0x000x1C0x180x140x100x0C0x080x04ResetUndefinedSoftwareInterruptPrefetchAbortDataAbortReservedIRQFIQ20TM20122v01ARMDebugSolutionsSemihosting加上用户SWIssppsemihosting_enabled1sppsemihosting_vector0x450Breakpoint0x1080x1040x100…….....SWI,,,,,…......lr=0x108MOVSpc,lrSWIHandlerSemiSWISTMFDsp!,{regs}LoadSWInumberBifsemiSWIDealwithSWI:::LDMFDsp!,{regs}MOVSpc,lr0x4500x000x1C0x180x140x100x0C0x080x04ResetUndefinedSoftwareInterruptPrefetchAbortDataAbortReservedIRQFIQ21TM21122v01ARMDebugSolutionssppsemihosting_dcchandler_address0x70000sppsemihosting_vector0x8sppsemihosting_enabled20x000x1C0x180x140x100x0C0x080x040x1080x1040x100…….....SWI,,,,,…......pc=0x8lr=0x108MOVSpc,lrDCCSemihosting0x70000DCCDCCSemihostingHandlerCodeResetUndefinedSoftwareInterruptPrefetchAbortDataAbor
本文标题:ARM调试方案
链接地址:https://www.777doc.com/doc-23720 .html