第六讲ARM处理器调试原理课件_第1页
第六讲ARM处理器调试原理课件_第2页
第六讲ARM处理器调试原理课件_第3页
第六讲ARM处理器调试原理课件_第4页
第六讲ARM处理器调试原理课件_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

复习第四讲:ARM指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍基于ARM7内核微处理器调试原理开发工具ADS1.2介绍—ARM7开发工具uVision4.0介绍—CM3第六讲嵌入式系统开发和调试原理ARM指令集的特点所有的ARM指令都是32位宽,在存储器中以4字节的边界对齐3地址的数据处理指令(即两个源操作数和结果寄存器都独立设定)LOAD/STORE架构,包含非常强大的多寄存器Load和Store指令能够在单时钟周期的单条指令来完曾一项普通移位操作和一项普通的ALU操作可以通过协处理器来扩展新的寄存器和数据类型指令可条件执行ARM指令的分类数据处理指令(16条数据处理和乘法)分支指令(B,BL,BX)数据传送指令(访问存储器)LDR/STR,批量传送其他指令软件中断SWI指令程序状态寄存器指令ARM汇编语言伪操作在ARM汇编语言程序中,有一些特殊的助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊助记符为伪操作标示符(directive),其完成的操作称为伪操作。符号定义(SymbolDefinition)伪操作数据定义(DataDefinition)伪操作汇编控制(AssemblyControl)伪操作信息报告(Reporting)伪操作其他(Miscellaneous)伪操作

ARM汇编语言伪指令伪指令语法格式作用ADRADR{cond}

