这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】ARM CORTEX-M IAR硬件断点软件断点触发原理解析

共1条 1/1 1 跳转至

【换取逻辑分析仪】ARM CORTEX-M IAR硬件断点软件断点触发原理解析

工程师
2024-11-22 17:23:35     打赏

硬件代码断点(Hardware Code Breakpoint)

        硬件代码断点是通过MCU内部的专门硬件模块来实现。以ARM Cortex-M为例,Flash Patch and Breakpoint Unit (FPB)包含对应的PC地址比较器,当CPU想要运行对应地址的指令时,比较器会触发并返回Breakpoint Instruction (BKPT) 指令给到CPU,CPU会暂停,从而实现硬件代码断点功能。硬件代码断点的优势是速度快(因为是通过MCU内部的硬件比较器实现), 劣势是数量有限(ARM Cortex-M最多是6-8个)。

本地的CortexM33 的MCU 试验最多可以添加8个硬件断点,继续添加时回报如下的错误,添加硬件断点失败。

image.png

上述绿色部分描述对应cortex -m 架构的Flash Patch and Breakpoint Unit 对应的寄存器如下,对应的芯片的COMP 寄存器为8个,跟上述的8个硬件断点保持一致,硬件断点实现跟底层该寄存器数目相绑定。

image.png

添加如下硬件断点配置,设置断点后读取上述寄存器查看硬件断点配置情况。

image.png

读取对应的COMP 寄存器和断点设置地址发现寄存器数值和断点地址是匹配的,相对断点的地址要多1 是因为THUMB指令集的原因。

image.png

上述0xc26b7 对应的地址产看代码发现为如下main 函数的地址。

image.png

该断点的设置对应IAR 自动会停在main 函数的配置,也验证了IAR 函数debug 在main 函数停住也是配置了断点配置。

image.png

在非Debug 状态未设置断点时,读取FP_COMP 寄存器的值发现都为0

image.png


软件代码断点(Software Code Breakpoint)

        软件代码断点是通过调试器(Debugger)将对应地址的指令替换成专门的断点指令。以ARM Cortex-M为例,调试器将对应地址的指令替换成Breakpoint Instruction (BKPT) 指令。当CPU想要运行对应地址的指令时,将会运行Breakpoint Instruction (BKPT) 指令,CPU会暂停,然后对应地址的指令又会恢复成原来的指令,从而实现软件代码断点功能。软件代码断点的优势是数量没有限制,但是由于对应地址的指令需要被调试器替换成专门的断点指令,只能用于在RAM中运行的代码

在代码运行在flash 的基础上修改link file 将程序运行在RAM中,来验证上述标红部分的描述,发现这次IAR 中断点数量超过8个也不会报错了,没有数量的限制了。

image.png

验证完了上述标红部分的描述,我们继续对上述橙色部分的描述的软件断点的触发机制。我们在代码中添加如下连续地址的软件断点。

image.png

设置好断点后读取0x20050730 对应的RAM 空间数据如下。

image.png

取消断点后读取0x20050730 对应的RAM 空间数据如下。

image.png

对比设置断电前后的memory 数据可以发现上述断点地址处的数据在设置断点后被修改为0xbe00,0xbe00是什么呢?

image.png

从上面曾色的内容描述,我们不难猜测0xbe00对应着BKPT 指令,查看ARM-M 指令可知0xbe00 对应 BKPT 0 的汇编指令编码。

image.png



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]