日韩中文在线观看-欧美性综合-伊人视频在线观看-亚洲免费在线视频观看-国产偷人视频-人妻丰满熟妇岳av无码区hd-国产一级淫片a视频免费观看-国产精品交换-国产精品1区2区3区4区-美女日批视频在线观看-欧美日韩一区二区三区自拍

【ARM】KEIL命令行的介紹與使用

一、文檔背景

Keil MDK在實際開發過程中,除了 GUI 操作,Keil 還支持命令行方式執行各種任務,如編譯、鏈接、燒錄、調試和工程管理等。命令行方式的優勢在于能夠與自動化構建系統、腳本工具(如 Batch、PowerShell、CMake)或 CI/CD(如 Jenkins、GitHub Actions)集成,實現無人值守的高效開發流程。

此外,通過Keil 命令行也能在資源受限或遠程開發環境下(如Docker中)提供更靈活的控制方式。通過本文,可以掌握如何利用 Keil 命令行提高開發效率,實現基本的自動化構建和調試流程。如圖1所示。

圖1

亦或者,可以搭配第三方軟件工具,比如:VS Code進行代碼的編寫,然后調試時,在VS Code的終端輸入調試命令,來快速打開原生的KEIL進行調試,詳情請見下方GIF_0。(注意:使用命令行調試,調試退出后,軟件也會自動退出。)



二、KEIL的命令行使用

(1)、Keil MDK 的命令行工具通過 UV4.exe 提供,支持多種命令和選項,但是要想在CMD終端窗口中運行Keil的命令行語句,首先需要我們為UV4.exe這個可執行程序提前設置好環境變量,否則我們將無法在任意目錄下使用Keil的命令行語句(不添加環境變量,就只可以在keil安裝目錄中的UV4文件夾下使用這些命令行語句),設置并添加環境變量的方法如圖2所示:


圖2


(2)接下來,是命令行的基本命令格式,如下代碼塊所示:

這個命令格式一共分為了4部分,逐個解析如下:

①UV4:在這里是命令的標識符;

②command:是后面表中列出的命令之一。(如 -b 構建、-c 清理)如果未指定命令,uVision 將以交互式構建模式(這里交互式構建模式的意思其實就是直接打開keil這個軟件)打開項目文件。

③projectfile:是 uVision 項目文件的名稱,帶有 .uvprojx 擴展名;多項目文件的擴展名為 .uvmpw。如果未指定項目文件,uVision 將打開最近的項目。

④options:是用于指定目標名稱或輸出文件的附加參數。(如 -t 指定目標、-o 輸出日志,后面也有一個對應的命令表)。


(3)command參數可以使用的命令選項:

命令描述
-b功能:編譯和構建當前目標(target),構建完成后自動退出。
應用場景:可用于自動化構建流程。例如,配合 CI/CD 工具(如 Jenkins)在每次代碼提交后進行編譯驗證。
示例:UV4 -b PROJECT1.uvprojx
-c功能:清除當前目標的構建產物。(其實就是清理Objects和Listings文件夾)
應用場景:清理舊文件,確保重新構建時沒有殘留文件的干擾。
示例:UV4 -c PROJECT1.uvprojx
-cr功能:清理并重新構建
應用場景:清理完舊文件后,迅速進行新的構建用以調試等
示例:UV4 -cr PROJECT1.uvprojx
-d功能:在調試模式下啟動μVision。(調試還是要用IDE界面)
應用場景:將此命令與調試初始化文件一起使用以執行自動化測試過程。使用EXIT命令退出調試會話 。
示例:UV4 -d PROJECT1.uvprojx
-f功能:下載程序到 Flash,并在下載完成后退出。
應用場景:生產線中的批量燒錄,或開發中的快速固件燒寫。
示例:UV4 -f PROJECT1.uvprojx
-r功能:僅重新編譯,并在構建過程完成后退出。
應用場景:修改某一模塊后,用以驗證程序是否有誤
示例:UV4 -r PROJECT1.uvprojx
-5功能:將μVision 4 uvproj文件轉換為μVision 5 uvprojx文件。該命令的唯一有效選項是-l,用于寫入日志文件。
應用場景:轉換舊項目到新格式,僅此而已。
示例:UV4 -5 myoldproject.uvproj -l log.txt
如果轉換失敗,將返回錯誤代碼20。
-et功能:導出目標配置,將項目目標導出到<projectName>.<targetName>.cprj文件。使用選項-t targetname可以指定要導出的目標,否則將使用當前目標。請注意, 帶有選項-t的-et命令不會更改項目中的當前目標配置。該命令不支持其他選項。
應用場景:方便、快速的去移植目標配置給其他的項目。比如跨團隊共享配置,或作為備份模板。
示例:UV4 -et myProject.uvprojx
將myProject.uvprojx中的當前目標導出到myProject.<targetName>.cprj文件。
示例:UV4 -et myProject.uvprojx -t “my-target”
將myProject.uvprojx中的目標“ my-target”導出到myProject.my-target.cprj文件。
(注意:這個選項,沒有被成功調用)
-ep功能:將所有項目目標導出到相應的 <projectName>.<targetName>.cprj文件。
示例:UV4 -ep myProject.uvprojx
(注意:這個選項,沒有被成功調用)
-X
功能:在當前目標的輸出文件夾中,生成預處理符號文件co-arm_<target_name
>.h/hpp 。

