浅谈ARM仿真器中的断点资源

合集下载

IAR串口Simulator仿真中断的调试实现

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 的异常处理学习笔记转贴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开发板使用手册

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仿真(支持断点和单步运行)

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芯片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调试内核寄存器的方法使用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调试器的驱动程序已正确安装。

arm 调试原理

arm 调试原理

arm 调试原理在 ARM 调试原理中,调试器是一个重要的工具,用于分析和修复软件中的问题。

下面将介绍一些 ARM 调试的基本原理。

1. 调试接口:ARM 处理器提供了调试接口,允许调试器与处理器进行通信。

这个接口通常是一组寄存器,可以读取和修改处理器的状态。

通过这个接口,调试器可以访问处理器的内部状态,如寄存器、内存和控制寄存器。

2. 断点:调试器可以在程序中设置断点,当程序执行到断点处时会暂停执行。

断点可以在特定的内存地址上设置,也可以在特定的代码行上设置。

调试器通过在断点处修改相关指令,使其在执行时触发中断信号,从而实现断点的功能。

3. 单步执行:调试器可以以单步模式运行程序,即一次执行一条指令。

这样可以逐行查看程序的执行过程,帮助发现代码中的错误。

在单步执行模式下,调试器会将程序指令写入处理器,并监控处理器状态的变化。

4. 远程调试:ARM 调试器通常支持远程调试功能,允许调试器与远程设备进行通信。

通过连接调试器和远程设备之间的通信通道,可以在远程设备上进行调试和分析工作,而不需要将程序和调试器置于同一物理设备上。

5. 观察状态:调试器可以监视处理器的状态并实时显示。

这包括处理器的寄存器值、内部总线状态和外设的状态等。

通过观察处理器的状态,可以更好地了解程序的执行流程和相关变量的值。

6. 回溯调试:调试器通常支持回溯调试功能,允许开发人员在程序中回溯到之前的某个状态,从而重现问题或跟踪错误。

这对于调试复杂的程序尤为重要,可以帮助找到导致错误的具体原因。

总之,ARM 调试原理主要包括调试接口的使用、断点设置、单步执行、远程调试、观察状态和回溯调试。

这些原理为开发人员提供了强大的调试工具,可以帮助他们更快地定位和解决软件中的问题。

ARM仿真器的作用 仿真器有什么用途

ARM仿真器的作用 仿真器有什么用途

ARM 仿真器的作用仿真器有什么用途
ARM 仿真器是用于调试基于ARM 内核的硬件模块,市面上常见的ARM 内核有ARM7,ARM9,ARM11,Cortex-A,Cortex-M,Cortex-R 等,而基于这些内核的芯片则多得多。

仿真器如果用于低端嵌入式MCU 的话,使用ULINK2,ULINKPpro 即可,可以用来调试Cortex-M,Cortex-R 芯片等低端芯片;
如果要调试的是高端ARM 核心芯片,则可以用到DSTREAM 仿真
器了。

ARM 仿真器的作用,可以在寄存器级、用汇编语言调试你的硬件。

当然用C 也可以。

普通在你的ARM 板是完全的裸板时,即所有Flash 都还没有烧写程序时(这时串口、网口都不能用),烧写必要的启动程序。

ARM仿真器-更新固件及常见问题

ARM仿真器-更新固件及常见问题

ARM仿真器-更新固件及常见问题V1.021.关于2脚(NC)3.3V电源输出说明默认不输出3.3V电源;但为了方便用户应用,如果用户一定要输出3.3V电源,请将仿真器壳子打开,把J3的跳线冒放到3.3V一端;注意:强烈建议用户不要这样用,因为这样会造成仿真器及目标板不稳定现象;这个3.3V输出电流不要超过300mA;2.关于19脚5V Supply 供电说明此端口输出5V最大300mA 的电流,如果目标板功耗较大时将无法为目标板供电,因为输出的是5V ,所以务必接入目标板电源芯片的输入端,千万不要接入CPU 的供电脚,可能会损坏芯片。