register,expr将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。ADRLADRL{cond}register,expr将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。LDRLDR{cond}register,=[expr|label-expr]将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。NOPNOP在汇编时将被替换成ARM中的空操作。ATPCS介绍-寄存器的使用规则定义:ATPCS(arm-thumbprocedurecallstandard)是子程序之间的调用设定一定的规则,ATPCS就是ARM程序中的子程序调用的基本规则PCS:规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起定义了一套有关过程(函数)调用者与被调用者之间的协议。PCS规范强制实现如下约定:调用函数如何传参(即压栈方法,以何种方式存放参数),被调用函数如何获取参数,以何种方式传递函数返回值。基本的ATPCS包含的内容各个寄存器的使用规则和相应的名称:R0~R3参数寄存器R4~R11通用变量寄存器数据栈的使用规则:数据栈是FD(满递减堆栈)参数传递的规则:对于参数个数可变的子程序,但参数不超过4个时,可以使用寄存器R0~R3来传递参数;当参数超过4个时,还可以使用数据栈来传递参数。复习第四讲:ARM指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍基于ARM7内核微处理器调试原理开发工具ADS1.2介绍—ARM7开发工具uVision4.0介绍—CM3第六讲嵌入式系统开发和调试原理嵌入式系统的开发过程PC上的调试程序编写,项目管理,编译,调试都在同一台计算机上完成(IDE,IntegratedDesignEnvironment)MSVC++MSVBBorlandC++Builder一般是通过在断点插入相关的调试软陷指令来实现调试功能的.交叉编译环境宿主机开发机器(包含开发用软件编辑器,调试器,编译器,汇编器……)目标机程序运行的机器宿主机=目标机称为本地编译(VB编写应用程序)“交叉编译”是指宿主机和目标机是不同的系统使用PC机是X86系统,而目标机是ARM,单片机或者其他系统嵌入式应用软件开发要使用交叉开发环境。交叉开发环境集成了编辑器、交叉编译器、交叉调试器、仿真软件(simulator)、工程管理器于一体商业化的界面友好的同MicrosoftVisualStudio可视化开发环境相似,免费如GNU工具链运行在字符界面下交叉开发的硬件环境包括宿主机和目标板。?嵌入式系统调试的需求RunControl(运行控制)Setwatchpointsondataaccesses(观察感兴趣的数据)Setbreakpointsoninstructions(指令断点)Singlestepthroughcode(单步调试)StateControl(状态控制)Processorstate(处理器状态)ReadandwriteregistervaluesSystemstate(系统状态)AccesstosystemmemoryDownloadcodeExecutionHistory(执行过程)Executiontraceinformation(跟踪程序信息)Memoryaccesshistory(存储器访问历史数据)嵌入式系统调试的一般方法基于交叉编译环境下的调试调试方法解决调试器与被调试程序之间如何通信以达到调试目标能够获取处理器数据总线、地址总线,处理器状态等信息,以便在选中的数据点(watchpoints)和指令点(breakpoints)进入调试状态能够获取处理器内核寄存器的信息能够插入指令运行能够访问存储器的内容记录指令/数据的执行和访问记录ARM调试系统组件执行AXD调试器的主机(ADS的一部分)和Multi-ICEserver协议转换器(Multi-ICE)跟踪接口单元(MultiTrace)开发板(IntegratorCoreModule)TracePortJTAGPort并口串口l/以太网交叉编译环境的内容集成开发系统提供高效明晰的图形化的嵌入式应用软件开发平台,包括一整套完备的面向嵌入式系统的开发和调试工具。一般包括编辑器、编译器、连接器、调试器、工程管理器和底层调试接口设备(BDM/JTAG仿真器)等复习第四讲:ARM指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍基于ARM7内核微处理器调试原理开发工具ADS1.2介绍—ARM7开发工具uVision4.0介绍—CM3第六讲嵌入式系统开发和调试原理调试方法调试有四种基本方法模拟调试(Simulator)软件调试(Debugger)全仿真调试(Emulator)JTAG调试(JTAGDebugger)调试辅助工具示波器、逻辑分析仪—与硬件关系密切模拟调试方法调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。优点:简单方便,不需要目标板,成本低缺点:功能非常有限,无法实时调试大多数调试工具都提供Simulator功能指令集模拟器利用在宿主机(一般是PC)的资源构建一个虚拟的目标机系统,该系统通过解释执行目标处理器的二进制代码来仿真运行目标程序ARMArmulator-模拟运行ARM指令系统PCPCOS(MSWindows)VM(虚拟机)虚拟机构建的环境:寄存器,存储器等等目标机的RTOSApp1App2Appn….模拟器的改进-虚拟原型ARMADSRDI接口ArmulatorMultiICEServerAngleArmulatorMem接口虚拟的AMBAC语言模型EMI模型SDRAM模型中断控制器模型其他模块模型用户自己编写的模型ARMIDEARMULATOR软件仿真器ARMulator(ARM仿真器):是一个指令级的仿真程序,运行在主机上没有硬件的情况下,调试应用程序ARMulator可以报告各指令执行时的机器周期,所以也可以用来进行应用程序的性能分析。ARMulator提供了一套扩展机制处理器核模型:能够仿真现有的各种ARM核,包括Thumb指令集存储器接口:它能够模拟目标存储器系统的各种特征。提供各种原型以支持快速建模,但接口需要全定制以实现需要的细节协处理器接口:它支持定制的协处理器模型操作系统接口:使个别系统调用可以由主机处理,或在ARM模型上模拟实现了完整的片上系统(SOC)的软硬件协同设计验证OS模拟器的调试方法除了指令集模拟器还有操作系统模拟器SymbianOS模拟器PocketPC模拟器由于在OS层面上进行仿真,应用程序运行在PC的二进制代码,所以在目标系统上需要重新编译PCPCOS(MSWindows)RTOSAPI封装App1App2Appn….由PCOS模拟的RTOS环境:任务,任务间通信软件调试方法(Debugger)主机和目标板通过某种接口(通常是串口)连接,主机上提供调试界面,待调试软件下载到目标板上运行。这种方式的先决条件是要在Host和Target之间建立起通信联系(目标板上称为监控程序Monitor)优点:纯软件,价格较低,简单,软件调试能力较强缺点:需要事先烧制Monitor(往往需多次试验才能成功)且目标板工作正常,功能有限,特别是硬件调试能力较差。

