浅谈ARM仿真器中的断点资源
IAR串口Simulator仿真中断的调试实现

图1
4. 设置中断仿真 指定一个中断,使它循环 2000 次后模拟一次中断。选择 Simulator-Interrupts 菜单项,弹出如图 2 所示 对话框, 在其中单击 New 按钮,弹出图 3 对话框。按以下内容对其中断进行设置。 Interrup : 填入 IRQ 用于指定所采用的中断。 Description:这里 IAR 软件会自动填好相应的内容使仿真器能够正确模拟中断,用户在使用时请不要修 改。
C-SPY 提供了 2 个系统宏函数__setSimBreak 和__orderInterrupt,可在设置宏函数 execUserSetup()中 调用, 用于自动设置断点和中断定义, 避免用户进行手动配置。 为此可以采用宏文件 SetupAdvanced.mac 取代前面的 SetupSimple.mac.这样在 C-SPY 启动时将自动设置断点,完成中断定义,用户还不必手动 在 Interrupts 和 Breakpoints 对话框中进行输入。注意,在加载 SetupAdvanced.mac 宏文件之前,应该 先去除以前定义的断点和中断。 SetupAdvanced.mac 宏文件源程序见后。
图2
图3 First activation:填入 4000,其是指定首次激活中断的时间,当周期计数器达到指定值时中断被激活。 Repeat interval:填入 2000,其是中断的重复间隔,以时钟周期为单位。 Hold time:选择 Infinite,功能是保持时间。 Probability%:填入 100,功能是指定产生中断的可能性,100%表示将按指定的频率产生中断,采用其他 百分数将按随机频率产生中断。在运行过程中,C-SPY 处于等待状态,直到循环计数器超过激活时间而 产生依次中断,每循环 2000 次重复产生中断。
ARM的异常处理学习笔记转贴