低版本驱动中没有此选项,可通过Commander DOS 窗口中输入power on 回车,手动给目标板供电。

V4.88及以上驱动中需在Options‐>Project Interface‐>Production 界面中Enable target power 处打勾开启此功能。

3.如何判断丢失固件绿灯不亮了、红灯3秒闪烁一次以及电脑不识别设备都是丢失固件的现象;丢失固件偶尔出现,只要能方便重新烧写就可以,对于工程师来讲这个不是问题;4.丢失固件解决方法(注:需在WINXP下先安装Install AT91-ISP v1.13.exe软件)注:仿真器背面印有“QC”标志的仿真器支持下述方法用户再也不用打开仿真器盖子,用复杂的方法更新固件了。

我们在仿真器内置一颗CPU来自动实现ERASE及TST功能,方法如下:(1)插上USB线供电,将17脚和18脚(GND)短接,红灯变亮;(2)等待3秒,发现红灯间隔一秒闪烁后取消短接;(3)等待约20秒,出现红灯一直亮,擦除工作结束,此时一定断开17脚和18脚(GND)连接;(4)拔掉USB线后,再打开SAM-PROG v2.4烧录软件,按下图所示进行设置:点击Browse选择V8.bin并勾选加密(5)再插上USB线, 此时SAM-PROG v2.4软件中的Write Flash按钮将变为有效(注意,一定先打开SAM-PROG v2.4再连接仿真器与PC机),点击Write Flash 按钮,烧录固件,待烧写完成后, Active Connection:将变为1,此时LED红灯长亮;(6)断开USB线,再插上USB线,仿真器的指示灯绿灯闪烁,然后常亮,表示烧录固件成功,否则判定失败,重复(1)-(6)步骤烧写固件;特别说明:仿真器在正常运行时如果用户将17脚和18脚(GND)短接超过3秒,固件会被擦除,但8秒后红灯开始闪烁;SAM-PROG v2.4只能在WINXP下运行,请用装有WINXP 的电脑烧写固件千万注意:仿真器在正常运行,千万不要将17脚和18脚(GND)短接,有可能造成固件丢失;5.老版本仿真器丢失固件,烧写方法如下(注:需在WINXP下先安装Install AT91-ISPv1.13.exe软件):(1) 打开仿真器壳子,插上USB线连接PC机;(2) 用跳线冒短接A(ERASE)约5秒,再拔掉跳线冒;(3) 拔掉USB线给板子断电;(4) 用跳线冒短接B(TST);(5) 插上USB线连接PC机,至少超过10秒后,拔掉USB线;(6) 拔掉B(TST)上的跳线冒;(7) 在插上USB线,电脑会发出“叮咚”不会再出现不识别硬件设备错误;(8) 再拔掉USB线;至此擦出芯片内部程序完成,期间可能出现不识别硬件设备错误不用理会;(9) 双击桌面上的SAM-PROG v2.4图标,运行SAM-PROG v2.4烧录软件,按下图所示进行设置:点击Browse选择V8.bin并勾选加密(10) 插上USB线与PC机连接。

ARM的开发工具及仿真器介绍.

ARM的开发工具及仿真器介绍.

ARM的开发工具及仿真器介绍。

ARM开发工具综述ARM应用软件的开发工具根据功能的不同,分别有编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等,目前世界上约有四十多家公司提供以上不同类别的产品。

用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。

因此一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开发计划选用。

使用集成开发环境开发基于ARM的应用软件,包括编辑、编译、汇编、链接等工作全部在PC机上即可完成,调试工作则需要配合其他的模块或产品方可完成,目前常见的调试方法有以下几种:1、指令集模拟器部分集成开发环境提供了指令集模拟器,可方便用户在PC机上完成一部分简单的调试工作,但是由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过的程序也有可能无法在真实的硬件环境下运行,用户最终必须在硬件平台上完成整个应用的开发。

