Keil調試具體教程學習
目錄
???????Keil調試具體教程學習
常用功能總結
(2)目標設置(Target)
①設置晶振頻率
②跨模塊優化選項
③微庫選項
(3)輸出設置(Output)
①輸出文件路徑和輸入文件名稱
②調試信息——Debug Infomation
③生成.Hex可執行文件——Create HEX File
④瀏覽信息——Browse Infomation
⑤生成.Lib封裝庫文件——Create Library
⑥生成.bat編譯執行腳本——Create Batch File
(4)生成列表設置(Listing)
紅框中:生成Map文件
(5)用戶選項(User)
(6)C/C++設置(C/C++)
①預處理符號——Preprocessor Symbols
②語言/代碼規則設置
(9)調試設置配置(Debug)
①在線仿真
②離線仿真
Keil調試具體教程學習
常用功能總結
(2)目標設置(Target)
①設置晶振頻率
????????在Xtal(MHz)后面可以填寫當前使用的開發板上芯片系統使用的晶振頻率,一般STM32開發板上的晶振都是8Mhz。這個只會在仿真調試中使用,如果直接用 ST-Link仿真器在開發板上在線調試,這個可以不用管。
②跨模塊優化選項
????????勾選 "Use Cross-Module Optimization" 選擇跨模塊優化,此選項可在編譯鏈接后對文件鏈接再進一步進行優化,從而減少一些開銷。選擇此功能時,可能會導致編譯時間變長,但同樣的可以使得編譯后所使用的空間減少,但一般不勾選。
③微庫選項
????????勾選 "Use MicroLIB" 可選擇使用標準缺省庫,勾選這個會導致很多庫函數用不了,但換來的是節省了大量的空間。這個跟串口使用 printf 函數有關聯,但一般不勾選。
(3)輸出設置(Output)
①輸出文件路徑和輸入文件名稱
????????在 "Select Folder for Objects" 里可以設置輸出文件的路徑,一般保存在我們創建的OBJ文件夾下;在 "Name of Executable" 后面可以設置輸出的文件名。這個輸出文件路徑和文件名也是Keil工程燒錄和調試獲取文件的依據。
????????比如這里輸出路徑設置為 /OBJ,文件名為Template,那燒錄時,Keil會去查找當前工程路徑下 /OBJ 路徑下是否存在 Template.axf 這個文件,有就燒錄,沒有就報錯。如果要使用.Hex文件燒錄,則文件名這里填寫TestPro.Hex。
????????如果使用 ST-Link 仿真器下載調試,若勾選 Create HEX File ,點擊Download默認燒錄的是.Hex文件,無法進入在線調試;若不勾選 Create HEX File ,點擊Download燒錄的是.axf文件,是可以進入在線調試。
注:調試只能使用.axf文件,因為.Hex文件不帶調試信息,另外若調試結束,點擊關閉調試時會出現直接關閉工程文件,是因為你的工程文件包含中文,都改成英文就不會出現此問題。
②調試信息——Debug Infomation
????????勾選 "Debug Infomation" 可以選擇是否生成調試信息,注意去掉此勾選項時,無法打斷點調試。一般勾選。
③生成.Hex可執行文件——Create HEX File
????????勾選 "Create HEX File" 即可在編譯后生成.hex文件。根據上述自己的需求,點擊是否勾選。
④瀏覽信息——Browse Infomation
????????勾選 "Browse Infomation" 可以選擇是否生成瀏覽信息,有這個瀏覽信息時,可以在Keil里索引函數或變量的定義,調用等,沒有這個信息就無法把這些信息關聯起來。如果不用Keil作為代碼編輯器的小伙伴,去掉這個勾選項,可以減少編譯的時間。一般勾選。
⑤生成.Lib封裝庫文件——Create Library
????????當需要封裝模塊或打包 SDK 包時,可以勾選 "Create Library" 這個選項,該選項與"Create Executable"互斥,選擇生成.lib文件而不是完整的可執行.axf文件。這種一般是用于提供二次開發的軟件包使用。一般不勾選。
⑥生成.bat編譯執行腳本——Create Batch File
????????勾選 "Create Batch File" 即可在編譯后生成.bat的編譯執行腳本,即可以不用打開Keil工程,只需要執行編譯執行腳本即可編譯工程軟件。
(4)生成列表設置(Listing)
紅框中:生成Map文件
- Linker Listing: .\Listings\TestPro.map:主要是用來生成代碼詳細信息的map文件,用于后面的代碼分析。這里面有選項建議全部勾選上。
- Memory Map:包含一個內存映射,其中包含鏡像中每個加載區,執行區和輸入節的地址和大小,包括調試和鏈接器生成的輸入節。
- Callgraph:以HTML格式創建函數的靜態調用圖文件。調用圖給出了鏡像中所有函數的定義和參考信息。
- Symbols:列出本地,全局和鏈接器生成的符號以及符號值。
- Cross Reference:列出輸入節之間的所有交叉引用。
- Size Info:給出鏡像中每個輸入對象和庫成員的代碼和數據(RO數據,RW數據,ZI數據和調試數據)大小的列表。
- Totals Info:提供輸入對象和庫的代碼和數據(RO數據,RW數據,ZI數據和調試數據)大小的總和。
- Unused Sections Info:列出從鏡像中刪除的所有未使用的部分。
- Veneers Info:提供鏈接器生成的Thumb/ARM膠合代碼的詳細信息。
????????Map文件主要用于查看你的代碼所占空間的大小,如果你用到芯片內部的Flash的話,就需要查看你從哪里開始擦寫Flash。
(5)用戶選項(User)
Beep When Complete:編譯完成發出聲音。勾選時在編譯完成時會響一下。
(6)C/C++設置(C/C++)
①預處理符號——Preprocessor Symbols
Define:用于做一些工程全局宏定義
注:在這里修改宏定義時,需要 全編譯 才可生效,局部編譯是不生效的
②語言/代碼規則設置
Optimization:優化等級,這個會比較常用,當項目工程較大,對芯片空間比較吃緊時,可以考慮提升優化等級。ST的芯片這里有0~3,4個等級可選。
-O0應用最小優化 | 大多數優化都被關閉,生成的代碼具有最佳的調試視圖。 |
-O1應用受限優化 | 例如,刪除未使用的內聯函數和未使用的靜態函數。在這個優化級別,編譯器還應用自動優化,例如刪除冗余代碼和重新排序指令以避免互鎖情況。生成的代碼經過合理優化,具有良好的調試視圖。 |
-O2應用高優化(這是默認設置) | 在此級別應用的優化利用了ARM對處理器體系結構的深入了解,利用給定目標的特定于處理器的行為。它生成優化良好的代碼,但有限調試視圖。 |
-O3應用最積極的優化 | 優化符合用戶的-Ospace / -Otime選擇。默認情況下,多文件編譯時啟用,這會導致更長的編譯時間,但會提供最高級別的優化。 |
? ? ? ? 目前就使用經驗來看,優化等級2節省的空間最多,具體原理還沒去細究。
注:提升優化等級后,對代碼的規范嚴格度提升,調試的友好程度會降低,請適當使用。
One ELF Section per Function:優化每一段函數ELF段(建議都勾選);每個函數都會產生一個ELF段,勾選該功能允許優化每個ELF,可以減少潛在的共享地址、數據和函數之間的字符串;直白說就是可以減少代碼量ROM的大小(內存RAM不會減少),一般勾選。
Strict ANSI C:標準(嚴格)的ANSI C;即編譯時嚴格按照標準的ANSI C進行檢查。為了養成良好的編程習慣,寫出更具移植性的代碼,建議勾選。
Warnings(建議All Warnings):No Warning:不會有警告提示和輸出;All Warnings:所有警告提示和輸出。建議選All Warnings,很多告警都不是空穴來風,檢查下好點。
C99 Mode(看情況選擇):C99模式,勾選選擇啟用C99標準,如不勾選,則按C89標準來。為了高移植性,不建議勾選。
(9)調試設置配置(Debug)
通過單選 "Use Simulator" 和 "Use XXX" 選擇是用模擬仿真還是在線仿真?
①在線仿真
Use ST-Link Debugger:選擇燒錄器類型,根據自己手頭的燒錄器,選擇對應的品牌
Load Application at Startup:啟動位置設置,從啟動文件開始加載。不勾選時,在進入調試時,不會重新從啟動開始執行,但不勾選時,需要手動添加 .ini 文件,把 .axf 的調試信息放到 Keil 里,不然進入調試時無法打斷點,也無法追蹤到當前程序位置。這點在網上查 “如何不復位進入調試”很多會提到這個勾選項,但很少有提及這個.ini的事情,有也是一帶而過。
Initlalization File:初始化文件,承接上文,只要新建一個XXX.ini文件(文件名隨意),點擊…按鈕,添加該文件,點旁邊的 "Edit" 按鈕,在文件中添加?“LOAD %L INCREMENTAL”?這一句即可。
Run to main():跑進main函數,進入調試后,會在main里停止,相當于是在main的第一行打了第一個斷點。如果不勾選時,一進入調試就全速跑。
Restore Debug Session Settings:復位調試會話設置,使用上一次調試過程對Breakpoints,Watchpoints,Memory Display和Toolbox(如果這些項被選中的話)。
- Breakpoints:斷點
- Watch Windows:變量調試窗口
- Memory Display:查看內存的窗口
- Toolbox:工具欄
- System Viewer:系統視圖
Driver DLL: 驅動動態庫文件,后面Parameter是其對應參數。
Dialog DLL:會話框動態庫文件,后面Parameter是其對應參數。
Parameter 均為:-pSTM32F103ZE,用于設置支持 STM32F103ZE 的軟硬件仿真(即可以通過 Peripherals 選擇對應外設的對話框觀察仿真結果)。最后點擊 OK,完成設置。
這些是仿真的時候需要用到的動態庫,一般不用修改,使用默認值就行,這些動態庫在Keil的安裝路徑下了可以找得到。
點擊進入Settings——Trace追蹤選項欄:
Core Clock:核心時鐘頻率。設置跟當前板子相同的時鐘頻率,可以在調試時按實際運行時間進行追蹤調試。或者在設置晶振頻率處 Xtal(MHz)輸入與開發板上的晶振相同的頻率。否則調試的時間是不對的。
Flash Download下載選項欄:
1.下載動作設置(Download Function)
Erase Full Chip:擦除整片
Erase Sectors:擦除部分
Do not Erase:不擦除
????????勾選Erase Full Chip時,每次下載時,都會對整片Flash進行擦除操作。勾選Erase Sectors時,下載時只會擦除使用到的扇區。勾選Do not Erase時,則下載時不擦除原本代碼。
Program:燒錄
Verify:校驗
Reset and Run:復位并運行
????????勾選Program時,下載時才會把代碼寫入Flash,否則不寫入。勾選Verify時,則在燒錄代碼后,對代碼進行校驗。某些場合下不能檢驗,比如代碼段跟數據段分開下載,代碼里不包含數據部分,而工程里配置的代碼段又包含數據段時,此時如果進行校驗,可能會因為數據內容不一致導致校驗失敗。勾選Reset and Run時,則在下載完成后立即復位運行代碼,不勾選時則需要手動復位運行。
2.燒錄算法(RAM for Algorithm)
????????RAM for Algorithm:給燒錄算法的 RAM 空間,Start 和 Size 分別設置對應 Ram 空間的起始地址和大小,這個一般選擇完芯片后按默認就行,不用修改,如果有需要直接燒寫的片外Flash的,可能需要自己寫燒寫算法的,此時就需要關注這個Ram空間是否容得下自己編寫的燒錄算法大小,需要做適當的調整。?
3.Programming Algorithm
????????Programming Algorithm:燒錄算法選擇,一般選擇完芯片后,這里都會自動選擇對應的燒錄算法,如果不顯示則需要手動添加,不然會導致燒錄失敗。如果是使用國產芯片,也需要手動添加燒錄算法。添加方式很簡單,把對應的算法文件(后綴是FLM)放到Keil安裝根目錄Keil_v5/ARM/Flash路徑下,點Add按鈕,選擇對應的文件即可。
????????如果選擇好芯片型號,這里自動會更新與之相匹配的燒錄算法,比如芯片選擇STM32F103ZET6這里有512k的選擇,若是選擇STM32F103C8T6這里會有128K的選擇,該文件是在Keil安裝目錄底下找不到的,都在芯片包里。
②離線仿真
????????基本設置跟在線是一樣的,多了一個 "Limit Speed to Real-Time" 的選項,意思是把速度限制到實際時間。但Keil怎么知道實際速度是怎么樣的呢?所以這里還需要設置一個運行頻率,即前文說到,在 Target 里有個頻率設置。勾選此選項后,在離線仿真時,代碼執行速度就是按設定的運行頻率來跑,接近實際板子的速度。如果不勾選,那就直接起飛了(按電腦頻率來跑,有多快跑多快)。