PCTargetMonitor串口基于调试代理(Angel)的调试方法Angel是一段驻留在开发板ROM中的一段程序,系统Boot后,Angle接管整个系统并初始化系统和通信接口.Angel通过一定的通信协议(ADP协议)与主机的Debugger通信.Debugger通过特定的命令通知Angel将用户调试的程序下载到目标板的SDRAM中的特定地址,并可以按照Debugger的要求将控制权交给相应的代码地址对于用户设置的断点,Angel会在断点的位置插入一条软陷指令(当然在插入之前会保存原来的那条指令),当用户的程序执行到断点时,系统会产生一个软陷异常,这时可以由Angel接管系统,并将系统当前的寄存器的值传给主机Debugger如果主机Debugger需要查看内存,也将通过Angel读取后将存储器的值上传给主机。通信接口flashsdramHostPC&Debugger串口电缆以太网USBCPUAngel调试的优缺点Angel调试的缺点:需要占用目标板的资源:处理器,存储器和通信接口没有办法在ROM区设置断点难以跟踪数据变化Angel调试的优点:不需要外的调试硬件,成本低廉全仿真调试方法全仿真调试(Emulator)

这种方式用仿真器完全取代目标板上的MCU,因而目标系统对开发者来说完全是透明的、可控的。仿真器与目标板通过仿真头连接,与主机有串口、并口、网口或USB口等连接方式。由于仿真器自成体系,调试时既可以连接目标板,也可以不连接目标板(Standalone)。优点:功能非常强大,软硬件均可做到完全实时在线调试缺点:价格昂贵。采用在线调试方法的优缺点优点一般内存采用双口内存,能在执行时同时看到数据的变化内部附有功能强大的分析器,可以分析状态,效率和时序等采用存储器断点技术实现硬件断点,数量不受限制它不但可以往前执行,还可以倒退执行,所有信息都可以记录起来,包括计时器状态、工作切换状态、内存状态、寄存器状态和变量等信息,而且全部是实时的。这种调试方法在没有片内调试逻辑的微处理器中,尤其式单片机系统中得到广泛的采用.缺点在线仿真器具有侵入性,其中的嵌入式微处理器并不是目标系统中的处理器,电气特性不同,无法真实反映实际时序。在线仿真器拥有自己的目标处理器、RAM、ROM和自己的嵌入式软件,所以是非常昂贵的(由其对于高速设备而言)。基于在线仿真器(在线调试)的调试方法在线仿真器提供自己的处理器和存储器不依赖目标系统的处理器和内存仿真器上的处理器可以是一个相同的芯片,也可以是一个有更多引脚的变型芯片(对内部状态有更高的可观察性)。仿真器上还有NMI(不可屏蔽中断)控制逻辑,存储器控制逻辑,映象ROM,映象RAM等其他各种硬件资源,所有的硬件资源由运行在主桌面系统上的软件来管理。

flashsdramHostPC&DebuggerCPU插座通信接口仿真器CPU控制逻辑监测数据总线和控制总线CPU电缆关于在线调试的进一步的思考既然通过片外的控制逻辑可以实现对芯片的调试,为什么不把这个控制逻辑作在片内,从而省掉仿真器呢?AtSpeed调试方案:因为调试逻辑在片上增加芯片成本:对于32位处理器,增加比例有限!如何从芯片外获得调试的控制权?会不会增加额外的封装成本?:可以复用JTAG测试接口新的解决方案:片上在线调试(OnChipICE)JTAG调试方法JTAG调试

这种方式有一个硬件调试体。该硬件调试体与目标板通过JTAG调试接口相连,与主机通过串口、并口、网口或USB口相连。待调试软件通过JTAG调试器下载到目标板上运行。优点:方便、简单,无须制作Monitor,软硬件均可调试缺点:需要目标板,且目标板工作基本正常(至少MCU工作正常),仅适用于有调试接口的芯片

TargetPC接口JTAGDebuggerJTAG基本原理IEEEStandard1149.1(JOINTTESTACTIONGROUP)

-TestAccessPortandBoundary-ScanArchitecture边界扫描(Boundary-Scan):

基本思想:在靠近芯片输入/输出管脚上增加一个移位寄存器单元(边界扫描寄存器)。

正常状态下,边界扫描寄存器对芯片来说是透明的,所以正常的运行不会受到任何的影响。TAP:控制边界扫描链调试状态下,边界扫描寄存器将芯片和外的输入输出隔离开,通过这些边界扫描寄存器可以实现对芯片输入输出信号的控制。具体控制过程如下:

、输入管脚:通过与之相连的边界扫描寄存器把信号(数据)加载到该管脚中去。

