環(huán)境的完整指南)
無人機(jī)嵌入式智能硬件【免費(fèi)下載鏈接】inavINAV: Navigation-enabled flight control software項(xiàng)目地址https://gitcode.com/gh_mirrors/in/inav點(diǎn)擊查看免費(fèi)下載本文面向所有在 Windows 10 上參與 INAVNavigation-enabled flight control software固件開發(fā)與調(diào)試的開發(fā)者。文章以倉庫中的官方 IDE 配置指南IDE - Visual Studio Code with Windows 10為主體完整講解如何用 Visual Studio Code 與 WSL 協(xié)同完成代碼瀏覽、智能提示、一鍵編譯乃至硬件調(diào)試。讀完本文你將掌握.vscode下c_cpp_properties.json與tasks.json兩套配置文件的完整含義、CtrlShiftB快速編譯任意 INAV target 的方法以及這些配置背后的真實(shí)構(gòu)建鏈路與源碼依據(jù)。為什么選擇 VS Code WSL對(duì) Windows 10 用戶而言Visual Studio Code 是免費(fèi)且?guī)缀趿愠杀旧鲜值倪x擇。它與運(yùn)行 Ubuntu 的 WSLWindows Subsystem for Linux幾乎無縫集成可以在 Windows 側(cè)享受圖形界面同時(shí)讓編譯真正發(fā)生在 Linux 環(huán)境里從而獲得接近原生 Linux 的make/cmake/ninja工具鏈體驗(yàn)語法高亮與基于標(biāo)簽tag的符號(hào)跳轉(zhuǎn)通過 WSL Remote 擴(kuò)展實(shí)現(xiàn)的硬件調(diào)試能力OpenOCD GDB。注意INAV 的官方推薦構(gòu)建路徑是先在 WSL 里搭好編譯環(huán)境再在 Windows 側(cè)用 VS Code 打開工程。因此本文第 2 節(jié)會(huì)先給出 WSL 環(huán)境的最小搭建步驟完整細(xì)節(jié)見倉庫的 WSL 構(gòu)建指南。第一步在 WSL 中準(zhǔn)備 INAV 構(gòu)建環(huán)境本節(jié)的命令均應(yīng)在 Ubuntu 的 shell 中執(zhí)行而非 Windows CMD/PowerShell。啟用 WSL在 Windows 中運(yùn)行windows features勾選Windows Subsystem for Linux重啟從 Microsoft Store 安裝最新 Ubuntu LTS并設(shè)置用戶名與密碼更新軟件源并安裝構(gòu)建工具sudo apt update sudo apt-get install git make cmake ruby python3 ninja-buildcmake負(fù)責(zé)生成構(gòu)建系統(tǒng)make/ninja-build負(fù)責(zé)實(shí)際編譯ruby供倉庫內(nèi)的構(gòu)建輔助腳本使用見 src/utils 下的.rb腳本python3用于生成文檔與部分代碼見下文更新自動(dòng)化文檔。獲取 INAV 源碼示例cd /mnt/c git clone https://github.com/iNavFlight/inav.git cd inav git checkout 6.1.1 # 切換到某個(gè)發(fā)布 tag git checkout -b my-branch # 創(chuàng)建自己的開發(fā)分支若克隆時(shí)報(bào)chmod on /mnt/c/inav/.git/config.lock failed: Operation not permitted可先卸載并重新掛載 C 盤啟用 metadatasudo umount /mnt/c sudo mount -t drvfs C: /mnt/c -o metadata一次性配置構(gòu)建目錄cd /mnt/c/inav mkdir build cd build cmake .. # 或使用 Ninjacmake -GNinja ..之后在build目錄內(nèi)即可按 target 編譯例如make MATEKF722 # 單 target make MATEKF405 MATEKF405SE # 多 targetNinja 時(shí)為 ninja MATEKF722 MATEKF405SE SPEEDYBEEF405關(guān)于 target 的完整機(jī)制可參考 docs/development/targets/overview.mdCMake 先讀取src/main/target/TARGET/下的CMakeLists.txt與target.h再據(jù)此選擇 MCU 類型、閃存容量并裁剪驅(qū)動(dòng)最終鏈接生成 hex/bin。第二步安裝 VS Code 并接入 WSL下載并安裝 Visual Studio Code在擴(kuò)展市場安裝Remote - WSL插件用 VS Code 打開 INAV 倉庫文件夾按Ctrl Shift P打開命令面板執(zhí)行Remote-WSL: Reopen Folder in WSL讓整個(gè)工作區(qū)切換到 WSL 側(cè)若 Windows 防火墻彈窗詢問權(quán)限請(qǐng)?jiān)试S在 WSL 工作區(qū)中再安裝兩個(gè)插件C/CMicrosoft cpptools提供IntelliSense、語法高亮與調(diào)試支持Bookmarks用于在龐大代碼庫中快速標(biāo)記和跳轉(zhuǎn)。第三步配置 C/C 智能提示c_cpp_properties.json編輯倉庫根目錄下的 .vscode/c_cpp_properties.json以聲明 INAV 源碼中需要啟用的宏定義defines與頭文件搜索路徑。倉庫自帶示例配置如下{ configurations: [ { name: Win32, includePath: [ ${workspaceRoot}, ${workspaceRoot}/src/main/** ], browse: { limitSymbolsToIncludedHeaders: false, path: [ ${workspaceRoot}/** ] }, intelliSenseMode: msvc-x64, cStandard: c11, cppStandard: c17, defines: [ USE_OSD, USE_GYRO_NOTCH_1, USE_GYRO_NOTCH_2, USE_DTERM_NOTCH, USE_ACC_NOTCH, USE_GYRO_BIQUAD_RC_FIR2, USE_D_BOOST, USE_SERIALSHOT, USE_ANTIGRAVITY, USE_ASYNC_GYRO_PROCESSING, USE_RPM_FILTER, USE_GLOBAL_FUNCTIONS, USE_DYNAMIC_FILTERS, USE_DSHOT, FLASH_SIZE 480, USE_I2C_IO_EXPANDER, USE_PCF8574, USE_ESC_SENSOR ] } ], version: 4 }關(guān)鍵字段解讀字段含義includePath頭文件搜索路徑${workspaceRoot}指向工程根目錄src/main/**遞歸包含全部源碼頭文件browse.path標(biāo)簽索引范圍${workspaceRoot}/**覆蓋整個(gè)倉庫cStandard/cppStandard語法標(biāo)準(zhǔn)分別設(shè)為c11與c17與 INAV 當(dāng)前代碼風(fēng)格一致defines預(yù)定義宏用于讓 IntelliSense 看到#ifdef USE_XXX之后的條件編譯代碼FLASH_SIZE 480模擬目標(biāo)板閃存容量480 KB用于觸發(fā)與容量相關(guān)的條件編譯分支為什么這些 defines 很重要INAV 的源碼大量使用條件編譯。例如 src/main/target/common.h 就根據(jù)MCU_FLASH_SIZE是否大于 512 KB 來決定是否啟用USE_AUTO_TRANSITION、USE_TELEMETRY_MAVLINK等大體積功能并在MCU_FLASH_SIZE 512時(shí)關(guān)閉USE_SERIALRX_SPEKTRUM、USE_TELEMETRY_SRXL等以節(jié)省閃存。同時(shí)像USE_DSHOT、USE_GYRO_NOTCH_1這類功能開關(guān)需要先在defines里聲明編輯器才能正確解析對(duì)應(yīng)代碼分支——否則你會(huì)看到大量被#ifdef包裹的代碼無法高亮、無法跳轉(zhuǎn)。倉庫自帶的 .vscode/c_cpp_properties.json 中defines還額外包含USE_PROGRAMMING_FRAMEWORK、USE_SERIALRX_GHST、USE_DJI_HD_OSD、USE_GYRO_KALMAN、USE_RANGEFINDER、USE_NAV、USE_SDCARD、USE_GYRO_FFT_FILTER、USE_ADAPTIVE_FILTER以及MCU_FLASH_SIZE 1024等更貼近現(xiàn)代 1 MB 閃存目標(biāo)的宏集合。你可以以此為基準(zhǔn)針對(duì)自己正在開發(fā)的 target 增刪宏。注意這里同時(shí)出現(xiàn)了FLASH_SIZE 480示例舊值與MCU_FLASH_SIZE 1024倉庫當(dāng)前值兩種寫法二者本質(zhì)都是模擬目標(biāo) MCU 的閃存容量建議統(tǒng)一使用MCU_FLASH_SIZE單位 KB以匹配 common.h 中的判斷邏輯。小提示如果你的編輯器提示缺少宏導(dǎo)致大量誤報(bào)錯(cuò)誤優(yōu)先從 src/main/target/common.h 與對(duì)應(yīng) target 的 target.h例如src/main/target/MATEKF722/target.h中復(fù)制真正的宏定義這是保證 IntelliSense 與實(shí)際編譯行為一致的最穩(wěn)妥做法。第四步配置一鍵構(gòu)建任務(wù)tasks.json編輯倉庫根目錄下的 .vscode/tasks.json即可通過Ctrl Shift B快捷鍵或命令面板執(zhí)行構(gòu)建。官方指南給出了四個(gè)典型任務(wù){(diào) version: 2.0.0, tasks: [ { label: Install/Update CMAKE, type: shell, command: mkdir -p build cd build cmake .., group: build, problemMatcher: [], options: { cwd: ${workspaceFolder} } }, { label: Compile autogenerated docs, type: shell, command: python3 src/utils/update_cli_docs.py, problemMatcher: [], options: { cwd: ${workspaceFolder} } }, { label: Build Matek F722-WPX, type: shell, command: make MATEKF722WPX, group: build, problemMatcher: [], options: { cwd: ${workspaceFolder}/build } }, { label: Build Matek F405-STD WING, type: shell, command: make MATEKF405 MATEKF405SE, group: build, problemMatcher: [], options: { cwd: ${workspaceFolder}/build } } ] }四個(gè)任務(wù)分別做什么Install/Update CMAKE首次進(jìn)入工程時(shí)初始化構(gòu)建目錄mkdir -p build cd build cmake ..這一步只需執(zhí)行一次Compile autogenerated docs運(yùn)行 src/utils/update_cli_docs.py 重新生成 CLI 文檔。該腳本讀取 src/main/fc/settings.yaml 并輸出到 docs/Settings.md用于在你修改了飛控設(shè)置項(xiàng)后同步官方設(shè)置文檔詳見 Development.md 中關(guān)于設(shè)置文檔自動(dòng)生成的表單Build Matek F722-WPX單 target 編譯示例。MATEKF722WPX在源碼中確實(shí)存在由 src/main/target/MATEKF722PX/CMakeLists.txt 通過target_stm32f722xe(MATEKF722WPX)注冊Build Matek F405-STD WING多 target 編譯示例一條命令編譯MATEKF405與MATEKF405SE兩個(gè)目標(biāo)板對(duì)應(yīng)倉庫中的 src/main/target/MATEKF405SE 目錄。自定義你自己的構(gòu)建任務(wù)把上面的make {TARGET}換成你要開發(fā)的板子即可例如把make MATEKF722WPX改為make MATEKF722或make SPEEDYBEEF405。還可以基于 dev/vscode/tasks.json 中更完善的任務(wù)體系做擴(kuò)展——倉庫的 dev 配置把任務(wù)拆成了target、flash、svd、openocd-cfg、openocd-debug-prepare五步{ label: target, type: shell, command: make, args: [-C, ${config:BUILD_DIR}, ${config:TARGET}], problemMatcher: $gcc, group: { kind: build, isDefault: true } }并通過options.env.TARGET從 VS Code 的settings.json讀取目標(biāo)板參數(shù)。這套任務(wù)還銜接了 SVD 文件生成svd_${config:TARGET}、OpenOCD 配置生成openocd_cfg_${config:TARGET}與燒錄openocd_flash_${config:TARGET}配合硬件調(diào)試方案使用見下文。第五步硬件調(diào)試進(jìn)階完成以上配置后你已具備完整的編譯與代碼瀏覽能力。若需要在線調(diào)試倉庫還提供了配套文檔 Hardware Debugging in VSC on Windows 10 or 11 with WSL.md核心思路是在 WSL 側(cè)通過 OpenOCD 啟動(dòng) GDB Server在launch.json中設(shè)置servertype: externalgdbTarget指向 Windows 宿主機(jī)的windows-host-ip:3333復(fù)用上述openocd-debug-prepare任務(wù)鏈先svd、openocd-cfg、flash再啟動(dòng)調(diào)試。該文檔中的任務(wù)定義同樣基于.vscode/tasks.json與本文第 4 節(jié)是一脈相承的。常見問題與排查1.Syntax error: ( unexpected該錯(cuò)誤通常由 Windows PATH 被注入 WSL 環(huán)境導(dǎo)致常見于 WSL 1。三種解法詳見 WSL 構(gòu)建指南WSL 1打開 RegEdit將HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags從7改為5重啟后重新cmake ..WSL 2將同一鍵值從f0x0f改為d0x0d通用方案在 WSL 中創(chuàng)建/etc/wsl.conf寫入[Interop]段并設(shè)置appendWindowsPathfalse。2. 編譯非常緩慢如果wsl -l -v顯示發(fā)行版為 WSL 2且源碼位于/mnt/c掛載盤上跨文件系統(tǒng) I/O 會(huì)導(dǎo)致編譯極慢實(shí)測單 target 可能從 2.5 分鐘惡化到 25 分鐘。推薦把倉庫放到 Linux 文件系統(tǒng)通過\\wsl$訪問發(fā)行版目錄并映射網(wǎng)絡(luò)驅(qū)動(dòng)器必要時(shí)可切換回 WSL 1wsl --set-version Ubuntu-20.04 13. IntelliSense 大量誤報(bào)未定義符號(hào)請(qǐng)先確認(rèn)c_cpp_properties.json的defines是否覆蓋了當(dāng)前 target 實(shí)際啟用的宏并核對(duì)MCU_FLASH_SIZE數(shù)值是否與目標(biāo)板閃存一致——common.h 中大量功能是圍繞MCU_FLASH_SIZE分檔的數(shù)值不對(duì)會(huì)導(dǎo)致看到的條件編譯分支與真實(shí)編譯結(jié)果不一致。小結(jié)在 Windows 10 上開發(fā) INAV 的推薦鏈路是WSL 搭建工具鏈 → VS Code Remote-WSL 打開工程 →c_cpp_properties.json聲明宏與頭文件路徑 →tasks.json實(shí)現(xiàn)一鍵編譯。本文給出的兩份配置.vscode/c_cpp_properties.json與.vscode/tasks.json均可在倉庫根目錄直接查閱dev/vscode/tasks.json則提供了面向target/flash/svd/openocd的更完整任務(wù)鏈。以倉庫中的真實(shí) target如MATEKF722、MATEKF405SE、MATEKF722WPX替換任務(wù)命令中的目標(biāo)板名即可開始你的 INAV 開發(fā)。贊分享無人機(jī)嵌入式智能硬件【免費(fèi)下載鏈接】inavINAV: Navigation-enabled flight control software項(xiàng)目地址https://gitcode.com/gh_mirrors/in/inav點(diǎn)擊查看免費(fèi)下載相關(guān)推薦INAV 硬件調(diào)試實(shí)戰(zhàn)在 VS Code WSLWindows 10/11下配置 ST-Link 與 OpenOCD 斷點(diǎn)調(diào)試環(huán)境INAV 硬件調(diào)試實(shí)戰(zhàn)在 VS Code WSLWindows 10/11下配置 ST Link 與 OpenOCD 斷點(diǎn)調(diào)試環(huán)境 本指南面向需要在無人機(jī)嵌入式智能硬件howdoi 在 Windows 上搭建開發(fā)環(huán)境基于 WSL 的完整配置指南howdoi 在 Windows 上搭建開發(fā)環(huán)境基于 WSL 的完整配置指南 howdoi 是一個(gè)在命令行里瞬間獲得編程答案的開源工具輸入 howdoi開發(fā)工具CLIVisual Studio Code 遠(yuǎn)程開發(fā)實(shí)戰(zhàn)在 WSL 中搭建 Linux 開發(fā)環(huán)境的完整指南Visual Studio Code 遠(yuǎn)程開發(fā)實(shí)戰(zhàn)在 WSL 中搭建 Linux 開發(fā)環(huán)境的完整指南 本文基于 Visual Studio Code 官方文檔文檔教程創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考