在用keil調試程序時,總是需要通過watch窗口查看變量值。默認情況下,添加的變量值是不會自動更新的,只有在停止運行后才會更新變量值。其實只需修改一個配置,就可以實現變量的自動更新。
首先打開一個工程,并進入調試。
程序內容很簡單,初始化單片機,然后每隔半秒翻轉下兩個I/O口的輸出狀態,同時每隔一秒給變量“counter”加一。
接下來,讓程序全速運行,這時的watch1窗口里的counter變量是沒有變化的。
然后給程序打個斷點,這時看下變量就更新了。
此時,去掉斷點,該變量依舊不會更新。
接下來,咱們來設置下。
1,點擊“view”;2,勾選“periodic Window update”
此時,立竿見影就會發現watch1中的“counter”變量已經開始自動更新了。
簡易的視頻操作(見諒,沒有語音與文字[笑哭])如下:
<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>
順便提一下“Call Stack + Locals”和“watch1”窗口的區別。
Call Stack + Locals:看文識意,這個是調用棧的顯示窗口,也就是看棧空間里的局部變量的。只有運行到特定的函數,才能看該函數里的局部變量,它是有作用域的。
watch1:該窗口是可以看任意變量的。它是可以看局部變量的(是的,你沒有看錯!),前提是運行到對應的函數時,該局部變量才有效,否則該局部變量無效。
看個例子:
設置好斷點,當運行到如下函數中。
看下此時的“Call Stack + Locals”,看下局部變量“GPIO_Pin”的值。
此刻,在“watch1”中添加該局部變量并看其值,也是一樣的。
接下來,取消斷點,全速運行。在“watch1”中的局部變量“GPIO_Pin”就失效了。
很多同學在學習單片機的時候會因為單片機開發箱的成本昂貴而望而卻步,但是現在有一款可以進行單片機仿真的軟件Protues,Protues軟件不僅可以實現多款單片機的仿真,而且在8.0版本以后也加入STM32仿真功能,可以很方便的將STM32程序在沒有開發板的情況下進行快速驗證。同時Protues具有繪制原理圖和設計PCB電路圖的功能。聯合調試可以不用把生成的HEX文件反復加載仿真單片機,只需要程序編寫完成在進行調試的時候就可以直接在Protues中進行仿真觀察運行狀態,所以聯合調試非常方便。
第一步,首先下載VDM51.zip這個文件,因Protues高級版本中沒有此文件,所以需要下載,下載之后找到keil安裝目錄—C51—BIN,然后將此文件放進文件夾即可。
第二步,用記事本(其它的編輯軟件也可以,如Ultra Edit)打開Keil 根目錄下的 TOOLS.INI 文件,在[C51] 欄目下加入 TDRV8=BINVDM51.DLL ("Proteus VSM Monitor-51 Driver" ) ,其中“TDRV9” 中的 “9”要根據實際情況寫,不要和原來的重復。
第三步,然后開始進行keil軟件的設置,打開keil軟件—Target Options—DeBug—Use(選擇Protues VSM Monitor-51 Driver),最后還要點擊后面的settings,如果只是本機聯調,host后面寫172.0.0.1,port:后面寫:8000。
第四步,Proteus的設置。運行Proteus的ISIS,鼠標左鍵點擊菜單"DEBUG",選中"use romote debuger monitor"(啟動遠程編譯器)
第五步,聯調完成,此時如果在keil中點擊調試按鈕,則調試結果直接在protues界面顯示。