②、输出管脚:通过与之相连的边界扫描寄存器“捕获”该管脚上的输出信号。JTAG基本原理注意:

芯片输入输出管脚上的边界扫描寄存器单元可以相互连接起来,在芯片周围形成一个边界扫描链。该链可以实现串行的输入输出,通过相应的时钟信号和控制信号,可方便的观察和控制在调试状态下的芯片。TAP(TestAccessPort):TAP是一个通用的端口,利用它可以访问芯片提供的所有DR和IR。对整个TAP的控制是通过TAPController来完成的。

TAP包括5个信号接口:◆TCK(TestClockInput)

JTAG时钟信号位。标准强制要求

◆TMS(TestModeSelect)测试模式选择,通过该信号控制JTAG状态机的状态。TMS在TCK的上升沿有效。标准强制要求

◆TDI(TestDataInput)数据输入口。所有要输入到特定寄存器的数据都是通过TDI口一位一位串行输入的(TCK驱动)。标准里强制要求

◆TDO(TestDataOutput)数据输出口。所有要从特定的寄存器中输出的数据都是通过TDO口串行的一位一位输出的(TCK驱动)。标准里强制要求

◆TRST(TestResetInput)JTAG复位信号。标准里是可选的JTAG基本原理JTAG的工作状态机JTAG的工作过程通过TAP接口,对数据寄存器(DR)进行访问的一般过程是:通过指令寄存器(IR),选定一个需要访问的数据寄存器;把选定的数据寄存器连接到TDI和TDO之间;由TCK驱动,通过TDI,把需要的数据输入到选定的数据寄存器当中去;同时把选定的数据寄存器中的数据通过TDO读出来复习第四讲:ARM指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍基于ARM7内核微处理器调试原理开发工具ADS1.2介绍—ARM7开发工具uVision4.0介绍—CM3第六讲嵌入式系统开发和调试原理ARMDebugSystemComponentsEmbeddedICELogicARMCoreSOCJTAGPortRun

Control

UnitTAPe.g.Multi-ICE,RVIHostcomputerrunning

AXD(+TDTfortrace)orRVDAddressControlEmbeddedICELogicARMCoreSOCEmbedded

Trace

MacrocellTracePortJTAGPortTrace

Capture

UnitRun

Control

UnitDataTAPe.g.Multi-ICE,RVIe.g.MultiTrace,RVTHostcomputerrunning

AXD(+TDTfortrace)orRVDAddressControlEmbeddedICELogicARMCoreSOCEmbedded

Trace

MacrocellTracePortJTAGPortRun

Control

UnitDataTAPEmbedded

Trace

Buffere.g.Multi-ICE,RVIHostcomputerrunning

AXD(+TDTfortrace)orRVDAddressControlEmbeddedICELogicARMCoreSOCEmbedded

Trace

MacrocellTracePortJTAGPortTrace

Capture

UnitRun

Control

UnitDataTAPEmbedded

Trace

Buffere.g.Multi-ICE,RVIe.g.MultiTrace,RVTHostcomputerrunning

AXD(+TDTfortrace)orRVDARM7TDMI处理器包括三大部分:◆ARMCPUMainProcessorLogic

包括了对调试的硬件支持◆EmbeddedICE-RTLogic

包括一组寄存器和比较器,用来产生调试异常,设置断点和观察点。◆TAPController