示例:UV4 -X myProject.uvprojx
UV4 -X myProject.uvprojx -T “Target 1”
請注意,生成過程可能需要一段時間。如果要查看進度,請使用uvision.com而不是uv4.exe。
(注意:這個選項,沒有被成功調用)
-X1功能:在所有目標的輸出文件夾中,生成預處理符號文件
co-arm_<target_name>.h/hpp 。
示例:UV4 -X1 myProject.uvprojx
請注意,生成過程可能需要一段時間。如果要查看進度,請使用uvision.com而不是uv4.exe。
(注意:這個選項,沒有被成功調用)


(4)、option參數可以使用的命令選項:


命令描述
-j0功能:隱藏 μVision GUI。消息將被抑制。此選項適用于批處理測試。
應用場景:腳本化操作,避免彈窗干擾。
示例:UV4 -j0 PROJECT1.uvprojx
-i import_file.xml功能:使用 XML 文件中提供的數據創建新項目或更新現有項目。XML 文件需符合位于 ..UV4 目錄下的 project_import.xsd 模式。使用此選項時,GUI 將自動隱藏。
示例:
UV4 MyProject.uvprojx -i MyImport.xml
(注意:這個選項,暫未經過嘗試)
-l logfile功能:將命令的輸出保存到指定的日志文件中。
應用場景:方便隨時查看命令的輸出。
示例:
UV4 -5 myoldproject.uvproj -l log.txt
如果轉換失敗,將返回錯誤代碼 20。
-n device_name功能:使用指定的 device_name 創建新項目。使用此選項時,GUI 將自動隱藏。
應用場景:快速創建指定芯片的項目。
示例:
UV4 MyProject.uvprojx -n Device1234
UV4 MyProject.uvprojx -i MyImport.xml -n Device5678 -t FlashDebug
-np device_name功能:如果項目不存在,則使用指定的 device_name 創建新項目。如果項目已經存在,則更新所有目標的設備選擇為指定的 device_name。使用此選項時,GUI 將自動隱藏。
應用場景:快速創建指定芯片的項目,或快速更新現有目標的芯片型號。
示例:
UV4 MyProject.uvprojx -np Device1234
-o outputfile功能:指定輸出日志文件。
應用場景:記錄警告和錯誤,或者構建歷史。
示例:
UV4 -r PROJECT1.uvprojx -o "listmake.prn"
UV4 -r "C:MyProjectsARMExample-mpw.uvmpw" -o "c:templog.txt"
-q功能:重建多項目文件中所選的目標。確保每個目標有獨立的對象輸出文件夾。可通過菜單 Projects - Options for Target - Output - Select Folder for Objects 進行設置。
示例:
UV4 -r "C:MyProjectsARMExample-mpw.uvmpwx" -q -o "c:templog.txt"
(注意:這個選項,暫未經過嘗試)
-s port功能:啟用 UV Socket 端口,并將其分配為指定的端口值。
示例:
UV4 MyProject.uvprojx -s 4328
(注意:這個選項,暫未經過嘗試)
-t targetname功能: 指定目標的名稱。如果未指定,則使用上一次已知的目標。
應用場景:多目標工程中選擇特定構建。
示例:
UV4 -r PROJECT1.uvprojx -t "MCB2100 Board"
-x啟用 DDE 模式并返回完整的命令輸出。此選項僅能與 -d 命令一起使用。
(注意:這個選項,暫未經過嘗試)
-y啟用 DDE 模式并僅返回命令確認。此選項僅能與 -d 命令一起使用。
(注意:這個選項,暫未經過嘗試)
-z功能:重建項目或多項目文件的所有目標。
應用場景:確保每個目標有獨立的對象輸出文件夾。可通過菜單 Projects - Options for Target - Output - Select Folder for Objects 進行設置。
示例:
UV4 -b PROJECT1.uvproj -z -o "c:templog.txt"
UV4 -b "C:MyProjectsARMExample-mpw.uvmpwx" -q -z -o "c:templog.txt"
-sg功能:禁用來自 uvguix 文件的用戶 GUI 布局。在整個會話期間將使用默認的編輯和調試模式窗口布局,并在關閉項目時不會將布局修改存儲到 uvguix.<user> 文件中。
應用場景:適用于以批處理模式運行 μVision 時,避免對 uvguix 文件的非預期修改。
示例:
UV4 -sg myProject.uvproj

