MCU程序里使用了看門狗,在KEIL MDK里通過加斷點進行調試時,很容易因停留在斷點處來不及“喂狗”而導致看門狗復位,這給調試帶來不便。雖然關閉看門狗代碼重新編譯能解決問題,但當我們不想或不能修改程序時,可以嘗試以下方法:
第一步,在MDK調試模式下,先在初始化看門狗的函數調用處(例如 iwdg_init())設置一個斷點,并讓程序運行到此處暫停。

第二步,在代碼編輯窗口,將鼠標光標點擊放置在idwg_init()函數調用的下一行語句上,然后右鍵選擇 “Set Program Counter”(設置程序計數器)。

這樣操作后,程序計數器(PC)的當前指令地址就被跳過idwg_init()函數的執行,直接指向了后續的語句。此時,繼續運行程序就不會執行看門狗的初始化。

這個方法的原理是:通過設置程序計數器(PC),我們直接改變了CPU接下來要執行的指令地址。在調試器中,我們跳過了iwdg_init()函數的執行,因此看門狗定時器根本就沒有被啟動和使能,它在整個調試過程中都處于默認的關閉狀態,自然也就不會產生復位信號。這是一個純調試環境下的“欺騙”手段,對程序本身的代碼沒有任何改動。通過查看IWDG相關寄存器,可以確認看門狗確實未被初始化。

這樣操作之后,后續不管怎么加斷點調試,都不會再引起看門狗復位了。
總結一下:這個方法適用于在必須保留看門狗代碼的前提下進行調試的場景。它避免了反復修改代碼、重新編譯下載的繁瑣步驟,提升了調試效率。但需要注意的是,這只是一個調試技巧,最終發布的軟件版本仍需確保看門狗邏輯正確運行,以保證系統在異常時的自恢復能力。
關注我們:
掃碼加入嵌入式交流群:
