首页 » 通讯 » 若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码

若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码

神尊大人 2024-09-21 13:26:29 0

扫一扫用手机浏览

文章目录 [+]

当然Lauterbach性能的强大,对应的代价便是价格也比JLINK多出一个数量级,但是对付大部分嵌入式开拓者来说,最常用的还是基本的调试功能,包括断点,寄存器查看,内存/Flash的查看,本文从断点利用的角度讲解如何利用JLINK合营IAR支持的各种断点用出点劳德巴赫的一些强大功能。

2. 常用断点存在的问题

断点的观点非常大略,目的大略来说便是在指定指令或者代码行中断程序的实行,实现上可以是硬件断点(通过编程FPB实现)也可以是软件断点(通过插入BKPT断点指令实现 ),详细二者的底层实现这里不展开谈论。
常规的断点调试(实质上是代码断点)是在想不雅观察哪里的问题时就在对应的代码地址双击设置断点,并且一旦运行到断点位置会让程序自动停息运行,然后不雅观察感兴趣的变量,内存或者寄存器,这种断点调试功能能帮助开拓者办理大部分的问题,但是其也有很大的局限性。

若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码 若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码 通讯

由于很多时候我们只想知道某段代码是否运行过,而不能让程序停下来,譬如说调试BLE协议栈,无法去单步运行,否则会打断BLE主机和从机之间的通讯时序,而导致全体系统功能涌现问题。
还有中断处理函数的调试,程序一旦停下了也就失落去了其他所有中断的后续相应,再比如两个设备通信,一旦一方采取常规断点的办法调试,可能会打断正常的通信过程。
以是常日的做法是添加串口打印或者ITM半主机打印输出log信息到显示屏,但是这种办法会带来额外的软硬件开销(对付串口打印来说是两个UART pin脚+UART驱动函数,对付ITM打印输出是一个SWO+ITM驱动),乃至由于引入新的代码导致程序出错。
除此之外,还有3种场景是这种普通断点无法知足的,第一个是同一段循环体运行N次才停下来,第二个是当变量被写入新的数据或者被读取时停下来,第三个是实时记录断点所在行某个特定变量或者地址的值,并在韶光轴上以图形的形式显示出来,方便剖析和比拟。

若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码 若何运用JLINK合营IAR的断点功能用出点劳德巴赫的觉得_断点_代码 通讯
(图片来自网络侵删)

以上这些功能在这些功能在劳德巴赫中是最基本功能,同样在IAR中也供应了不同形式的断点类型和组合,只这天常习气了只用了其代码断点的功能,没能充分发挥IAR的强大断点功能,针对以上4种问题在IAR中可以分别用日志断点、条件断点、读写权限的数据断点、数据日志断点逐个击破,从而避免了额外添加代码的繁琐,也能为办理隐蔽bug供应更加灵巧的手段。
尤其是个中的读写权限的数据断点,笔者曾经便是利用这种办法帮客户办理了两个埋藏的很深大bug,个中一个是查找某个关键变量在哪里被意外修正,通过设置条件断点+stack callback迅速定位到了闹事代码段,另一种是客户代码意外堆栈溢出调查,当时的做法是在堆栈大小的90%地址靠近栈顶处设置一个写触发的数据断点,当某层调用过程中堆栈靠近溢出时,设置的数据断点会被触发而停滞运用程序,从而迅速找到堆栈是在哪层调用溢出的,从而办理问题。

嵌入式物联网须要学的东西真的非常多,千万不要学错了路线和内容,导致人为要不上去!

无偿分享大家一个资料包,差不多150多G。
里面学习内容、面经、项目都比较新也比较全!
某鱼上买估计至少要好几十。

点击这里找小助理0元领取:嵌入式物联网学习资料(头条)

3. IAR支持的断点类型和利用方法

总结下来,在 IAR 中,紧张有以下几种断点,下面逐一先容。

代码断点条件断点读写访问权限的数据断点数据日志断点日志断点电源断点3.1. 代码断点

这种断点便是前面提到的最常用的断点,也是最大略的断点。
开拓则只须要在反汇编窗口中选择C行或ASM指令并切换断点。
一旦碰着断点,用户运用程序将停滞。
这时候可以查看变量、标志和寄存器的值。
换句话说,开拓者拥有完备的掌握权。
对付这种普通代码断点,其数量受限于硬件断点的数量,例如对付 Arm Cortex-M,常日有6-8个硬件断点,但如果利用软件断点或在RAM中运行运用程序,则可以不受限定。
利用时只需选择显示View -> Breakpoints 窗口,就可以启用或禁用断点。

默认情形下,IDE 将设置代码断点,而且是auto类型,可以通过Option->Debugger->JLINK/JTrace->Breakpoint去设置硬件断点还是软件断点。
如果开拓者有 I-jet,可以在右键单击代码行时明确选择一个 flash断点。
把稳断点符号中的“F”。
Flash 断点功能在适用于 Arm 的IAR7.60 或更高版本中可用。

3.2 条件代码断点

条件断点是代码断点与某些标志或变量作为条件的组合。
设置断点后,同样可以再次利用View -> Breakpoints 窗口查看所有断点,也可以通过右键单击并选择Edit option来设置额外参数。