2、驻留监控软件驻留监控软件(Resident Monitors)是一段运行在目标板上的程序,集成开发环境中的调试软件通过以太网口、并行端口、串行端口等通讯端口与驻留监控软件进行交互,由调试软件发布命令通知驻留监控软件控制程序的执行、读写存储器、读写寄存器、设置断点等。

驻留监控软件是一种比较低廉有效的调试方式,不需要任何其他的硬件调试和仿真设备。

ARM公司的Ange l就是该类软件,大部分嵌入式实时操作系统也是采用该类软件进行调试,不同的是在嵌入式实时操作系统中,驻留监控软件是作为操作系统的一个任务存在的。

驻留监控软件的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应用软件的开发,同时它占用目标板上的一部分资源,而且不能对程序的全速运行进行完全仿真,所以对一些要求严格的情况不是很适合。

IAR串口Simulator仿真中断的调试实现

IAR串口Simulator仿真中断的调试实现

宏文件中首先定义了一个宏函数 exeUserSetup(),它将在启动 C-SPY 并完成应用程序下载到目标系统之 后自动运行,用来创建仿真环境。然后定义一个 Access()宏函数,它将从 InputData.txt 文件中读取 Fibonacci 数列,并将这些数值分配给接收寄存器地址。用户需要将 Access()宏函数连接到一个‘立即读 取断点’。
UARTRBRTHR 接收缓冲器的值后将恢复仿真进程。
► 三、运行仿真中断 单步运行程序到 While()循环处暂停,等待输入。在 Interrupt.c 源代码窗口中找到 irqHandler()函数, 并在“++callCount;”语句行设置一个断点。全速运行程序,到达断点时程序将暂停,Terminal I/O 对话框 将显示 Fibonacci 数列,如图 5。
C-SPY 提供了 2 个系统宏函数__setSimBreak 和__orderInterrupt,可在设置宏函数 execUserSetup()中 调用, 用于自动设置断点和中断定义, 避免用户进行手动配置。 为此可以采用宏文件 SetupAdvanced.mac 取代前面的 SetupSimple.mac.这样在 C-SPY 启动时将自动设置断点,完成中断定义,用户还不必手动 在 Interrupts 和 Breakpoints 对话框中进行输入。注意,在加载 SetupAdvanced.mac 宏文件之前,应该 先去除以前定义的断点和中断。 SetupAdvanced.mac 宏文件源程序见后。
access用于链接到断点的宏在执行过程中当cspy在uartrbrthr地址上检测到一个读取访问时会暂时挂起仿真进程而执行access宏函数从inputdatatxt文件中读取数值并将其写入uartrbrthrcspy在读取uartrbrthr接收缓冲器的值后将恢复仿真进程

硬件断点与软件断点区别

硬件断点与软件断点区别

