vscode + cmake + ninja+ gcc 搭建MCU開發環境

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存在如下問題:

  1. 正版需要License!盡管網上破解教程一大把,破解也很簡單,甚至清楚的人都知道,這個破解軟件大概率還是官方提供的~,因此個人使用沒有問題,但是如果你是公司使用,公司小規模的時候沒人管你,等你業務做大了,公司體量做大了,就開始有人來查水表了,畢竟這個時候由于項目周期、進度等等一系列因素,臨時換炮肯定來不及,那購買License的概率就大幅提高了

  2. 不具備跨平臺屬性,此類 IDE 基本都是只有 windows 版本,但是作為嵌入式開發的,又有幾個人能避免 linux 這個開發環境的? 類似 CI 這種通常部署在 linux 環境上,不可避免代碼要在 linux 上能編起來,甚至能在 linux 上直接開發

  3. “效率較低",當然這需要打一個雙引號,因為這是相對的,開發軟件發展至今,傳統的這種 IDE 相對于近幾年發展出來的主力,類似于VScode 這類開發軟件,傳統IDE界面過于樸素,復雜代碼跳轉等都不是很方便,且Vscode 支持大量插件,甚至AI輔助編碼,開發的時候該選哪個不用多說了

那么本文將詳細描述如何采用 vscode + cmake + ninja + gcc 搭建 MCU 的開發環境,學習一下另外一種開發 MCU 的新方式!

2. 工具安裝及介紹

2.1 gcc

2.1.1 gcc 介紹

準確來說應該是 gcc-arm-none-eabi

使用 keil 的時候,keilarm 公司開發的一款集成上位機圖形化編輯軟件,點擊某些按鈕之后,其底下也就是執行對應的指令,調用相關編譯器進行編譯罷了,而 keil 調用的編譯器叫做 armcc,這是 arm 自家開發的,不開源,因此需要征收 license 費用。gccarmcc 一樣是一種編譯器,干同樣的是,但是 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風格比較好用!

  1. 執行 cmake -B out -GNinja 調用 cmake 生成 ninja 構建系統

    • -B:指定生成目錄為當前目錄下的 out 目錄
    • -GNinja:指定生成 ninja 版本構建系統
      在這里插入圖片描述
  2. 執行 ninja -C out 進行編譯

    • -C: 指定編譯執行目錄
      在這里插入圖片描述
  3. 對于最新版本的 CubeMx 生成的 cmake 版本工程,使用老版本 gcc 編譯的時候會報錯:non constant or forward reference address expression for section .ARM.extab

    • 這是由于 gcc 版本太老了,cubemx匹配的 gcc 太新了導致,修改下 ld 鏈接腳本文件,去掉所有的 (READONLY) 字段即可
      在這里插入圖片描述
  4. 編譯完成之后,在 out 目錄下可以看到 test.elf 文件,此文件即為編譯產物,如果生成文件需要 .bin 或者 .hex 文件,需要修改下 CMakeLists.txt,以后再補充吧,axf文件也可以使用 ozone 這類軟件下載了,或者調用 arm-none-eabi-gcc 自行生成一下也可以,命令自行AI~
    在這里插入圖片描述

4. 總結

以上便是使用 vscode + cmake + ninja + gcc 搭建完整的 mcu 開發環境的全部步驟了,體驗完應該可以開始淘汰傳統的 IDE 了,當然對于如何完善cmake,以及生成的 bin 文件后續怎么燒錄,怎么仿真這些本文還未涉及,后續再補充啦,關注專欄后續不斷更新!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83356.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83356.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83356.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

九(1). 引用作為函數參數的使用

引用作為參數使用 在 C 中,引用作為函數參數是一種高效且靈活的參數傳遞方式,它避免了拷貝開銷,同時允許函數直接操作原始數據。 以下是關于引用作為參數的詳細使用指南和最佳實踐: 1. 引用作為參數的基本用法 (1) 普通引用&…

Linux多路TTS混音播放:讓多個語音同時清晰可聽

Linux多路TTS混音播放:讓多個語音同時清晰可聽 為什么需要多路混音播放?技術原理概述第一步:配置ALSA dmix混音插件為什么需要dmix?具體配置步驟第二步:生成TTS語音文件為什么需要格式轉換?Python生成腳本第三步:實現多路同時播放播放器設計原理Python實現代碼多路同時播…

Spring AI 1.0 GA 深度解析:構建企業級AI應用的全棧實踐指南

目錄 Spring AI 1.0 核心架構解析統一接口與多模型支持檢索增強生成(RAG)全流程實戰對話記憶與工具調用進階模型評估與可觀測性體系企業級應用案例與最佳實踐未來演進與技術展望1. Spring AI 1.0 核心架構解析 1.1 技術架構演進 #mermaid-svg-ymTZMAaxOwd4OAMu {font-family…

Docker 安裝 Redis 容器

系列文章目錄 文章目錄 系列文章目錄前言1 獲取redis鏡像2 創建和部署redis容器3 查看redis是否啟動成功4 使用Redis客戶端驗證連接總結 前言 搭建環境: ubuntu22.04.05 docker redis: 7.0.10 測試環境: windows: win11 Redis測試客戶端:Ti…

學習vue3階段性復習(插槽,Pinia,生命周期)

目錄 插槽(匿名插槽,具名插槽) 插槽概述 匿名插槽 具名插槽 Pinia(統一管理,共享數據) pinia概述 安裝和使用Pinia 1 使用命令下載Pinia 2 再main.js中導入,注冊到vue框架中 3使用pinia 持久化存儲插件 1 第一步&…

嵌入式Linux 期末復習指南(上)

