0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Segger的无限Flash断点调试功能

strongerHuang 来源:麦克泰技术 作者:麦克泰技术 2022-05-07 09:54 次阅读

嵌入式应用的开发过程中,虽然良好的编程实践和配合适当的编码规范检测软件能够减少代码编写阶段中出现的错误数量,但仍然不可避免的会出现一些只有在程序运行过程中才会触发的错误。为了解决程序运行过程中的问题,需要使用调试器,观察代码的执行及软件状态变化。

在程序调试的过程中,断点的重要性不言而喻。在调试状态下,当程序遇到断点时,会停止执行并将控制权交给调试软件,调试器可以显示当前应用程序的状态,包括变量和寄存器的值,内存、堆栈使用情况,显示应用程序到达断点位置的函数调用关系等,这些信息可以帮助开发人员分析程序的执行状况是否符合预期,并在问题出现时帮助确定错误原因。

常见的调试方法

(1)在RAM区域内调试

在开发过程中,可以将应用程序下载到RAM运行和调试,调试器只需使用简单的断点指令,且RAM允许多次读取和写入,RAM区域内的断点指令不会对程序执行产生明显的影响。但该方法的局限是MCU所拥有的RAM空间通常较小,应用较大时,无法在RAM进行调试。

(2)在Flash区域内调试

与RAM不同,Flash存储空间通常较大,当无法在RAM调试时只能在Flash区域内进行调试。微控制器设计人员提供了用于在Flash区域调试时使用的硬件断点,硬件断点会将PC指针与断点位置进行比较,并检查指令是否被调用,当断点处指令被调用时,程序将停止并启动调试器。硬件断点的数量由芯片所使用的内核决定,在ARM7和ARM9内核中仅包含2个硬件断点,在Cortex-M3和M4内核中包含4-6个可用的硬件断点。在调试过程中,当硬件断点数量用完时则无法添加新的断点,只能取消前面添加的断点后才能添加新的断点,这无疑将严重影响程序开发效率。

(3)外扩Flash存储芯片调试

当所开发的应用程序的复杂度进一步上升时,可能会使用到外扩的Flash存储,那么此时该如何进行应用程序调试呢?在大多数使用Cortex-M内核的微控制器中,芯片内部提供的硬件断点在调试过程中能够生效的地址范围是有限的,当使用外扩Flash时,自带的硬件断点将无法在外扩Flash存储的地址范围内生效,此时将无法在这些区域内设置断点来调试应用程序。

当使用基于地址映射扩展的外部Flash存储时,Segger J-Link产品所支持的无限Flash断点功能能够帮助我们对片外Flash添加断点并调试。

Segger无限Flash断点功能

J-Link支持一项名为“无限Flash断点”(Unlimited Flash Breakpoints)的调试功能。“无限Flash断点”允许用户在Flash中调试时设置无限数量的断点。如果没有此功能,在Flash中能够设置的断点数量限制为CPU调试单元支持的硬件断点数。

J-Link的“无限Flash断点”适用于片内和外扩的Flash,包括通过内存映射添加的QSPI闪存。

acb3e97e-cd9e-11ec-bce3-dac502259ad0.png

无限Flash断点的实现方式

Segger J-Link系列产品在实现无限Flash断点功能时,会使用硬件和软件断点的混合,来尽可能的减少对于Flash的影响。当硬件断点数量用完再添加新断点时,Segger软件将对断点所在位置的Flash区块进行重新编程来添加断点。

虽然Flash存在一定的写入次数限制,但Segger在实现该功能时已经做了大量针对性的优化来减少对于Flash的影响,例如处于同一区块内的多个断点,Segger将通过一次该Flash区块的重编编程来完成多个断点的添加。Segger仅在必要时才会对Flash区块进行重编程,部分操作将通过内置的指令集模拟器来完成,从而能够尽可能的减少对于Flash闪存的影响。

Segger的无限Flash断点调试功能解除了硬件断点对于程序调试的限制,能够提升开发人员的开发效率。对于Cortex-M内核芯片添加了外扩Flash的情形,无限Flash断点功能则可能是仅有的片外Flash调试解决方案。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1550

    浏览量

    146646
  • RAM
    RAM
    +关注

    关注

    7

    文章

    1321

    浏览量

    113706
  • 断点
    +关注

    关注

    0

    文章

    11

    浏览量

    7658