硬件断点与软件断点的区别1.硬件断点需要目标CPU的硬件支持,当前流行的ARM7/9内部硬件设计提供两组寄存器用来存贮断点信息,所以ARM7/9内核最多支持两个硬件断点,而ARM11则可以支持到8个硬件断点.这与调试器无关.2.软件断点则是通过在代码中设置特征值的方式来实现的.当需要在某地址代码处设置软件断点的时候,仿真器会先将此处代码进行备份保护,然后将预先设定好的断点特征值(一般为0x0000等不易与代码混淆的值)写入此地址,覆盖原来的代码数据.当程序运行到此特征值所在的地址时,仿真器识别出此处是一个软断点,便会产生中断.当取消断点时,之前受保护的代码信息会被自动恢复.硬件断点可以设置在任何位置的代码上,包括ROM和RAM;而软件断点由于需要修改相应地址的值,所以一般只能设在RAM上,但是数量可以不受限制.由于硬件断点设置的灵活性,所以是最优先选用的断点资源,但是两个断点往往很难满足工程师进行深入调试的需要,于是软件断点可以作为硬件断点的补充资源来使用.由于通常的软件断点只能设在RAM运行的代码上,而随着系统的代码量越来越大,特别是在移动通信领域,扩充大容量的RAM势必会增加产品的成本,所以现在很多系统直接在FlashROM上运行代码.对于这种在FlashROM上运行代码的系统,一般的软件断点是无法设置的,这也是软件断点的局限性.对于这样的系统,只能通过交替使用两个硬件断点满足需要,但是会带来一定的不便.要很好的解决这一矛盾,只有使仿真器增加在FlashROM上设置软件断点的功能,拓展仿真器中可供利用的断点资源.在FlashROM上设置软件断点的原理与在RAM上设置软断点类似,也是在设定的断点处用特征码替换原有代码,通过识别特征码使断点事件发生.不同的是,在FlashROM上设置软件断点需要对Flash进行擦写操作,这就需要仿真器能够有Flash编程功能,并且能够在尽可能短的时间内完成特征码的写入.完成这一系列的读写操作,就可使在FlashROM上调试代码的工程师获得更充裕的断点资源,从而大大提高了开发效率.但是,由于对Flash进行擦写需要一定的时间,所以在执行到Flash断点的时候会感觉到有一个停顿的时间.虽然这一点比RAM上的软件断点要差些,但是相对于给工程师调试工作整体上带来的便利而言,这一点是完全可以接受的.设置断点进行调试是最基本的一种调试手段,选择具有丰富断点资源的ICE仿真器,可以明显地提高调试效率.当然,前提是工程师能够灵活使用各种断点资源.。

ARM之Cortex-M内核中断异常系统详解

ARM之Cortex-M内核中断异常系统详解

ARM之Cortex-M内核中断异常系统详解问题最近在使用STM32F3芯片的时候,遇到这样一个问题:如果外部中断来的频率足够快,上一个中断没有处理完成,新来的中断如何处理?在调试时,发现有中断有挂起、激活、失能等状态,考虑这些状态都是干啥用的呢!他们是Cortex-M核所共有的,因此这里不针对与具体用的STM32 MCU,直接上升到 Cortex-M内核来了解一下!简介 中断(也称为“异常”)是微控制器一个很常见的特性。

中断一般是由硬件(例如外设、外部引脚)产生,当中断产生以后 CPU 就会中断当前的程序执行流程转而去处理中断服务中指定的操作。

所有的Cortex-M 内核都会系统一个用于中断处理的组件:NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)。

它处理处理中断,还处理其他需要服务的事件(例如 SVC 指令),通常称为“异常”。

​按照 ARM 的说法,中断也是一种异常。

Cortex-M3和 Cotex-M4 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1个 Systick(滴答定时器)定时器中断和多个系统异常。

而 Cortex-M0 最多支持32个IRQ、1 个不可屏蔽中断(NMI)、1 个 Systick(滴答定时器)定时器中断和多个系统异常。

IRQ:多数由定时器、IO端口、通信接口等外设产生NMI:通常由看门狗定时器或者掉电检测器等外设产生其他:主要来自系统内核注意,本文所说的 Cortex-M 主要指定是 Cotex-M3和 Cotex-M4。

Cortex-M0、Cortex-M0+、Cortex-M1 基于 ARMv6-M。

与Cotex-M3和 Cotex-M4相比,他们的指令集较小。

而且,Cortex-M1 是专门为FPGA应用设计的,没有独立MCU。

异常类型 Cortex-M 处理器的异常中,编号 1~15 的为系统异常,16及以上的则为中断输入。

【嵌入式】嵌入式系统开发与应用第二版课后答案第二章(田泽)

【嵌入式】嵌入式系统开发与应用第二版课后答案第二章(田泽)

【嵌⼊式】嵌⼊式系统开发与应⽤第⼆版课后答案第⼆章(⽥泽)复习⽤,⾃整理、%%犇orz——海底淤泥1尝试⽐较CISC体系结构和RISC体系结构的特点。

