keil rtx除錯技巧

2022-06-17 19:12:15 字數 1285 閱讀 7427

超級迴圈結構的程式除錯一般依賴於斷點,單步,檢視變數和記憶體變數(keil中的memory window 或者 watch window);而帶微作業系統的程式由於加了這個中間層除錯方法可能傳統的有些區別,函式內部還可以用原始的方法除錯,但任務級的則需要新的除錯方法(有時候需要硬體偵錯程式的支援)。

arm cortex-m 系列的晶元其實有很強的coresight片上除錯支援,實際上就是乙個小的除錯硬體,作為arm的標準,內嵌在arm的晶元裡。在arm自家的偵錯程式ulink-pro等的幫助下,可以實現**覆蓋率,**剖析,**效能分析等非常強大的除錯功能。不同架構的cortex-m系列的晶元支援不同的coresight部件。

作為arm自家的軟體開發工具,keil自然也在除錯方面有很多相應的支援。我們這裡簡單介紹一下keil對rtx的支援,作業系統感知除錯(os-aware debugging)。主要有兩個功能,乙個是系統和程序觀察視窗(system and thread viewer),另外乙個是事件視窗(event viewer)。

system and thread viewer:在debug選單中的os support欄中,點選system and thread viewer(periodic window update被點選才能看到實時的更新):它可提供提供了rtx系統的基本設定,例如堆疊大小,時間片設定等和程序的基本資訊,例如程序id,程序優先度,當前程序狀態,程序的delay時間,程序等待的事件值和當前的事件值和堆疊的適用程度。這個視窗還會實時更新各個程序的狀態。

事件視窗(event viewer):這個除錯功能需要swv(serial wire viewer)支援:target option

->debug ->debugger選擇欄右側的settings按鈕:然後點選裡面的trace(跟蹤)欄目,開啟trace,失能periodic和exctrc選項

清晰記錄了具體某一時刻,哪個程序在執行,和程序執行之間的切換。

如果你勾選開啟右上角的3個小功能:task info, cursor和 show cycles,然後再把滑鼠移至任一程序,就會出現程序資訊框

rtx本身提供了乙個功能,能夠返回當前相對於os_sys_init()的那一刻時間(以rtx設定的時間單位為單位,初始時間是rtx開始initialize的時間,也就是os_sys_init()的那一刻):current_time=os_time_get();

GDB除錯技巧,除錯命令

除錯時檢視依賴dsopidof tvm rpc server cat proc maps子程序除錯 1.vscode setupcommands output cpu simu dev bin ld library path ignorefailures false exec catch throw...

GDB除錯技巧

在公司工作了一段時間,發現 b s結構的 除錯很麻煩,經常用的手段是通過 printf 打一串訊息來進行跟蹤,然後估計問題出在 通過逐步新增 printf 語句,獲得越來越多的資訊最終確定問題的根源。我感覺這樣比較麻煩,如果能把 gdb的單步除錯功能用上就好了。工作之餘,做了一定的嘗試,希望對跟我一...

xcode除錯技巧

有時程式崩潰根本不知錯誤發生在什麼地方。比如程式出現exec bad access的時候,雖然大部分情況使用設定nszombieenabled環境變數可以幫助你找到問題的所在,但少數情況下,即使設定了nszombieenabled環境變數,還是不知道程式崩潰在什麼地方。那麼就需要使用下列 進行幫助了...