通过JTAG接口来控制和操作扫描链基于JTAG的片上ICE扫描链0:113位,包含数据总线、控制信号、地址总线扫描链1:33位,为扫描链0子集,包括数据总线和DBGBREAK信号扫描链2:38位,主要用于访问ICE逻辑部件中的各寄存器扫瞄链3:ARM7TDMI和外围设备EmbeddedICE逻辑电路包括一组寄存器和比较器,3个附件信号DBGREQ:调试请求DBGACK:调试确认BREAKPT:断点信号TAP控制器可以通过JTAG接口控制各个硬件扫描链调试原理:如何设置断点?,如何进入调试状态,和正常运行状态有什么区别?在调试状态下如何访问内部寄存器、如何访问内存?EmbeddedICE-RTLogic的结构通过对EmbeddedICE控制,以及通过对EmbeddedICE中寄存器的读取,可以获得ARM内核的状态,为程序设置断点观察点以及读取Debug通信通道(DCC)。这里的断点用来标识某个地址上的一条指令,而观察点用来观察某个地址上的数据变化,所以这二者是有区别的。DCC用来完成主调试器和目标机间的信息发送。EmbeddedICE的结构EmbeddedICE的长度是38位,包括:◆32位数据◆5位地址,访问寄存器◆1个读写控制位EmbeddedICE的寄存器主要包括Debug状态和控制寄存器,Debug通信寄存器和断点设置相关的寄存器TheEmbeddedICELogic通过扫瞄链2访问ICE的寄存器,ICE包含三个部分DebugControlandStatusregisters(调试寄存器)控制ICE-RTICE的状态判断异常产生的原因Twowatchpointunits(观察点单元)2组,每组3个寄存器(数据,地址,控制)通过监控数据、地址和控制信号,判断数据观察点watchpoint和程序断点breakpoint每一个组单元可以提供1watchpoint,1hardwarebreakpointinROMorRAM,orMultiplesoftwarebreakpointsinRAMDebugCommunicationsChannel(调试通信通道)EmbeddedICE寄存器格式及含义DebugControlRegister格式:DBGACK:用来控制DBGACK信号的值DBGRQ:是调试请求信号,通过将该信号置“1”,可以强制ARM7TDMI暂停当前的指令,进入调试状态INTDIS:用来控制中断SBZ/RAZ:任何时候都必须被置“0”MonitorModeEnable:用来控制是否进入Monitor模式EmbeddedICE-RTDisable:用来控制整个EmbeddedICE-RT,是启用还是禁用DebugStatusRegister格式:DBGACK:用来标识当前系统是否处于调试状态。‘1’,表示进入;‘0’,表示未进入。DBGRQ:用来标识DBGRQ信号的当前状态IFEN:用来标识系统的中断控制状态:启用还是禁用cgenL:用来判断当前对调试器在调试状态下 对内存的访问是否完成TBIT:该位用来判断ARM7TDMI是从ARM状态还是THUMB状态进入到调试状态的EmbeddedICE寄存器格式及含义AbortStatusRegister格式该寄存器的长度为1,来判断一个异常的产生的原因:断点触发?观察点触发?还是一个真的异常?实例:用ScanChain2设置DebugControlRegister第一步:选择扫描链2,将其连接到TDI,TDO之间:通过TAP将SCAN_N指令写入到指令寄存器当中去,TAP状态转换如下:RUN-TEST/IDLE→SELECT-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写到扫描链选择寄存器当中去。第二步:将ScanChain2置为内测试模式用INTEST指令实现该操作,指令写入与SCAN_N指令的过程类似第三步:写DebugControlRegister假设要将DebugControlRegister的6位全部置“1”,按照扫描链2的格式,需要写入到扫描链2第序列应该为:

1,00000,0000,0000,0000,0000,0000,0000,0011,1111‘1’表示写操作,‘00000’标识的是DebugControlRegister的地址,中间32位是要写入到DebugControlRegister的数据。因DebugControlRegister长度为6,所以只有低6位的数据序列‘111111’有效。

在SHIFT-DR状态下,通过38个TCK时钟驱动,就可以将上面的序列串行输入到扫描链2当中去。实例:用ScanChain2设置DebugControlRegisterEmbeddedICE有两个WtchPoint单元。下面介绍一下WatchPoint寄存器的使用:

EmbeddedICE的一个主要作用是可以在ARM程序中设置软件或硬件断点。在EmbeddedICE中,集成了一个比较器,负责把ARM处理器取指的地址A[31:0],数据D[31:0]以及一些控制信号与EmbeddedICE中WatchPoint寄存器中设置的数值相比较(具体说应该是进行与或运算),比较结果用来确定输出一个ARM断点(BreakPoint)信号。具体运算关系如下公式所描述:EmbeddedICE的断点/观察点设置{Av[31:0],Cv[4:0]}XOR{A[31:0],C[4:0]}OR{Am[31:0],Cm[4:0]}==0xFFFFFFFF当上述表达式值为真时,断点/观察点信号有效,ARM内核进入Debug模式Watchpoints(数据观察点)ControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorWatchpointD[31:0]0xF0000x00xffffffffDatawrite0xF000MemoryLocationtobewatched读写完成访问的数据以后进入调试状态:Awatchpoint:当约定存储器被约定的方式访问以后触发断点;这个例子说明当地址0xF000被写入的时候产生的观察点每一个观察点单元可以产生一个数据观察点断点HardwareBreakpoints(硬件断点)0x8000ARM-0x3

