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