ARM 的异常处理学习笔记转贴ARM的异常处理这部分比较不好理解。
当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。
当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。
在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。
1、引起异常的原因(1)、指令执行引起的异常软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、预取址中止(存储器故障)、数据中止。
(2)、外部产生的中断复位、FIQ、IRQ。
2、ARM中异常中断的种类(1)、复位(RESET)a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
b、通过设置PC跳转到复位中断向量处执行称为软复位。
(2)、未定义的指令当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
(3)、软件中断这是一个由用户定义的中断指令(SWI)。
可用于用户模式下的程序调用特权操作指令。
在实时操作系统中可以通过该机制实现系统功能调用。
(4)、指令与取终止(Prefech Abort)如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
(5)、数据访问终止(DATAABORT)如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
(6)、外部中断请求(IRQ)当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。
系统中个外设通过该异常中断请求处7)、快速中断请求(FIQ) 理服务。
(当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。
ARM开发板使用手册

ARM开发板使用手册PHILIP LPC2132ARM7TDMI第一章介绍LPC2132开发板是专门为arm 初学者开发的实验板,用户可以做基础的arm实验,也可以做基于ucos-ii的操作系统实验。
本系统的实验源代码全部开放,用户可以在此基础上开发产品,减少重复劳动。
由于LPC2132体积很小,并且功能强大,因此特别适合需要复杂智能控制的场合,其运行速度高于早期的80486计算机,而体积只有指甲大。
我们已经将LPC2132产品成功应用在干扰比较强的工业场合,经过6个月的运行,各项指标符合要求。
因此我们特别推荐这一款开发板作为ARM初学者入门。
由于此款开发板体积很小,非常适合直接应用在工业以及民用智能控制器的场合。
LPC2132 CPU介绍LPC2131/2132/2138 是基于一个支持实时仿真和跟踪的16/32 位ARM7TDMI-STM CPU,并带有32kB、64kB 和512kB 嵌入的高速Flash 存储器。
128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16 位Thumb 模式将代码规模降低超过30%,而性能的损失却很小。
较小的封装和很低的功耗使LPC2131/2132/2138 特别适用于访问控制和POS 机等小型应用中;由于内置了宽范围的串行通信接口和8/16/32kB 的片内SRAM,它们也非常适合于通信网关、协议转换器、软件modem、语音识别、低端成像,为这些应用提供大规模的缓冲区和强大的处理功能。
多个32 位定时器、1个或2 个10 位8 路的ADC、10 位DAC、PWM 通道、47 个GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制应用以及医疗系统。
主要特性●●16/32 位ARM7TDMI-S 核,超小LQFP64 封装。
●●8/16/32kB 的片内静态RAM 和32/64/512kB 的片内Flash 程序存储器。
keil4与ARM仿真(支持断点和单步运行)

初学ARM7,想在仿真的基础上学习ARM编程,就下载了Keil的ARM版本——MDK。
程序都是网上下载的最简单的最基础的点LED的程序,用的Keil自动生成的Startup.s,编译后生成hex文件放到Proteus的MCU中,但是灯却不亮。
打开别人的例程(uV2版本的),把hex文件放到Proteus中,可以仿真;但是用我的uV4编译后,重载hex文件后,仿真失败。
看来是新版本编译器的问题。
后来在网上看到有人也遇到和我一样的问题,解决方法有2种,我都试了下能成。
方法1:把生成的*.axf文件复制一份,修改后缀名*.elf。
然后把这个elf文件加载到MCU中。
方法2:用记事本打开生成的*.hex文件,删除倒数第2行,保存。
然后把这个hex 文件加载到MCU中(MDK较高版本不用删除也行)。
arm芯片debug工作原理

Arm芯片是一种常见的处理器架构,被广泛应用于移动设备、嵌入式系统和服务器等领域。
在Arm芯片的开发和调试过程中,debug工作起着至关重要的作用。
本文将从Arm芯片debug的基本原理、调试工具、调试技术和实际案例等方面进行探讨,以帮助读者更好地理解Arm芯片debug的工作原理。
一、Arm芯片debug的基本原理Arm芯片debug的基本原理是通过调试接口与开发工具进行通信,实时监控处理器的状态和程序执行情况,以便定位、分析和解决软件或硬件的问题。
主要包括以下几个方面:1. 调试接口Arm芯片通常提供JTAG、SWD等标准调试接口,通过这些接口可以与外部调试工具进行连接,并对处理器进行调试和控制。
2. 调试模式Arm芯片具有调试模式和运行模式之分,调试模式下处理器会暂停程序的执行,以便开发工具对其进行访问和控制。
3. 调试组件Arm芯片的调试组件包括调试寄存器、调试控制单元和调试子系统等,通过这些组件可以实现对处理器的状态监控、程序跟踪、断点设置、异常处理等功能。
4. 调试通信Arm芯片与调试工具之间通过调试接口进行通信,调试工具可以向处理器发送指令和数据,获取处理器的状态和执行情况。
二、Arm芯片debug的调试工具在Arm芯片debug过程中,常用的调试工具包括Keil uVision、IAR Embedded Workbench、SEGGER J-Link等,这些工具提供了丰富的调试功能和界面,方便开发人员进行调试操作。
具体包括以下几个方面:1. Keil uVisionKeil uVision是一款集成开发环境(IDE),提供了强大的Arm芯片调试功能,包括断点调试、单步执行、寄存器查看、内存查看等。
2. IAR Embedded WorkbenchIAR Embedded Workbench也是一款流行的Arm芯片开发工具,支持多种Arm芯片系列,提供了直观的调试界面和丰富的调试功能。
仿真器使用说明书

1 ARM_STAR仿真器简介功能介绍ARM_Star 仿真器是一款为广大ARM工作者设计的高性能仿真器,ARM_Star仿真器完全实现ARM RDI 1.5和RDI 1.51协议,与ARM Multi-ICE™ 兼容,支持所有含有Embedded-ICE Logic的ARM 内核CPU, 在调试软件的控制下,ARM_Star仿真器可以停止、启动ARM CPU的运行,用户通过ARM_Star仿真器察看、修改寄存器,存储器,设置断点、单步执行,下载烧写Flash程序等。
主要特点:程序下载速度快与PC机的通信速度最高可达到12M, 下载速度达到100K---200Kbytes每秒,单步速度可达85步每秒。
支持调试软件多支持的调试软件有ADS、SDT、GreenHill Multi2000、IAREWARM等,极大地方便了用户。
支持CPU种类丰富支持几乎所有含ARM内核CPU, 如ARM7、ARM9、ARM10、Intel Xscale等JTAG口频率可编程,支持各类不同性能目标板开放式接口支持多个内核串联的CPU调试,极大的体现了JTAG调试器的优势。
无需外加电源ARM_Star仿真器功耗低,可以直接从目标板取电,和目标板共用一个电源系统,使用及外出携带方便免费升级由于ARM_Star的FirmWare是每次上电时直接下载到仿真器的,所以,用户可以随时使用最新版本。
2 ARM_STAR仿真器硬件使用方法2.1 ARM_STAR仿真器对PC机的配置要求:系统环境Win95, Win98, Windows Me, Win2000, Windows XP Windows NT 4.0 及以上版本。
硬件环境Pentium 200MHz 以上CPU64M 内存300M 硬盘空间计算机并行口2.2 ARM_STAR仿真器的功能框图DB25并行接口用于仿真器跟PC机的通信,连接线为普通并口延长线。
20针IDC20 JTAG接口用于连接仿真器和目标板的JTAG口。
仿真器比较

并口\USB\以太网(速度快,灵活)
界面直观,便于调试,并支持诸如芯片外设和MMU等寄存器的显示调试功能
支持对内存加载读写断点
现在市面上arm的仿真器主要有两种,Multi-ice和TRACE32。Multi-ice是由arm公司生产的专门针对arm的仿真器,内部由一片FPGA完成相应的jtag协议的转换,功能相对较简单,价格较便宜。TRACE32是全球最大的仿真器专业生产厂家LAUTERBACH公司所生产的,其最大的特点就是只需更换仿真头便可仿真业界几乎全部的32位cpu,并且速度快,性能稳定,是各大公司仿真器的首选,内部内部的核心芯片是Motorola的powerpc和三块fpga构成,实现对硬件系统的硬实时仿真。
性能
仿真器
通用性
对操作系统的支持性
稳定性
连接方式
调试环境
高级特性Multi-ice Nhomakorabea适合于arm全系列
较差,几乎不支持
较差
并口(速度较慢)
界面很差,不直观
无
Trace32
适合于arm\powerpc\mips\dsp\x86等几乎全系列32位cpu
支持诸如Vxworks\Nuclears\linux\wince等操作系统资源的感知显示功能
arm调试内核寄存器的方法

arm调试内核寄存器的方法使用ARM调试内核寄存器的方法引言:在软件开发和调试过程中,经常需要查看和修改CPU的寄存器值。
而对于ARM架构的处理器,了解如何调试内核寄存器值是非常重要的。
本文将介绍一些常用的方法和工具,帮助开发者在ARM平台上进行内核寄存器的调试。
一、使用GDB调试器GDB是一款功能强大的开源调试器,可以用于调试多种编程语言和平台。
在ARM架构上,可以使用GDB调试器来查看和修改内核寄存器的值。
1. 准备工作需要安装GDB工具链,并将其添加到系统的环境变量中。
然后,在编译内核时,需要在配置文件中启用GDB调试支持选项,以生成可调试的内核映像。
2. 连接调试器将目标设备与主机通过调试接口(如JTAG、SWD)连接起来。
然后,在主机上运行GDB,并使用以下命令连接到目标设备:```$ gdb <kernel_image>```3. 设置断点在GDB中,可以使用`break`命令设置断点。
例如,要在内核函数`foo`的入口处设置断点,可以使用以下命令:```(gdb) break foo```4. 运行程序使用`run`命令启动目标设备上的程序,并让其执行到断点处。
当程序停止时,可以使用`info registers`命令查看所有寄存器的值。
5. 查看寄存器值使用`info registers`命令可以列出所有寄存器的值。
例如,要查看R0寄存器的值,可以使用以下命令:```(gdb) info registers r0```6. 修改寄存器值使用`set`命令可以修改寄存器的值。
例如,要将R0寄存器的值修改为0x1234,可以使用以下命令:```(gdb) set $r0 = 0x1234```二、使用JTAG调试器JTAG调试器是一种常用的硬件调试工具,也可以用于调试ARM架构的处理器。
它可以提供更低层次的访问权限,可以直接读写寄存器的值。
1. 准备工作需要将目标设备与JTAG调试器连接起来,并确保JTAG调试器的驱动程序已正确安装。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈ARM仿真器中的断点资源
目前,越来越多的嵌入式开发公司和工程师开始采用JTAG方式的ICE仿真器来进行程序的调试工作。
传统的全仿真方式(Full ICE)正在逐渐被使用灵活、成本低廉的JTAG仿真方式所取代。
JTAG仿真器目前可以满足嵌入式程序调试的所有基本要求,例如:断点设置、单步调试、内存编辑、变量、寄存器观测等。
(如图1所示)
断点设置是JTAG仿真器最基本的调试功能。
用户需要系统在设置断点处停下来后再进行调试。
断点根据原理和用途不同又分为几个不同的种类。
本文将简单地介绍一下常用的几种断点类型。
断点可分为硬件断点和软件断点两大类:
1.硬件断点需要目标CPU的硬件支持,当前流行的ARM7/9内部硬件设计提供两组寄存器用来存贮断点信息,所以ARM7/9内核最多支持两个硬件断点,而ARM11则可以支持到8个硬件断点。
这与调试器无关。
2.软件断点则是通过在代码中设置特征值的方式来实现的。
当需要在某地址代码处设置软件断点的时候,仿真器会先将此处代码进行备份保护,然后将预先设定好的断点特征值(一般为0x0000等不易与代码混淆的值)写入此地址,覆盖原来的代码数据。
当程序运行到此特征值所在的地址时,仿真器识别出此处是一个软断点,便会产生中断。
当取消断点时,之前受保护的代码信息会被自动恢复。
硬件断点可以设置在任何位置的代码上,包括ROM和RAM;而软件断点由于需要修改相应地址的值,所以一般只能设在RAM上,但是数量可以不受限制。
由于硬件断点设置的灵活性,所以是最优先选用的断点资源,但是两个断点往往很难满足工程师进行深入调试的需要,于是软件断点可以作为硬件断点的补充资源来使用。
由于通常的软件断点只能设在RAM运行的代码上,而随着系统的代码量越来越大,特别是在移动通信领域,扩充大容量的RAM势必会增加产品的成本,所以现在很多系统直接在FlashROM上运行代码。
对于这种在FlashROM上运行代码的系统,一般的软件断点是无法设置的,这也是软件断点的局限性。
对于这样的系统,只能通过交替使用两个硬件断点满足需要,但是会带来一定的不便。
要很好的解决这一矛盾,只有使仿真器增加在FlashROM上设置软件断点的功能,拓展仿真器中可供利用的断点资源。
例如,日本横河计算机株式会社 (YDC)最新推出的高端ARM仿真器—advicePRO,就是第一个支持Flash断点的ICE 仿真器产品。
(如图2所示)
在FlashROM上设置软件断点的原理与在RAM上设置软断点类似,也是在设定的断点处用特征码替换原有代码,通过识别特征码使断点事件发生。
不同的是,在FlashROM上设置软件断点需要对Flash进行擦写操作,这就需要仿真器能够有Flash编程功能,并且能够在尽可能短的时间内完成特征码的写入。
完成这一系列的读写操作,就可使在FlashROM 上调试代码的工程师获得更充裕的断点资源,从而大大提高了开发效率。
但是,由于对Flash进行擦写需要一定的时间,所以在执行到Flash断点的时候会感觉到有一个停顿的时间。
虽然这一点比RAM上的软件断点要差些,但是相对于给工程师调试工作整体上带来的便利而言,这一点是完全可以接受的。
设置断点进行调试是最基本的一种调试手段,选择具有丰富断点资源的ICE仿真器,可以明显地提高调试效率。
当然,前
提是工程师能够灵活使用各种断点资源。