Thumb-0x10xffffffffOpcodefetch0x8000MemoryBreakpointtobesethereControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorBreakpointD[31:0]Ahardwarebreakpoint

:当程序再约定地址的取出指令时候,触发断点这个例子说明:在0x8000地址取指令的时候产生程序断点HardwarebreakpointscancanbesetinRAMorROM.Eachwatchpointunitcanbeusedtosetone(andonlyone)hardwarebreakpoint.SoftwareBreakpoints(软件断点)Memory0xffffffff0xeeeeeeee0x0OpcodefetchControlAddrValueDataValueControlValueAddrMaskDataMaskControlMaskA[31:0]ComparatorBreakpointD[31:0]1.Readandstoreopcode2.Write“special”valueAsoftwarebreakpoint:软件断点是约定的一条指令被取指的时候触发程序断点(这条指令可以在任何地址)

i这个例子说明了软件断点实现的过程首先在Datamask寄存器中写入特定指令,AddrMask为0xffffffff,当取值到特殊指令的时候产生断点。只能在RAM中产生。Eachwatchpointunitcanbeusedtosetanunlimitednumberofsoftwarebreakpoints.(The“special”value)当需要在某地址代码处设置软件断点的时候,仿真器会先将此处代码进行备份保护,然后将预先设定好的断点特征值(一般为0x0000等不易与代码混淆的值)写入此地址,覆盖原来的代码数据。产生硬件断点:触发,取指地址触发屏蔽数据,存入地址2个点产生数据观察点对应地址数据读取完成以后触发屏蔽数据,存入地址2个点产生软件断点对应数据触发屏蔽地址,存入特殊数据X断点地址插入特殊数据X,改写存储器,所以只能在RAM中设置无穷多的在调试状态访问寄存器和存储空间ARM7TDMI已经进入到调试状态(DBGRQ、断点、观察点)。通过扫瞄链1在流水线中插入指令,系统运行在DCLK,不是MCLK(系统正常时钟)在调试状态下支持数据处理指令、Load/Store指令、MSR,MRS指令。扫描链1中的第33位,BREAKPT输入,在调试过程当中有很重要的作用如果BREAKPT置0,意味着下一条指令以调试速度执行(DCLK驱动)如果BREAKPT置1,意味着下一条指令以系统速度执行(MCLK驱动)在调试状态读取/修改寄存器读取R0的值插入指令STRR0,[R0]&BREAKPT=0:-这步相当于指令STRR0,[R0]的取指令周期(3级流水线);插入空指令MOVR0,R0&BREAKPT=0:-这一步读取新指令MOVR0,R0,同时,相当于指令STRR0,[R0]的译指令周期(3级流水线);插入空指令MOVR0,R0&BREAKPT=0:-这一步读取新指令MOVR0,R0,同时,插入的STRR0,[R0]指令开始执行(3级流水线)。通过扫描链1读出捕获的数据总线上的数据:修改R0的值插入指令LDRR0,[R0]&BREAKPT=0:插入两条空指令通过扫瞄链1放数据在数据总线上插入一条空指令调试状态下读写内存Read10wordsfromaddress0x8000onwardsMOVr0,#0x8000

LDMIAr0!,{r1-r10}-systemspeed

STMIAr0,{r1-r10}-debugspeedTDITCKDatabusARMTCKregistersDebug

speedDatabusARMxDTDOr1-r1013MCLKSystem

