1、 問題場景
在研發時,經常會遇到:因為文件中的代碼過長,比如一個.C文件有10萬行代碼(一個文件10萬行代碼是一個很普遍的現象),導致我們在查找某一個自己也記不清名字的功能函數時,時常要在這10萬行代碼里查找,或者在幾千行的頭文件里查找聲明,非常的麻煩和不方便。
還有些情況可能是:
①:編寫或者調試項目時,跨文件的導航,如何做到更快的操作?
②:項目代碼中有很多對外的參數,而且這些參數都在不同的C文件中,要查找時,如何做到快速提示?
③:程序在某個頭文件中定義了版本號,但是不確定在哪個頭文件里了,要查找時,如何做到快速提示?
④:很多工程往往要根據不同的客戶,適配了多種串口協議,怎么快速提示該工程使用的是哪種協議?
最終的解決方法如圖1和GIF_1所示:

圖1

(動圖)
2、軟硬件環境
1)、軟件版本:MDK5.40
2)、電腦環境:Windows 10
3)、外設硬件:無
3、解決方法
1)、在項目目錄中,新建一個txt文件,可以命名為:test_message.txt,如圖2所示:

圖2
2)、在test_message.txt中,輸入如圖3所示的命令,這兩句命令是用來后面做為跳轉按鈕使用的。(接下來的操作,非常建議使用Notepad++,因為可以很方便的使用他進行文件編碼格式的更改,對我們后續的操作很有幫助。)
@ECHO OFF
ECHO Blinky.c(48): test: jump to Blinky.c, line 48

圖3
3)、保存后關閉該文件,并把該文件的后綴的改為.bat,如圖4所示:

圖4
4)、將我們寫好的test_message.bat文件,添加到軟件的“用戶命令”中,如圖5所示:

圖5
5)、添加完文件以后,需要我們點擊構建或者重構,都可以。構建完成后,即可看到我們在文件中定義的內容:ECHO Blinky.c(48): test: jump to Blinky.c, line 48

圖6
6)、接著我們雙擊出現的這一行指令,即可發現,我們的代碼界面,已然跳轉到了指定的Blinky.c文件的第48行,如圖7所示,此時這一行的輸出,已經具有了按鈕的特性!

圖7
7)、到這里,我們停一下,思考下他的作用:其實他的作用已經很明顯了,在面對一個具有上百個.c和.h文件的百萬行代碼項目時,完全可以使用這個功能來①:進行重要函數入口的標記(上萬個函數肯定是難以記清楚的,挑一些重要的函數,用來幫助我們理清程序的結構和邏輯)、或者②:調試時跨文件的導航(有的代碼段需要頻繁開關斷點,這就省去了手動切換文件的麻煩,注:keil的書簽只能在同一個.c文件中導航,不可以跨文件),或者③:標記該程序的版本號、負責人、歸屬部門。所以,他的作用肯定是有的,也肯定是多方面的,依各位的需求和創新而定。
以上所述的部分功能作用,如圖8所示:

圖8
8)、接下來給該功能再完善一點,再上一步的圖中,我們發現了中文的痕跡,但是如果直接使用不做任何更改的bat文件,還是會報一堆亂碼,所以這時,需要我們在Notepad++中,更改bat文件的編碼格式,如圖9所示,更改完以后,對文件進行保存后,再回到keil中重新編譯一遍工程,即可出現正常的中文字符。

圖9
9)、然后經過對該功能的摸索,發現還有一個可以拓展的地方就是:擴展多個文件路徑的識別。
跳轉失敗的案例如圖10所示,在bat文件中,由于命令沒有加上針對system_stm32f10x.c的相對路徑,導致keil在尋找時出錯,進而無法跳轉。
這時需要將bat文件中,指向system_stm32f10x.c的相對路徑也加上,才可以正確進行雙擊跳轉,如圖11所示。
bat文件中的命令區別如圖12所示。

圖10

圖11

圖12
10)、最后,再補充一點,在利用跳轉命令時,其實冒號后面的部分,基本等同于注釋,但是這里經過我的嘗試,必須在冒號后面留一個空格,然后再根據個人需求,來選擇是否需要輸入注釋。
如圖13和圖14所示,冒號后面沒有注釋,依然也可以進行跳轉。

圖13

圖14
思考:
①:首先,bat文件的寫法,肯定不止這一種,所以也可能不止只有作為跳轉按鈕這一種作用,那么還有什么命令,是可以讓我們能提高效率的?
②:再者,在選擇bat文件的時候,如圖15,我們可以發現,其實他默認支持的文件,還有exe類型,那么是否還有哪些exe小插件,其實是我們不了解的,沒有利用上的?
③:最后,我們是否可以自己做一個exe,為keil增添更多的可能性?比如結合一些代碼掃描工具,和我們自己做的exe插件相互聯系,在build output窗口做一個靜態代碼分析儀?

圖15

首頁 > 資源中心 > FAQ