ARM为何采⽤RISC体系结构? CISC:增加指令集的复杂度,以芯⽚⾯积为代价 RISC:只执⾏最常⽤的指令,⼤部分复杂指令由简单指令合成 因为: 组织结构: 1RISC的硬连线的指令编码逻辑 2便于流⽔线执⾏ 3⼤多数RISC指令为单周期执⾏ 处理器: 1处理器管芯⾯积⼩ 2开发时间缩短,开发成本减低 3容易实现⾼性能,低成本的处理器2简述ARM体系结构的特点 1.Load/Store 体系结构 2.固定的32为指令 3.3地址指令格式3什么是Thumb技术,其优点是什么?与ARM指令集相⽐,Thumb指令集有哪些局限? Thumb是ARM体系结构的扩展 优点:提⾼了代码密度 局限: 1.完成相同操作时,Thumb需要更多的指令 2.Thumb指令集没有包含进⾏异常处理时需要的⼀些指令4什么是Thumb-2内核技术?它有哪些特点? Thumb-2内核技术是ARM体系的新指令集 特点:更⾼性能,更低功耗,更简短的代码长度5⽬前ARM处理器核有哪⼏种?简述ARM7TDMI内核的重要特性 处理器内核: ARM7TDMI ARM9TDMI ARM10TDMI ARM11 SecurCore Cortex 重要特性: 1.能实现ARM体系结构版本4T 2.⽀持Thumb指令集 3.32*8 DSP乘法器 4.32位寻址空间,4GB线性地址空间 5.包含ICE模块6分别以ARM7TDMI和ARM9TDMI为例,介绍3级流⽔线和5级流⽔线的执⾏过程,并进⾏相应的⽐较 三级流⽔:取指--->译码--->执⾏ 五级流⽔:取指--->译码--->执⾏--->缓冲/数据--->回写 ⽐较: 1三级流⽔译码不包含reg读,五级流⽔译码包含reg读 2三级流⽔执⾏包含reg读,移位/ALU,reg写,五级流⽔执⾏只包含位移/ALU 3五级流⽔增加了存储器数据访问过程,并将reg写单独分离为⼀个过程7ARM Cortex处理器包括哪⼏个系列?各有什么特点? ARM Cortex-A系列:微处理器核,能运⾏通⽤操作系统 ARM Cortex-R系列:微处理器核,运⾏实时操作系统 ARM Cortex-M系列:微控制核,功耗低,性能⾼8ARM微处理器⽀持哪⼏种⼯作模式?各个⼯作模式有什么特点? 7种: 特点: 1.⽤户 程序正常执⾏ 2.FIQ 快速中断模式,处理快速中断 3.IRQ 外部中断模式,处理普通中断 4.SVC 特权模式,处理软中断 5.ABT 中⽌模式,处理存储器故障 6.UNQ 未定义模式,处理未定义指令陷阱 7.系统 运⾏特权操作系统任务9ARM处理器共有多少个寄存器?这些寄存器在⽤户编程的功能中是如何划分的?ARM状态下的通⽤寄存器可分为哪⼏类? 31个通⽤寄存器,6个状态寄存器 ⽤户编程: R0~R14,R15(PC),CPSR ARM状态: 1.未分组寄存器R0~R7 2.分组寄存器R8~R14 3.程序计数器R1510简述ARM状态下分组寄存器R13 R14 R15 的功能以及R15使⽤的注意事项 R13 ⽤作堆栈指针SP R14 ⼦程序连接寄存器LR R15 程序计数器PC R15注意事项:由于ARM多级流⽔技术,R15的程序地址并不是当前指令的地址,指令“BX Rm”利⽤Rm的bit[0]来判断跳转到ARM还是thumb状态11简述ARM程序状态寄存器各位的功能 1条件码标志位 最⾼4位——N,Z,C,V N:补码状态下,N=0是⾮负数,N=1是负数 Z:Z=1表⽰结果为0,Z=0表⽰结果为⾮0 C:1.加法,c=1有进位 2.减法,c=0有借位 3.位移,c存储最后被移出的值 V:运算溢出V=1否则V=0 2.控制位 最低8位——I,F,T,M[4:0] I:I=1,禁⽌IRQ中断 F:F=1,禁⽌FRQ中断 T:T=0,ARM执⾏,T=1,Thumb执⾏ M[4:0]:记录当前模式 3.保留位 其他位保留作以后的扩展12试分析Thumb状态与ARM寄存器的关系 Thumb状态的R0~R7与ARM状态的R0~R7是⼀致的 Thumb状态的CPSR和SPSR与ARM状态的CPSR和SPSR是⼀致的 Thumb状态的SP映射到ARM状态的R13 Thumb状态的LR映射到ARM状态的R14 Thumb状态的PC映射到ARM状态的R1513ARM体系结构⽀持哪⼏种类型的异常?他们之间的优先级关系如何?各种异常与处理模式有何关系? 7种类型: 优先级: 处理模式: 复位 1 SVC 未定义的指令 6 UNQ 软件中断 6 SVC 指令预取中⽌ 5 ABT 数据访问中⽌ 2 ABT 外部中断请求 4 IRQ 快速中断请求 3 FIQ14简述ARM处理对异常中断响应过程 1.将CPSR的内容保存到要执⾏的异常中断SPSR中,以实现对处理器当前状态中断屏蔽位以及各个标志位的保存 2.设置当前状态寄存器的CPSR的相应位 3.将寄存器LR_<mode>设置为异常返回的地址,使异常处理程序执⾏完后能正确返回原程序 4给程序计数器PC强制赋值,使程序从相应的向量地址开始执⾏中断程序15ARM如何从异常中断处理程序返回?需要注意哪些问题 1.所有修改过的⽤户寄存器必须从处理程序的保护堆栈中恢复 2.将SPSR_<mode>寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复被中断程序的处理器⼯作状态 3.根据异常类型将PC变回到⽤户指令流中的相应指令处 4.最后清除CPSR中的中断禁⽌标志位I/F16什么是ARM异常中断向量表?它有何作⽤?存储在什么地⽅? 异常中断向量表中指定了各异常中断与处理程序的对应关系 作⽤:每个异常中断对应异常中断向量表中4个字节,存放⼀个跳转指令或者⼀个向PC寄存器中赋值的数据访问指令LDR。

