找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3449

积分

0

好友

459

主题
发表于 1 小时前 | 查看: 3| 回复: 0

在嵌入式C语言开发中,MCU程序常常需要集成看门狗定时器。但使用KEIL MDK断点调试时,只要程序在断点处停留稍久,“喂狗”时机就会被错过,导致看门狗强制复位,调试过程十分烦人。关闭看门狗代码再编译当然能解决,可一旦不方便或不允许改动源码,就需要另寻他法。下面这个方法,不改变一行代码就能让你避开看门狗的干扰。

第一步:在MDK调试模式下,找到初始化看门狗的函数调用位置(例如 iwdg_init()),在这里打一个断点,并让程序运行到此处暂停。

IWDG初始化代码及断点设置

第二步:在代码编辑窗口中,把光标放到 iwdg_init() 调用之后的下一行语句上,然后右键选择 “Set Program Counter”(设置程序计数器)。

Set Program Counter菜单选项

做完这一步,程序计数器(PC)就会直接跳过 iwdg_init() 的执行,指向其后续指令。此时再继续运行,看门狗的初始化压根不会被触发。

程序计数器跳过看门狗初始化后的代码位置

这个技巧的本质,是借助调试器强行改变了CPU即将执行的指令地址。由于我们绕过了 iwdg_init(),看门狗定时器始终处于未使能的默认状态,自然就不会在调试期间产生复位信号。这纯粹是调试环境下的“欺骗”手段,对源代码没有半点影响。要想验证效果,可以打开IWDG相关寄存器窗口——配置、使能、窗口值、计数器全都为零,说明看门狗确实没有被初始化。

IWDG寄存器均为0表示未初始化

从那之后,无论你在程序中加多少个断点、停留多久,都不用再担心看门狗复位来捣乱了。

总结:这个方法特别适合在必须保留看门狗代码的前提下进行调试的场景,省去了反复修改代码、重新编译下载的麻烦,显著提升调试效率。当然,这只是调试期间的临时手段,最终发布的固件中仍要确保看门狗逻辑正确运行,以保障系统在异常情况下的自恢复能力。如果你也有更多调试妙招,不妨到云栈社区与众多嵌入式开发者交流分享。




上一篇:SocketCAN实战避坑指南:从编程到性能调优
下一篇:Apache Tomcat 集群 RCE 漏洞 (CVE-2026-34486) 分析与利用
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-13 21:29 , Processed in 1.095197 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表