1 不复位MCU继续调试的方法-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

不复位MCU继续调试的方法

STM32单片机 来源:STM32单片机 2024-01-26 09:25 次阅读

01前言

产品开发时,经常会碰到在测试过程中或设备出厂后才发现程序异常,但当重新对设备仿真调试时却复现不出现场的问题,或者只通过保存的日志信息艰难分析代码运行到了何处而导致的异常。

遇到这种场景,也并非无路可循。原则上只要我们通过仿真器调试时,做到代码不被重新下载覆盖,MCU 不被复位,就可能保留当前程序运行的状态,让 Bug 无处藏身。

02实现方法

首先,我们将编译完成的工程烧录到 MCU,保证 MCU 中所运行的代码与要仿真的工程代码一致,这样从 MCU 获取的程序位置才能与调试符号信息一致。

不同的编译器可以通过不同的方法进行设置,但其目的和最终能达到的效果是一致的。我们就对常用的 MDK、IAR、STM32CubeIDE 三种不同编译器分别进行设置,使 MCU 在不复位的状态下继续调试。

03MDK

1. 新建一个.ini 文件,在文件中写入以下内容:LOAD %L INCREMENTAL,并加载到Initialization File,同时取消 Load Application at Startup 的选项。

8bd718d0-bb67-11ee-8b88-92fbcf53809c.jpg

8bec1ce4-bb67-11ee-8b88-92fbcf53809c.jpg

这个脚本的目的是加载编译生成的.axf 文件到 MDK 中,该文件包含 bin 代码和调试相关的各种符号信息,以定位我们的 C 源码。

关于其语法说明,可参考 MDK 的 uVision User’s Guide。

8bf3991a-bb67-11ee-8b88-92fbcf53809c.jpg

2. 去掉 Reset after Connect 选项

8bfee34c-bb67-11ee-8b88-92fbcf53809c.jpg

3. 去掉 Update Target before Debugging

8c0a0902-bb67-11ee-8b88-92fbcf53809c.jpg

4. 完成上述配置后,就可以在 MCU 不复位的情况下,像正常调试一样加断点调试了。

04IAR

使用 IAR 时,无需额外设置,直接使用其自带的功能“Attach to Running Target”即可实现。

8c1d226c-bb67-11ee-8b88-92fbcf53809c.jpg

05STM32CubeIDE

在 STM32CubeIDE 中,配置比较灵活,可以复制一个 Debug 的配置,并在这个基础上进行修改。

8c302984-bb67-11ee-8b88-92fbcf53809c.jpg

1. 配置 Debugger->Reset behaviour Type 为 None

8c3b3130-bb67-11ee-8b88-92fbcf53809c.jpg

2. 在 Debugger->Misc 中取消 Verify flash download 选项

8c4ff7aa-bb67-11ee-8b88-92fbcf53809c.jpg

3. 在 Startup->Load Image and Symbols 中编辑下载代码时的操做方式。并取消Download 选项

8c5ab96a-bb67-11ee-8b88-92fbcf53809c.jpg

8c6e6ae6-bb67-11ee-8b88-92fbcf53809c.jpg

4. 在 Debug 时,用上述配置完的调试配置,即可同样实现不复位的调试

8c7ec260-bb67-11ee-8b88-92fbcf53809c.jpg

06总结

利用上述不复位 MCU 继续调试的方法,能够保全现场的运行状态,重新接上仿真器即可对程序进行断点调试、单步执行等操作。对查找 Bug,发现并定位问题点,尤其对不易复现的偶发性故障十分有用。但是当 RDP Level≠0 时,因为已经开启了读保护,所以无法通过上述方法调试。

审核编辑:汤梓红

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

    关注

    146

    文章

    17123

    浏览量

    350972
  • 调试
    +关注

    关注

    7

    文章

    578

    浏览量

    33923
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49107
  • 烧录
    +关注

    关注

    8

    文章

    259

    浏览量

    35561

原文标题:实战经验 | 调试小技巧之不复位调试

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