嵌入式产品开发工具——ARM仿真器的使用

嵌入式产品开发工具——ARM仿真器的使用

嵌入式产品开发工具——ARM仿真器的使用
本文提供了一些关于在线ARM 仿真器的信息,以及给作为嵌入式系统设计师的你带来的好处。

根据你的需要,你将在产品开发中对开发工具作出更恰当的选择。

 一、嵌入式产品的开发周期
 典型的嵌入式微控制器开发项目的第一个阶段是用C编译器从源程序生成目标代码,生成的目标代码将包括物理地址和一些调试信息。

目前代码可以用软件模拟器、目标Monitor或在线仿真器来执行和调试。

软件模拟器是在PC机或工作站平台上,以其CPU(如x86)及其系统资源来模拟目标CPU(如P51XA),并执行用户的目标代码;而目标Monitor则是将生成的目标代码下载到用户目标板的程序存储器中,并在下载的代码中增加一个Monitor任务软件,用来监视和控制用户目标代码的执行,用户通过目标板上的串行口或其它调试端口,利用桌面计算机来调试程序。

 程序的调试是通过设置断点、使程序在指定的指令位置停止运行来实现的。

在程序中止的时候,检查存储器和寄存器的内容,作为发现程序错误的线索。

 程序经过调试、找到所有的错误后,修改源代码,重新编译,以一种标准格式生成目标代码文件,比如Intel HEX。

这个目标代码将被存储在最终产品的非挥发存储器,比如EPROM或FLASH中。

 二、为什幺需要仿真器
 软件模拟器和目标Monitor提供了一种经济的调试手段,对于很多设计来说已经足够。

但是也有很多场合,需要利用仿真器来找到程序错误。

