不知道你是否有這樣的體驗:代碼單步調試,調著調著,出現了下面的提示框:
很多時候,莫名其妙,一般情況,只能退出調試,再重新進入。
一般沒啥影響,但有的時候,我們是為了抓 BUG 現場才進入的調試模式《BUG 終結者,現場抓獲!|顛覆認知》,一旦因為失聯導致不能繼續調試,估計得罵娘了(BUG 容易復現還好,下次在來,但是很難復現的話,就麻煩大了)。
那會是什么導致失聯了呢?
魚鷹總結了以下幾種可能:
1、調試器連線(PC 到調試器,調試器到芯片)不正常。
2、MDK 軟件問題
3、MDK 工程兼容問題
4、看門狗復位(窗口、獨立看門狗)
連線問題好解決,各種換即可,MDK 軟件問題,只能說盡量找個穩定的版本了。另外就是 MDK 工程兼容的問題,比如這個項目開始不是你負責的,后來你入職了,用了另一個版本的 MDK,再次打開這個工程的時候,就可能出現問題,一般來說,這種情況下,不要嫌麻煩,直接新建工程即可(可以看這篇筆記《如何快速更換 MDK 工程?》)。
還有一種很容易忽略的可能是,項目代碼開啟了看門狗,單步調試時間太長,沒有及時喂狗導致復位。
此時,我們又該如何解決呢?這就是本篇筆記的重點。
參考手冊最后面,我們可以看到這個寄存器 DBGMCU_CR。
這里我們看看獨立看門狗這個位的介紹:
可以看到,這個作用就是,當我們進入調試狀態時,看門狗計數器停止工作。
F103 函數設置如下:
DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE);
什么意思?就是說,當我們在單步調試,程序停下來進行分析的時候,因為設置了該位,就可以讓計數器不工作,這樣一來,即使停止再久的時間,只要在調試模式下,都不會因為看門狗而復位,因為計數器已經不工作了,也就不能觸發復位動作了。而一旦退出調試模式,看門狗繼續正常工作。
這樣也就不會導致前面說的失聯問題,可以讓你專心分析代碼邏輯。
那如果說,原來的代碼沒有考慮這個點,沒有配置這個位,咋辦?
如果看門狗超時時間比較長(十幾秒以上),你完全可以在進入調試模式后,從容打開寄存器窗口,手動設置該位,這樣臨時抱佛腳的行為也能起作用。
那如果只有幾秒鐘咋辦?手動操作可能根本來不及,魚鷹在此再支一招:
使用 MDK 中的 ini 文件,讓其進入調試模式的同時,自動設置該位,相當方便。
那如果是毫秒級別的呢?自求多福吧,或許 ini 的方法可以解決,或許進入調試模式后,在程序運行的時候(別停!!!),先用 MDK 的命令窗口或寄存器窗口設置一下該位,再停止程序運行去分析問題。
總之,一定要先把這個位給設置了再慢慢調試分析,否則,可能調著調著,最終調了一個寂寞。
原文標題:代碼調著調著就失聯了???
文章出處:【微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
調試
+關注
關注
7文章
578瀏覽量
33943 -
代碼
+關注
關注
30文章
4788瀏覽量
68616 -
MDK
+關注
關注
4文章
209瀏覽量
32069
原文標題:代碼調著調著就失聯了???
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論