speedDatabusARM2registersPipeline复习第四讲:ARM指令集和汇编语言概述嵌入式系统的一般开发过程:交叉编译嵌入式系统调试原理介绍基于ARM7内核微处理器调试原理开发工具ADS1.2介绍—ARM7开发工具uVision4.0介绍—CM3第六讲嵌入式系统开发和调试原理嵌入式系统的开发过程编译器汇编编译器liber连接器编辑环境软件设计交叉开发环境IDEMonitor(调试,跟踪)转换程序Emulator目标板烧结程序串口,并口,以太网,USB项目管理ADS集成开发环境(IDE)ARMAXDRDI接口ArmulatorMultiICEServerAngleArmulatorMem接口ARMIDE并行口串行口CodeWorrier仿真器目标板JTAG接口串口编译器汇编器联接器CPUflashsdram集成开发环境-ADS1.2“ARMDeveloperSuiteV1.2”,ARM公司出品,取代早期SDT、ADS1.0/1.1;IDE环境,包括ARM/Thumb汇编器:armasmANSIC编译器-armcc

和tccISO/EmbeddedC++编译器-armcppandtcpp链接器–armlinkWindows集成开发环境–CodeWarrior格式转换器–fromelf库管理器-armar调试器模拟调试器:ARMulatorJTAG调试:AXD(与Multi-ICE配合)ADS简介ADS的软件组成ADS的主要组成部件有:命令行开发工具ARM运行时库GUI开发环境(CodeWarrior和AXD)实用程序支持软件

命令行开发工具Armcc:ARMC编译器Armcpp:ARMC++编译器Armasm:ARM汇编编译器:Armlink:ARM连接器ADS的软件组成完成将源代码编译,链接成可执行代码的功能ADS的命令行开发工具命令行开发工具-Armccarmcc用于将用ANSIC编写的程序编译成32位ARM指令代码armcc最基本的用法为:armcc[options]file1file2...filen这里的option是编译器所需要的选项,fiel1,file2…filen是相关的文件名命令行开发工具-Armcpparmcpp是ARMC++编译器,它将ISOC++和EC++编译成32位的ARM指令代码。命令行开发工具-Armasmarmasm是ARM和Thumb的汇编器它对用ARM汇编语言和Thumb汇编语言写的源代码进行汇编ADS的软件组成命令行开发工具-Armlinkarmlink是ARM连接器即可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行连接,生成一个可执行文件,也可以将多个目标文件部分连接生成一个目标文件,以供进一步的连接。生成ELF格式的可执行映像文件,-image.axf。ADS的软件组成—运行时库运行时库(Crun-timelibrary)C程序运行时需要这些库中的函数Crun-timelibrary里面含有初始化代码,还有错误处理代码(例如dividebyzero处理)如果没有了Crun-time库,main()就不会被调用,exit()也不能被响应。因为Crun-timelibrary包含了C程序运行的最基本和最常用的函数当用户对汇编程序,C程序或C++程序进行链接的时候,链接器会根据在建立时所指定的选项,选择适当的C或C++运行时库的类型ARMC库函数是以二进制格式提供的;ARM库函数禁止修改,如果想对库函数创建新的实现,可以把新函数编译成目标文件,连接时将其包含进来;RogueWaveStandC++函数库源码不是免费发布的,可以从RogueWaveInc.;运行时库-运行时库类型ANSIC库函数在ISOC标准中定义的函数;在semihosted环境下用来实现C库函数的与目标相关的函数;被C和C++编译器所调用的支持函数C++库函数版本为2.01.01的RogueWaveStandardC++库;C++编译器使用的支持函数;RogueWave库所不支持的其他的C++函数运行时库-库路径库路径是在ADS软件安装路径的lib目录下的两个子目录armlib和cpplibADS的软件组成—运行时库运行时库-库路径Armlib子目录这个子目录包含了ARMC库,浮点代数运算库,数学库等各类库函数ARMC库函数是以二进制格式提供的与这些库相应的头文件在e:\arm\adsv1_2\include目录中cpplib子目录这个子目录包含了RogueWaveC++库和C++支持函数库RogueWaveC++库和C++支持函数库合在一起被称为ARMC++库与这些库相应的头文件安装在e:\arm\adsv1_2\include目录下ADS的软件组成—运行时库ADS的软件组成GUI开发环境

CodeWarrior集成开发环境

AXD调试器ADS的软件组成GUI开发环境-CodeWarriorCodeWarrior集成开发环境(IDE)为管理和开发项目提供了简单多样化的图形用户界面用户可以使用ADS的CodeWarriorIDE为ARM和Thumb处理器开发用C,C++,或ARM汇编语言的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论