鑒于互聯網上針對本科目相關復習視頻及資料過少, 撰寫本篇期末復習指南用作期末復習知識點掃盲,以應對本科期末考試及格之用。 由于任課老師并透露考試范圍或任何有關試卷的相關信息,本篇指南基于教材、上機實驗報告及作者經驗編寫&#xff0…

VScode ios 模擬器安裝cocoapods

使用 Homebrew 安裝(推薦) 如果你有 Homebrew,直接用它安裝更穩定: brew install cocoapods

Python趣學篇:用Pygame打造絢爛流星雨動畫

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder😊) 專欄介紹:《Python星球日記》 目錄 一、項目簡介與效果展示二、技術棧與核…

可視化大屏通用模板Axure原型設計案例

本文將介紹一款基于Axure設計的可視化大屏通用模板,適用于城市、網絡安全、園區、交通、社區、工業、醫療、能源等多個領域。 模板概述 這款Axure可視化大屏通用模板集成了多種數據展示模塊和組件,旨在為用戶提供一個靈活、可定制的數據展示平臺。無論…

20250530-C#知識:萬物之父Object

C#知識:萬物之父Object Object類(即object)是所有類的基類,這里面的方法還是需要好好了解一下。 1、Object類 是頂級父類,其他類默認都是Object類的子類(自定義類也會默認繼承Object類)可以用O…

蘋果應用開發詳細教程(2025最新版)

蘋果應用開發詳細教程(2025最新版) 第一階段:開發環境搭建 硬件準備 Mac電腦(macOS Monterey 12或更高版本)iPhone/iPad(真機調試建議iOS 16+)軟件安裝 # 通過App Store安裝Xcode xcode-select --installXcode 15+(包含Swift 5.9編譯器)安裝CocoaPods(依賴管理工具)…

flutter項目遷移空安全

重中之重 備份好項目文件,甚至連已經加載好的flutter庫也可以備份。環境包升級 2.1 不要直接換成flutter:3.0以上的版本,這樣做既有基本的庫兼容問題,又有空安全下的語法問題(整個項目中需要增加 late、?、!的語法錯誤,一片報錯的…

架構師面試題整理

以下是從提供的HTML代碼中提取的所有class"title-txt"的文本內容,已排除重復項并按順序整理: 緩存專題 實戰解決大規模緩存擊穿導致線上數據庫壓力暴增面試常問的緩存穿透是怎么回事基于DCL機制解決突發性熱點緩存并發重建問題實戰Redis分布…

pytest 中 fixture 與類繼承交互導致的問題

文章目錄 問題分析將屬性綁定到 **類** 上使用 scopefunction 解決方法為什么有兩個不同的對象核心原因:fixture 的執行上下文scopefunction 的情況scopeclass 的情況 為什么 pytest 要這樣做?這是 pytest 的設計局限 總結 本文探討 Pytest 中 fixture 作…

uniapp+ts模擬popup彈出框(下拉框)

效果圖&#xff08;未展開的樣子&#xff09;&#xff1a; 效果圖&#xff08;展開的樣子&#xff09;&#xff1a; 子組件代碼&#xff1a; <!--* Date: 2024-04-26 14:30:00* LastEditTime: 2025-05-29 09:01:06* Description: 技術服務 --> <template><view …

中小型企業大數據平臺全棧搭建:Hive+HDFS+YARN+Hue+ZooKeeper+MySQL+Sqoop+Azkaban 保姆級配置指南

目錄 背景?一、環境規劃與依賴準備?1. 服務器規劃(3節點集群)2. 系統與依賴?3. Hadoop生態組件版本與下載路徑4. 架構圖二、Hadoop(HDFS+YARN)安裝與配置?1. 下載與解壓(所有節點)2. HDFS高可用配置3. YARN資源配置?4. 啟動Hadoop集群三、MySQL安裝與Hive元數據配置…

谷粒商城-分布式微服務項目-高級篇[三]

十五、商城業務-支付 15.1 支付寶支付 15.1.1 進入“螞蟻金服開放平臺” 支付寶開放 平臺地址&#xff1a; 支付寶開放平臺 15.1.2 下載支付寶官方 demo&#xff0c;進行配置和測試 開發者文檔&#xff1a;支付寶開放平臺文檔中心 電腦網站支付文檔&#xff1a;小程序文…

DeepSeek 賦能低空經濟:無人機智能調度的破局之道

目錄 一、引言二、DeepSeek 技術探秘2.1 DeepSeek 技術核心要點2.2 與傳統技術對比優勢 三、低空經濟無人機調度挑戰剖析3.1 飛行控制困境3.2 數據處理難題3.3 系統集成阻礙 四、DeepSeek 應用方案與成果4.1 智能調度與路徑規劃4.2 自主飛行與協同控制4.3 通信與數據鏈優化4.4 …

【Kubernetes】ubuntu20.04通過kubeadm + Docker安裝k8s

Kubernetes v1.24集群安裝配置步驟總結 一、環境準備 &#xff08;一&#xff09;系統要求 運行兼容deb/rpm的Linux操作系統&#xff08;如Ubuntu或CentOS&#xff09;的計算機&#xff0c;1臺或多臺。每臺機器內存2GB以上&#xff0c;內存不足會限制應用運行。控制平面節點…

計算機視覺NeRF

NeRF與3DGS學習 NeRF計算機視覺的問題NeRF定義神經輻射場場景表示基于輻射場的體渲染分層采樣優化神經輻射場 基礎知識初始化SFM基礎矩陣 & 本質矩陣 & 單應矩陣從已經估得的本質矩陣E&#xff0c;恢復出相機的運動R,tSVD 分解 NeRF NeRF資源 計算機視覺的問題 計算…