设置断点条件所利用的语法类似于C语法,可以利用 ==、>= 和 <=。
例如,如果您希望运用程序在计数器即是 10 时在断点处停滞,您可以利用“counter==10”。
这在中断例程中须要断点时非常有用。
如果没有设置条件,运用程序就会一贯被停滞,影响到系统的正常事情,利用标志或变量作为条件使事情变得随意马虎得多。
乃至用户还可以利用跳过计数器和条件检讨(如true或changed)来实现更繁芜的断点停滞条件设置。
该方法可以办理上面提到的第二种问题。

3.3 读写访问的数据断点

与其他断点比较,数据断点有点不同,由于是对特定内存地址、标志、变量或寄存器的读写访问的监控。
利用时只需右键单击标志或变量并选择选项Set data Breakpoint。
默认情形下,对该变量,特定地址,寄存器的任何读取和写入访问都会触发断点。
如果你想添加额外的设置,你可以通过View->Breakpoints 窗口和Edit 选项来完成. 除了读写访问之外,还可以监控数据是否匹配来作为断点的触发条件,这意味着写或读访问只会在数据匹配时触发停息。
其余,通过选择编辑按钮,开拓者还可以打开一个额外的窗口,可以选择绝对地址乃至源代码所在行。
对付变量或标志,建议利用自动大小。
如果须要监控更大的范围,则应手动设置监控的地址范围或者变量范围,譬如说监控一个构造体的数据变革,利用这种数据断点也是可以实现的,但须要用户精确设置变量,特定地址,寄存器等监控工具的Size。
利用这种方法可以办理前文提到的第三种问题。

此处须要特殊提一下,数据断点对付调试被运用程序毁坏的标志和变量非常有用。
笔者曾经便是利用这种办法在客户办理了两个埋藏的很深大bug,个中一个是查找某个关键变量在哪里被意外修正,通过设置条件断点+stack callback迅速定位到了闹事代码段,另一种是客户真个意外堆栈溢出调查,当时的做法是在堆栈大小的90%地址靠近栈顶处设置一个数据断点,当堆栈溢出靠近时,设置的数据断点会被触发而停滞运用程序,从而迅速找到问题的根源,至于如何设置,此处暂不展开。

3.4 数据日志断点

除了具有读写访问权限的数据断点外,开拓者还可以利用数据日志断点。
这种断点的好处在于可以在韶光线中监视和以图形办法绘制内存中特定变量或地址的值,使显示更加直不雅观,用户还可以在同一个韶光轴上显示和比较两个或多个变量,从而在逻辑上排查问题。
设置的方法便是View->Breakpoints 窗口和Edit 选项,然后选择set Data Log Breakpoint for counter即可,利用这种方法可以办理前文提到的第四种问题。

韶光线以及附加数据日志和数据日志择要可在探针选项下找到,例如如下面的屏幕截图所示。

3.5 日志断点

除了代码和数据断点之外,还有一种日志断点,这是一个分外的断点,由于它只会临时暂时停滞运用程序以打印,然后连续代码的运行。
一旦运行到设置的日志断点,它会显示如下用户预先设定的,奉告用户某个函数事宜被触发。
这种办法的好处在于,无需额外添加串口打印或者ITM半主机打印输出log信息到显示屏,无需额外的软硬件开销,便可实现基本的信息打印,方便开拓者跟踪程序的实行流程。

如下图所示,每次断点命中时,调试日志窗口中都会显示一条。
添加的计数器可以理解运用程序通过该部分源代码的次数。
通过这种办法可以办理前面提到的第一个问题,即一直止代码又能获知感兴趣的代码段是否被实行过,以及实行的次数,兵不血刃,无需添加任何额外的代码。

3.6 电源断点

除了代码的调试,IAR还支持前辈的电源调试技能,可以监控功耗,并将其与源代码干系联。
这也使得添加电源断点成为可能,可以设置一个阈值,如 25mA,一旦能量高于该值,调试器将被触发停滞。
设置阈值非常大略, 只须要打开J-Link->PowerLog 窗口,然后设置值和所需选项,如上图或下图所示。
通过这种剖析,可以直不雅观的看出代码实行过程中的功耗值,下面的韶光线窗口不是必需的,但它可以为供应正在利用的能量供应一个韶光参考。

4. 总结:

至此,先容完了IAR支持的6种不同的断点类型和利用方法,也顺带针对性的办理了前文中提到的日常调试碰着的四个问题。
如果在日常调试过程中灵巧利用以上的这几种断点,对付日常调试提高开拓速率和解决一些深藏的bug(例如前文提到的大型程序中变量被莫名修正,堆栈溢出追踪等) 很有帮助。
当然劳特巴赫之以是卖的这么贵,一定有其强大之处,尤其是强大的脚本编程,多核系统,能耗剖析以及对芯片内部操作的开放度,能给开拓者最大的操作灵巧度。
但就日常的断点调试看,IAR+JLINK的组合也基本能知足大部分的需求,毕竟就地取材最方便。

原文链接:https://mp.weixin.qq.com/s/3b2dsi6Gh05nS4Gfo9lHgQ

文章转载自:痞子衡嵌入式

文章来源于:如何利用JLINK合营IAR的断点功能用出点劳德巴赫的觉得

原文链接:如何利用JLINK合营IAR的断点功能用出点劳德巴赫的觉得

版权声明:本文来源于网络,免费传达知识,版权归原作者所有,如涉及作品版权问题,请联系我进行删除

标签:

相关文章