原文标题:如何使用J-Link无限Flash断点功能调试应用?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32G031K8程序打断点在STARTUP.S文件中,停在断点处会导致操作flash错误怎么解决?

    特殊,默认会写一点内容在FLASH里面,以前看到有人在原版说明上有个截图。我试过,与FLASH有关的操作,不使用断点就正常。当然为了调试方便,可以换个编译器或者在原版说明上找个变通的方
    发表于 03-25 07:38

    SEGGER调试低功耗模式

    为开发人员提供了一套完整的工具套件,能够帮助他们开发和调试低功耗模式。 SEGGER是一家致力于嵌入式系统开发工具的领导者,其J-Link调试器系列在全球范围内得到广泛应用。下面,我们将详细介绍
    的头像 发表于 01-02 16:36 221次阅读

    IDEA的调试功能

    工具和功能。本文将详细介绍IDEA的调试功能,包括使用方法、常用技巧和调试过程中的注意事项等。 第一部分:IDEA的调试
    的头像 发表于 12-06 14:07 307次阅读

    什么是双内存映射?能解决什么问题?

    J-Link调试器支持将程序下载到RAM或Flash中,并通过设置无限断点、查看内存寄存器等方式实现在线调试。如果没有这种
    的头像 发表于 12-01 11:06 450次阅读
    什么是双内存映射?能解决什么问题?

    GDB调试里怎么设置断点

    本篇讲解使用GDB调试Linux应用程序,以下以 hellowld.c 为例介绍 GDB 的调试入门: 设置断点   disable                 # 禁用所有断点
    的头像 发表于 10-04 16:10 565次阅读

    使用SEGGER Embedded Studio+JLink调试器进行RISC-V嵌入式开发的方法

    Embedded Studio 和 JLink驱动的下载和安装 SEGGER Embedded Studio是SEGGER公司推出的一款嵌入式开发的集成开发环境,具有开发与编译界面专业、调试
    发表于 08-16 07:16

    GD32VF103是否支持高级调试器?

    当前 RV-STAR 和全功能开发板当前是使用Nuclei 和Segger进行调试,对变量的实时监控只能暂停程序运行。 是否可以支持 劳特巴赫和 PLS这种高级一点的调试器?可以看寄存
    发表于 08-16 07:07

    Keil调试时设置断点的高级用法

    在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但有的时候,手动打断点用起来不是那么方便。
    的头像 发表于 08-04 09:34 2346次阅读
    Keil<b class='flag-5'>调试</b>时设置<b class='flag-5'>断点</b>的高级用法

    在使用JTAG调试的时候,打了断点segger调试不了如何解决?

    我在使用JTAG调试的时候,当打了断点后,segger调试不了,有没有哪位大佬可以帮我解答一下?
    发表于 06-13 08:24

    使用SEGGER Embedded studio调试generate_project -b hpm6750evk -t flash_xip 生成的solution为什么没有反应?

    使用SEGGER Embedded studio 调试generate_project -b hpm6750evk -t flash_xip生成的solution没有反应
    发表于 05-26 08:22

    seeger embeded在调试的时候插入断点,运行到断点处会报错怎么解决?

    调试的时候插入断点,运行到断点处会报错,如图所示
    发表于 05-26 07:42

    SEGGER Embedded Studio仿真打断点超过两个就报错是什么原因?

    SEGGER Embedded Studio 上在线仿真,打断点个数不能超过2个,否则报错,请问是我工程设置问题还是仿真器问题?
    发表于 05-26 07:36

    segger embeded studio调试的时候报错怎么处理啊?

    segger embeded studio调试的时候报错 用命令行调试的时候的报错
    发表于 05-26 07:14

    使用SEGGER Linker的完整性检查功能

    验证一个更新的固件映像是否可信。或者固件基于完整性检查可以自我验证,检查Flash是否损坏。 SEGGER Embedded Studio从v5.10版本(Linker v3.00及以上版本)开始提供
    发表于 05-18 13:50

    为什么无法使用“S32 Design Studio for Arm”和Segger J-Link Classic Base进行调试

    。 如图所示,我设置了一个断点...... 但是调试器似乎没有运行到断点或停止在断点处,它似乎处于重置状态? 以下是控制台消息的副本...
    发表于 05-05 06:58