平時(shí)在開發(fā)嵌入式程序的時(shí)候大多數(shù)使用的都是keil軟件,一般小的工程使用keil沒(méi)感覺(jué)到有什么問(wèn)題,但是當(dāng)工程比較大的時(shí)候,比如移植了FreeRTOS系統(tǒng)或者LWIP網(wǎng)絡(luò)系統(tǒng)時(shí),代碼全部編譯一次就要花費(fèi)很長(zhǎng)時(shí)間,特別是開啟了點(diǎn)擊函數(shù)右鍵跳轉(zhuǎn)的功能之后,速度更加慢。有時(shí)候只是為了查看一下代碼,為了能夠使用函數(shù)跳轉(zhuǎn)功能,就不得不把工程全部編譯一遍。
??為了提高開發(fā)效率,一般查看代碼的時(shí)候會(huì)使用vscode 和 source insight 這類軟件,但是vscode占用內(nèi)存比較大,電腦配置比較低的話,電腦就會(huì)比較卡。source insight占用內(nèi)存比較小,功能和使用方法上感覺(jué)沒(méi)有vscode方便,但是source insight 有個(gè)優(yōu)點(diǎn)就是可以查看函數(shù)調(diào)用關(guān)系圖。
??這個(gè)功能用起來(lái)感覺(jué)很方便,特別是查看別人代碼的時(shí)候,能有一個(gè)直觀的感受。于是平時(shí)就是vscode 和 source insight 這兩個(gè)軟件交替使用。
??直到前幾天無(wú)意中發(fā)現(xiàn)了Understand這個(gè)軟件之后,vscode 和 source insight 就再也不想用了,特別是Understand 強(qiáng)大函數(shù)關(guān)系圖生成功能。用一次之后就再也回不去了。先上一張圖感受下。
??下面就詳細(xì)說(shuō)一下如何使用Understand軟件。在瀏覽器中直接搜索Understand 進(jìn)行下載安裝破解,具體過(guò)程網(wǎng)上教程很多,這里就不再演示了。
??下載安裝完成之后,打開軟件。
??如果要查看代碼的話,不能像vscode那樣直接把文件夾拖入到軟件界面中直接打開。要使用這個(gè)軟件必須給要查看代碼先建一個(gè)工程。
??在桌面上新建一個(gè)code文件夾準(zhǔn)備存放Understand的工程文件,F(xiàn)reeRTOS移植實(shí)驗(yàn)是要查看的代碼。也可以不新建code文件夾,Understand的把工程文件直接存放在FreeRTOS移植實(shí)驗(yàn)里面。
??不過(guò)我一般習(xí)慣在將Understand的工程文件單獨(dú)放在另外的目錄里面。這樣查看別人的代碼時(shí),不會(huì)破壞keil工程文件的完整性。
??接下來(lái)在Understand軟件中新建工程,選擇文件–新建–工程。
??在彈出的界面中點(diǎn) 添加文件夾按鈕,添加要查看的keil工程文件夾。
??這里選擇要查看的這個(gè) FreeRTOS移植實(shí)驗(yàn)
??單擊繼續(xù)按鈕
??選擇第二個(gè)選項(xiàng),不編譯代碼。
??接下來(lái)選擇Understand工程文件存放目錄,默認(rèn)會(huì)創(chuàng)建在keil工程目錄里面,在這里將工程目錄設(shè)置為剛才新建code文件夾路徑。
??單擊后面的 … 按鈕,將工程路徑選擇為code文件夾,然后點(diǎn)保存按鈕。
??工程路徑設(shè)置好之后,單擊創(chuàng)建工程按鈕,開始新建工程。新建工程的時(shí)候需要花費(fèi)十幾秒的時(shí)候?qū)こ涛募M(jìn)行掃描,這里要耐心等待一會(huì)。
??工程掃描完成之后,就會(huì)自動(dòng)出現(xiàn)一個(gè)工程文件分析的界面,在這個(gè)界面中可以看到工程里面各部分代碼的占比情況。
??第一個(gè)圖展示的是代碼、注釋、未使用、預(yù)編譯、空白 這些占用行數(shù)。
??第二張圖展示的是不同代碼在工程中的占比。通過(guò)這個(gè)可以看出FreeRTOS占30.1%,庫(kù)函數(shù)占了62.7%。
??通過(guò)下面的柱形圖中還能看出比較占比比較大的函數(shù)和文件。
??通過(guò)這個(gè)整體的分析圖讓我們對(duì)這個(gè)工程文件構(gòu)成有一個(gè)整體的印象。下面開始使用這個(gè)軟件對(duì)代碼進(jìn)行具體的分析。在軟件界面的左側(cè)選擇工程瀏覽,然后打開user文件夾里面的main.c文件。
??在main.c文件中雙擊選中main函數(shù),然后在工具欄中點(diǎn)這個(gè)連接按鈕。
??在這里選擇第一個(gè)選項(xiàng)
??
此時(shí)就會(huì)顯示出main函數(shù)中調(diào)用了哪些函數(shù)。
??這里默認(rèn)情況下只顯示了1層的調(diào)用關(guān)系,如果要顯示多層調(diào)用關(guān)系還需要設(shè)置一下。界面有右上方有兩個(gè) 三條橫線的圖標(biāo),點(diǎn)擊下面這個(gè)三條橫線圖標(biāo)。
??將這個(gè)被調(diào)用的深度設(shè)置為3。
??接著把調(diào)用深度也設(shè)置為3。
??接下來(lái)就會(huì)重新生成一個(gè)函數(shù)調(diào)用關(guān)系圖。
??滾動(dòng)鼠標(biāo)滾輪可以放大縮小這個(gè)關(guān)系調(diào)用圖。
??通過(guò)這個(gè)關(guān)系調(diào)用圖就可以很清晰的看出來(lái)main函數(shù)分別調(diào)用了哪些函數(shù),而這些函數(shù)里面又繼續(xù)調(diào)用了哪些函數(shù)。這樣即使不用看代碼直接通過(guò)這個(gè)函數(shù)調(diào)用關(guān)系圖就能看出來(lái)main函數(shù)里面都完成了哪些功能。
??接下來(lái)依然選擇main函數(shù),在關(guān)系調(diào)用中選擇第二個(gè)功能。
??通過(guò)右上角的的選項(xiàng)按鈕將層設(shè)置為5,這樣就會(huì)顯示出一個(gè)5層的調(diào)用關(guān)系圖。
??在這個(gè)調(diào)用關(guān)系中可以看到,好多函數(shù)都調(diào)用了同一個(gè)函數(shù)。而有些函數(shù)是我們不需要關(guān)心的,那么就可以在這個(gè)函數(shù)上單擊鼠標(biāo)右鍵,選擇隱藏,將這個(gè)函數(shù)隱藏掉不顯示。
??如果想要重點(diǎn)關(guān)心某一個(gè)函數(shù)的調(diào)用關(guān)系,可以在函數(shù)上右鍵,選擇高亮顯示。比如在這里要重點(diǎn)關(guān)心任務(wù)創(chuàng)建函數(shù)。
??此時(shí)任務(wù)創(chuàng)建函數(shù)前面和它相關(guān)函數(shù)和路線都會(huì)被高亮顯示。
??如果想進(jìn)一步了解這個(gè)函數(shù)的其他信息,可以在這個(gè)函數(shù)上單擊鼠標(biāo)右鍵,在屬性中查看,這里就不再一一列舉了。
??接下來(lái)看關(guān)系調(diào)用的第三個(gè)選項(xiàng)。
??此時(shí)就會(huì)生出一個(gè)main函數(shù)內(nèi)部的執(zhí)行流程。
??接下來(lái)看關(guān)系調(diào)用的第四個(gè)選項(xiàng)。
??這個(gè)列出來(lái)了main函數(shù)調(diào)用的函數(shù)和main函數(shù)的返回值。
??接下來(lái)看關(guān)系調(diào)用的第五個(gè)選項(xiàng)。
??這個(gè)列出來(lái)了main函數(shù)所包含的頭文件和宏定義
??接下來(lái)看關(guān)系調(diào)用的最后一個(gè)選項(xiàng)。
??這個(gè)會(huì)顯示出main函數(shù)調(diào)用的那些初始化函數(shù)都包含在哪些c文件中。
??通過(guò)上面這個(gè)6種功能,可以對(duì)main函數(shù)和其他函數(shù)的調(diào)用關(guān)系進(jìn)行各種方式的分析,讓我們對(duì)這個(gè)工程代碼能進(jìn)一步的深入了解。
??同樣Understand軟件也可以直接查看代碼。如果要跳轉(zhuǎn)到函數(shù)內(nèi)部時(shí),按住ctrl鍵,單擊鼠標(biāo)左鍵,就能直接跳轉(zhuǎn)到函數(shù)中。后退一步的快捷鍵是ctrl+alt+p 。
??如果想要使用快捷鍵的話,可以在菜單欄選擇Tool—options
??在打開的設(shè)置界面中選擇Key Bindings,在右邊區(qū)域中就可以查看和設(shè)置快捷鍵。
??查看函數(shù)的時(shí)候,在函數(shù)開始位置的大括號(hào)處雙擊鼠標(biāo)左鍵,就會(huì)自動(dòng)選中函數(shù)所包含的代碼塊。
??將鼠標(biāo)放在函數(shù)名上面時(shí),會(huì)顯示函數(shù)的參數(shù)和返回值。同樣將鼠標(biāo)放在宏定義的值上時(shí),會(huì)顯示宏定義的值。
??這個(gè)軟件還有很多強(qiáng)大的功能,在這里只是粗略的介紹了一下,其他功能大家在使用的過(guò)程中自己慢慢探索。
-
軟件
+關(guān)注
關(guān)注
69文章
4701瀏覽量
87088 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4283瀏覽量
62325 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68236
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論