收藏 人收藏

    评论

    相关推荐

    请问stm8l101p3u为什么进入halt之后看门狗不复位

    在网上查了半天,很多人都是说halt之后不想让看门狗运行却停不下来,为什么到了我这我想halt之后看门狗继续运行它反而不复位了呢?? 看门狗的代码 RST_ClearFlag
    发表于 05-13 07:01

    cc2650 OAD结束后不复位,为什么?

    Device Monitor的OAD功能,看上去可以向cc2650传输OADbin.bin,但OAD结束后,cc2650不复位;3.在1基础上,调试OADTarget工程的CC2640App
    发表于 03-28 16:17

    请问28033有可能出现死机但是不复位的情况吗?

    鄙人做的是开关电源,在最恶劣工况加载时,DSP什么反应都没有,也不复位,系统成了一块砖,我之前的类似工况,DSP都是***扰的复位的,这次怎么不复位也不工作呢?有达人指点一下吗?
    发表于 10-08 16:55

    IDE设置步骤有哪些

    使用场景:当MCU运行时出现Bug,但没有在线调试;此时可以使用该方法,在不复位的情形下捕捉代码当前运行到的位置,继续在线
    发表于 11-01 07:09

    IAR调试中不同复位类型的介绍

    IAR调试中不同复位类型的介绍在IAR 环境下调试有不同的复位类型,其中一些只复位内核不复位
    发表于 10-19 07:54

    IAR退出调试时如何让MCU继续运行?

    RT,每次退出调试要给板子重新上电MCU才运行,如何在退出时继续运行?
    发表于 10-20 06:53

    哪些因素会导致MCU复位

    调试MCU时,经常会遇到复位的情况。要找到复位的原因,我们就需要了解到有哪些因素会导致MCU复位
    的头像 发表于 11-10 16:32 1w次阅读
    哪些因素会导致<b class='flag-5'>MCU</b><b class='flag-5'>复位</b>

    华大MCU如何实现软件复位

    产品在设计中某些状态下需要MCU进行复位,华大MCU包含了7个复位信号来源,每个复位信号都可以让 CPU 重新运行,绝大多数寄存器会被
    发表于 10-12 11:24 1972次阅读

    KEIL/MDK中使用JLINK调试器挂载正在运行中的MCU

    使用场景:当MCU运行时出现Bug,但没有在线调试;此时可以使用该方法,在不复位的情形下捕捉代码当前运行到的位置,继续在线
    发表于 10-25 18:36 13次下载
    KEIL/MDK中使用JLINK<b class='flag-5'>调试</b>器挂载正在运行中的<b class='flag-5'>MCU</b>

    初始化mcu程序选用32k_MCU有多少种复位因素

    调试MCU时,经常会遇到复位的情况。要找到复位的原因,我们就需要了解到有哪些因素会导致MCU复位
    发表于 12-05 10:36 6次下载
    初始化<b class='flag-5'>mcu</b>程序选用32k_<b class='flag-5'>MCU</b>有多少种<b class='flag-5'>复位</b>因素

    不复位MCU直接调试运行程序

    此时此刻有一种调试需求是朋友们非常想要的:一旦程序出了问题,我只需要插上仿真器,目标硬件不会复位,而是与我当前所调试的程序同步,类似于仿真程序的时候的“全速运行”,然而通过添加断点,便可查看程序具体的运行状态,内存等等信息,让b
    的头像 发表于 05-12 15:43 1349次阅读

    MCU复位电路知多少?

    MCU复位电路知多少?
    的头像 发表于 10-17 18:02 1211次阅读
    <b class='flag-5'>MCU</b><b class='flag-5'>复位</b>电路知多少?

    如何排查GD32 MCU复位是由哪个复位源导致的?

    上期为大家讲解了GD32 MCU复位包括电源复位和系统复位,其中系统复位还包括独立看门狗复位、内
    的头像 发表于 02-03 09:46 1726次阅读
    如何排查GD32 <b class='flag-5'>MCU</b><b class='flag-5'>复位</b>是由哪个<b class='flag-5'>复位</b>源导致的?

    MCU不复位调试的小技巧

    场景,也并非无路可循。原则上只要我们通过仿真器调试时,做到代码不被重新下载覆盖,MCU 不被复位,就可能保留当前程序运行的状态,让 Bug 无处藏身。 02 实现方法 首先,我们将编译
    发表于 02-26 11:30 1163次阅读
    <b class='flag-5'>MCU</b><b class='flag-5'>不复位</b><b class='flag-5'>调试</b>的小技巧

    MCU复位RAM会保持吗,如何实现复位时变量数据保持

    在使用MCU时,通常大家默认MCU复位时RAM会被复位清零,那实际MCU复位时RAM是什么状态?
    的头像 发表于 03-01 09:32 2473次阅读
    <b class='flag-5'>MCU</b><b class='flag-5'>复位</b>RAM会保持吗,如何实现<b class='flag-5'>复位</b>时变量数据保持