vscode + cmake + ninja+ gcc 搭建MCU開發環境
文章目錄
- vscode + cmake + ninja+ gcc 搭建MCU開發環境
- 1. 前言
- 2. 工具安裝及介紹
- 2.1 gcc
- 2.1.1 gcc 介紹
- 2.1.2 gcc 下載及安裝
- 2.2 ninja
- 2.2.1 ninja 介紹
- 2.2 ninja 安裝
- 2.3 cmake
- 2.3.1 cmake 介紹
- 2.3.2 cmake 安裝
- 2.4 VScode
- 3. 上手體驗
- 4. 總結
1. 前言
接觸過 MCU 開發的同學基本上對于 Keil、IAR 這一類的集成IDE 軟件并不陌生。
使用這類軟件好處當然顯而易見:快速上手,一鍵編譯,一鍵下載,一鍵仿真運行等等,大家只需將注意力焦注于如何編寫好用且優雅的功能代碼即可,至于代碼是如何編譯,如何生成bin文件完全不用關系。
那么使用這類軟件有什么壞處嗎?為什么需要去研究另外一些編譯方式呢?直接用不香嗎?這樣做肯定是有原因的!使用上述IDE存在如下問題:
-
正版需要License!盡管網上破解教程一大把,破解也很簡單,甚至清楚的人都知道,這個破解軟件大概率還是官方提供的~,因此個人使用沒有問題,但是如果你是公司使用,公司小規模的時候沒人管你,等你業務做大了,公司體量做大了,就開始有人來查水表了,畢竟這個時候由于項目周期、進度等等一系列因素,臨時換炮肯定來不及,那購買License的概率就大幅提高了
-
不具備跨平臺屬性,此類 IDE 基本都是只有 windows 版本,但是作為嵌入式開發的,又有幾個人能避免 linux 這個開發環境的? 類似 CI 這種通常部署在 linux 環境上,不可避免代碼要在 linux 上能編起來,甚至能在 linux 上直接開發
-
“效率較低",當然這需要打一個雙引號,因為這是相對的,開發軟件發展至今,傳統的這種 IDE 相對于近幾年發展出來的主力,類似于VScode 這類開發軟件,傳統IDE界面過于樸素,復雜代碼跳轉等都不是很方便,且Vscode 支持大量插件,甚至AI輔助編碼,開發的時候該選哪個不用多說了
那么本文將詳細描述如何采用 vscode + cmake + ninja + gcc 搭建 MCU 的開發環境,學習一下另外一種開發 MCU 的新方式!
2. 工具安裝及介紹
2.1 gcc
2.1.1 gcc 介紹
準確來說應該是 gcc-arm-none-eabi
。
使用 keil
的時候,keil
是 arm
公司開發的一款集成上位機圖形化編輯軟件,點擊某些按鈕之后,其底下也就是執行對應的指令,調用相關編譯器進行編譯罷了,而 keil 調用的編譯器叫做 armcc
,這是 arm 自家開發的,不開源,因此需要征收 license
費用。gcc
和 armcc
一樣是一種編譯器,干同樣的是,但是 gcc
開源,因此可以免費使用。
gcc
是一種編譯器,主要用來編譯,比如 linux
系統也是使用 gcc
進行編譯。gcc
會根據不同的處理器架構有不同的 gcc
版本,我們需要根據可執行程序執行所在的cpu
架構平臺選擇對應版本的 gcc
。
舉個例子:在 linux 上編譯出用于在 linux 上執行的可執行程序使用 gcc 版本 與 在 linux 上編譯出用于在 mcu 上執行的可執行程序的 gcc 版本就不一樣,不同的 gcc 版本對應可執行程序所運行的 cpu 處理器架構的不同。
上述講到的是,我們需要根據可執行程序(即編譯產物)執行所在的cpu平臺架構選擇對應版本的 gcc,但是在 我們的電腦上可以下載每一個版本的 gcc ,并進行編譯,只是編譯出來的產物需要放到對應的cpu架構平臺才能執行而已!【補充:當然需要根據電腦的系統(Windows or Linux or MAC)選擇下載對應系統版本的】
同樣的,對于 mcu 這類處理器不具備運行 gcc 進行編譯的能力,因此需要借助電腦先對源碼執行編譯,生產可以在 mcu 平臺執行的可執行程序,也即 bin 文件,之后再將此 bin 文件下載傳輸到 mcu 內運行。因此對應可以編譯出在mcu平臺運行的可執行程序的編譯器叫做 交叉編譯器 ,此編譯器在windows 或 Linux 或 Mac 上運行,進行代碼編譯,產物在 mcu 上運行。
2.1.2 gcc 下載及安裝
gcc 可從官網上直接下載:gcc-arm-none-eabi-10.3-2021.10-win32.zip
選擇自己對應的系統版本的 gcc 即可,像windows 如果下載的是可執行程序,直接安裝就行,如果下載的是 zip,解壓后將解壓之后的 bin 文件夾目錄下的路徑【注意是arm-none-eabi-gcc所在的路徑】 添加到系統環境變量,linux、mac同理,關于如何添加環境變量可自行上網查閱。
安裝成功之后,重新打開一個命令行窗口或 bash,執行 arm-none-eabi-gcc --version
可以查看到對應版本則說明安裝成功。
?? 不同 gcc 版本編譯出來的bin文件大小和內容會有些許差異,因此多人協同開發時,建議采用同一版本!??
2.2 ninja
2.2.1 ninja 介紹
ninja 是 google 公司開發的一款構建系統,一款小巧的專注于編譯速度而生從構建系統!
為什么 Google 要開發這么個東西呢?因為 make 太慢了!
對于小型系統體驗不到,當工程比較大的時候,你執行下 make
指令,重新構建+編譯等個半小時,你能受得了?因此 Google 的大佬開發了 ninja,它功能和 make 一樣,但是比 make 快,它的優點就是:快!
2.2 ninja 安裝
ninja 在 github 上直接開源,下載地址:ninja-github
根據自己的電腦系統選擇對應的平臺的壓縮包即可。
下載完成之后解壓到某個目錄,之后將對應目錄添加到環境變量,同樣怎么添加環境變量自行上網查閱。
環境變量添加好之后,重新打開一個新的命令行終端或者bash,執行 ninja --version
查看是否安裝成功。
2.3 cmake
2.3.1 cmake 介紹
make
工具需要依賴 makefile
文件進行構建,而 ninja
同樣也依賴 build.ninja
文件。
makefile 的語法已經比較晦澀了,感興趣可以看我之前寫過的一篇博文 《Makefile入門到精通》,雖然晦澀難懂,但是多啃啃還是能啃下去,而 ninja
語法那就是天書,人家設計的時候可能也本沒想著讓大家去自行書寫吧,反正我是沒寫過~
聰明的大佬們總會想辦法給自己偷懶減負,因此寫個軟件直接生成這復雜的 build.ninja 描述文件不就好了,語法再弄的簡單點,容易學一點,剩下的就剩解bug了~,因此就是 cmake 的主場了。
cmake
依賴于 CMakeLists.txt
文件,簡單的功能比較好懂的,它不僅能直接生成 makefile,之后調用make進行編譯;也能生成 build.ninja 之后調用 ninja 進行編譯。且 cmake 工具同樣具備跨平臺屬性!
具體cmake的語法在這就不多敘述了,感興趣可以自行上網查閱,嗯,你必須感興趣的…
2.3.2 cmake 安裝
直接去官網下載最新版即可:cmake
同樣根據自己系統進行選擇,下載源文件和或者安裝鏡像都行,同樣的,下載安裝鏡像的時候勾選自動添加到環境變量;下載源文件,解壓之后記得添加對應目錄到環境變量!
安裝好之后,重新打開一個命令行窗口或bash窗口,執行 cmake --version
確認是否ok
2.4 VScode
這個太有名氣了吧,自行上網安裝就好了!新手的話記得上網搜下 Vscode 推薦的插件,沒有插件的 vscode 就是毛胚房,有了插件你可以是豪宅~
3. 上手體驗
至此,工具都裝好了,怎么也得來試試好不好用感受下吧!那么直接上手一種最為快速的體驗感受感受吧!
最為快速的那還的是 stm32 搭配 cubemx 了,過氣的 stm32 依然是最佳的選擇,下載安裝 stm32 CubeMX,根據電腦系統自行選擇了!
畢竟 cubemx 可以直接生成 cmake 版本工程,暫時可以免去寫 cmake 文件了!
tips:最新版本強制登陸了,有點離譜~
安裝好之后,隨便選擇一款 MCU,簡單配個時鐘,配個SWD調試口就差不多了,當然手上有開發板那就根據開發板的來了!
生成工程的時候選擇使用 cmake!!!
之后使用 vscode 打開生成好的工程文件夾,如下圖所示:
在 vscode 內打開終端,推薦 git bash 終端,linux風格比較好用!
-
執行
cmake -B out -GNinja
調用 cmake 生成 ninja 構建系統-B
:指定生成目錄為當前目錄下的 out 目錄-GNinja
:指定生成 ninja 版本構建系統
-
執行
ninja -C out
進行編譯-C
: 指定編譯執行目錄
-
對于最新版本的 CubeMx 生成的 cmake 版本工程,使用老版本 gcc 編譯的時候會報錯:
non constant or forward reference address expression for section .ARM.extab
- 這是由于 gcc 版本太老了,cubemx匹配的 gcc 太新了導致,修改下
ld
鏈接腳本文件,去掉所有的(READONLY)
字段即可
- 這是由于 gcc 版本太老了,cubemx匹配的 gcc 太新了導致,修改下
-
編譯完成之后,在 out 目錄下可以看到
test.elf
文件,此文件即為編譯產物,如果生成文件需要.bin
或者.hex
文件,需要修改下CMakeLists.txt
,以后再補充吧,axf文件也可以使用 ozone 這類軟件下載了,或者調用arm-none-eabi-gcc
自行生成一下也可以,命令自行AI~
4. 總結
以上便是使用 vscode + cmake + ninja + gcc 搭建完整的 mcu 開發環境的全部步驟了,體驗完應該可以開始淘汰傳統的 IDE 了,當然對于如何完善cmake,以及生成的 bin 文件后續怎么燒錄,怎么仿真這些本文還未涉及,后續再補充啦,關注專欄后續不斷更新!