无论在哪一种场合,仿真器都能够减少调试时间、简化系统集成、增加可靠性、优。

精确断点与不精确断点

精确断点与不精确断点

提高断点精确性
降低性能开销
研究更精确的断点技术,减少实际暂停位 置与预期位置的差异。
优化断点设置和管理算法,降低对程序性 能的影响。
增强调试体验
断点技术的标准化和互操作性
提供更丰富的调试信息和工具,帮助开发 者更快地定位和解决问题。
推动断点技术的标准化工作,提高不同开 发环境和工具之间的互操作性。
THANKS
不精确断点可以用于性能分析,帮助 开发者识别程序中的性能瓶颈并进行 优化。
分析程序行为
通过不精确断点,开发者可以观察程 序在特定条件下的行为,了解变量值 的变化、函数调用关系以及内存分配 情况等。
不精确断点的实现方式
软件断点
软件断点通过在程序的代码中插入特定的中断指令来实现。当程序执行到该指令时,会触 发一个中断,从而使程序暂停执行。软件断点的优点是易于实现和配置,但可能会对程序 的性能产生一定影响。
实现方式比较
精确断点
精确断点的实现需要在目标程序的二进制代码中插入断点指 令。这通常通过调试器或专门的工具完成,它们会分析程序 的二进制代码,找到需要插入断点的位置,并修改相应的指 令。
不精确断点
不精确断点的实现相对简单,通常通过在程序的某个区域设 置陷阱来完成。陷阱可以是一段特殊的代码,用于在程序执 行到该区域时触发异常。陷阱的设置可以通过调试器、操作 系统或硬件支持来实现。
结合使用的场景
复杂系统调试
在复杂系统的调试过程中,可以 先使用不精确断点快速定位到问 题区域,然后再使用精确断点进
行详细的调试和分析。
多层次调试
在涉及多个抽象层次的系统中, 可以在较高层次使用不精确断点 进行粗略调试,在较低层次使用
精确断点进行深入分析。

普中ARM仿真器使用说明书

普中ARM仿真器使用说明书

普中ARM仿真器下载操作说明本文这里用的是MDK Keil4.74版本,如果在硬件仿真设置中找不到CMSIS-DAP 请更换版本,版本过低的KEIL不会显示CMSIS-DAP-Debugger。

注意:ARM 仿真器在WIN10 上当仿真器插到电脑上时,随电脑开机重启使用之前要把USB 拔了重插才能识别步骤:打开一个能够正常编译通过的工程1、进入KEIL硬件仿真设置2、设置好硬件仿真后我们点Settings进入更深入的设置,请按照我这个面板这样设置。

(PS:这里我们也可以选择SW模式,把SWJ勾上Port选择SW就是SW模式了)3、设置好debug页面。

我们点击Flash Download进入下载设置把Rese and Run勾上4、点击add我们就来到了这一个页面,找到STM32F10x High-density Flash 512k 选中点add 添加就回到第4步页面,有显示STM32F10x High-density 512k 点ok完成设置。

6、完成以上设置后我们点Utilities页面,这里也选择CMSIS-DAP选择好之后我们点ok完成设置(ps:如果这个界面没有Use Target for flash Programming选择CMSIS-DAP就忽略这一项)7、(keil下载)设置好之后我们编译程序没问题我们点Download进行下载提示Verify OK 就说明已经下载成功了8、(在线仿真调试)我们可以直接在keil里面调试程序,点工具栏的start debug 开始调试,如果退出也是点这个按钮点击之后我们就来到了这个页面,RST是复位的意思、第二个是全速运行、第三个是停止运行,再过来就是我们程序检查程序中错误的时候会用到的功能的,第一个箭头是单步运行、第二个和第一个功能差不多,第三个是跳出这个函数,第四个是进入函数内部。

这四个功能大家可以自己运行体验一下效果就能理解是什么意思了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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仿真器,可以明显地提高调试效率。

当然,前
提是工程师能够灵活使用各种断点资源。

相关文档
最新文档