MCU程序里使用了看门狗,在KEIL MDK里通过加断点进行调试时,很容易因停留在断点处来不及“喂狗”而导致看门狗复位,这给调试带来不便。虽然关闭看门狗代码重新编译能解决问题,但当我们不想或不能修改程序时,可以尝试以下方法:
第一步,在MDK调试模式下,先在初始化看门狗的函数调用处(例如 iwdg_init())设置一个断点,并让程序运行到此处暂停。
第二步,在代码编辑窗口,将鼠标光标点击放置在idwg_init()函数调用的下一行语句上,然后右键选择 “Set Program Counter”(设置程序计数器)。
这样操作后,程序计数器(PC)的当前指令地址就被跳过idwg_init()函数的执行,直接指向了后续的语句。此时,继续运行程序就不会执行看门狗的初始化。
这个方法的原理是:通过设置程序计数器(PC),我们直接改变了CPU接下来要执行的指令地址。在调试器中,我们跳过了iwdg_init()函数的执行,因此看门狗定时器根本就没有被启动和使能,它在整个调试过程中都处于默认的关闭状态,自然也就不会产生复位信号。这是一个纯调试环境下的“欺骗”手段,对程序本身的代码没有任何改动。通过查看IWDG相关寄存器,可以确认看门狗确实未被初始化。
这样操作之后,后续不管怎么加断点调试,都不会再引起看门狗复位了。
总结一下:这个方法适用于在必须保留看门狗代码的前提下进行调试的场景。它避免了反复修改代码、重新编译下载的繁琐步骤,提升了调试效率。但需要注意的是,这只是一个调试技巧,最终发布的软件版本仍需确保看门狗逻辑正确运行,以保证系统在异常时的自恢复能力。
扫码加入嵌入式交流群:
222