(5)

實戰示例1:

UV4 -b "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx"

-b構建項目,如果項目里的c文件等沒有改動,生成文件也不會改動。(注意,會彈一下keil軟件然后立馬關閉)如GIF_1所示:(因為沒有需要構建的文件,所以很快,一閃而過)


實戰示例2:

UV4 -r "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx"

-r 重構項目,所有的文件都會被重新構建一遍。(注意,會彈一下keil軟件然后立馬關閉)如GIF_2所示:(因為需要重新構建,所以會顯示一堆正在編譯的文件,現象較GIF_1更明顯)

實戰示例3:

UV4 -r "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx" -o "C:newtest.txt"

-r 重構項目,并且-o把構建輸出的結果顯示在txt文件中。(注意,會彈一下keil軟件然后立馬關閉)如GIF_3所示:(重新構建后,將構建窗口中的內容都輸出到文本中進行記錄,現象較GIF_2更明顯)



實戰示例4:

UV4 -j0 -sg -r "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx" -o "C:newtest.txt"

-j0隱藏μVision GUI界面,-r重構項目,并且不會彈keil軟件(加不加-sg其實都沒事,因為根本就沒打開IDE),并且-o把構建輸出的結果顯示在txt文件中。如GIF_4所示:(重新構建后,將構建窗口中的內容都輸出到文本中進行記錄,且相比于GIF_3,不會再彈出μVision GUI界面,效果會更好一些)


實戰示例5:

UV4 -d "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx"

-d是調試,其實這里有些失去了命令行的意義,因為終究還是打開了μVision GUI界面,但如果場景是搭配VS Code,那么確實可以在VS Code調一下該命令,借助原生IDE對內核進行調試,調試退出后原生IDE會自動關閉,也很省心,其實也可以。如GIF_5所示:


實戰示例6:

UV4 -f "E:18、文檔預研新建文件夾STM32_ProjectTest0102.uvprojx"

-f是燒錄,預先配置好軟件內的燒錄選項,(或者搭配外部的批量燒錄工具,進行固件的批量燒錄);如GIF_6所示:



三、討論分析

問:都有什么應用場景?

答:

①自動化編譯與構建:在團隊開發中,需要頻繁編譯代碼并驗證是否通過。這時,我們就可以通過命令行工具,可以將構建過程集成到腳本中。

②批量處理與多項目管理:需要同時清理或構建多個項目或目標,如:同時編譯 Debug 和 Release 版本,或者一次生成10個、甚至100個版本的固件(比如Flash燒寫算法,就可以使用該命令行,一次性生成各個Flash大小的FLM文件,不必再逐個、按Flash大小、去生成)。

③在服務器上的Docker中使用,即使沒有GUI界面,也可以依靠此命令行,完成工程的編譯,緩解本地資源。

④批量燒錄,在生產線上結合硬件,通過命令行批量燒錄固件。


四、結論

Keil 命令行工具的核心價值,我覺得其實在于自動化和可集成性,如:①對于繁雜的大型項目,這無疑能提升效率,減少重復手動操作;②進行規模化處理,比如批量編譯、測試或部署;③跨平臺協作,在服務器或無 GUI 環境中運行。

掌握這些場景后,我們可以根據實際需求,再進而去設計更高效的開發流程,甚至探索與其他工具(如靜態分析工具、硬件測試框架)的深度集成,都是有一定可行性的路線。

主站蜘蛛池模板: 化隆| 内江市| 贵德县| 阳高县| 定西市| 永吉县| 东兴市| 同德县| 衡阳市| 稻城县| 威信县| 盱眙县| 光山县| 祁阳县| 金塔县| 达尔| 武乡县| 资溪县| 梅州市| 文山县| 江达县| 富宁县| 府谷县| 班戈县| 息烽县| 白玉县| 呼伦贝尔市| 吐鲁番市| 曲水县| 黔西县| 六枝特区| 报价| 蒙城县| 永德县| 浏阳市| 淮北市| 玛多县| 广河县| 北川| 双桥区| 上蔡县|