外觀
野火 GD32H759 + fireDAP:macOS 上的編譯燒錄除錯閉環
一塊野火 GD32H759 開發板(Cortex-M7 600MHz)+ 一隻野火 fireDAP 燒錄器,在 Apple Silicon Mac 上 從「接線」到「原始碼級斷點除錯」全打通。沒裝官方 IDE;編譯用 arm-none-eabi-gcc(雲端預置秒級拉取), 燒錄除錯用 pyOCD + 兆易官方 DFP pack,除錯用 arm-none-eabi-gdb。本文全程 2026-09-11 實測。
成果速覽
| 環節 | 工具 | 實測結果 |
|---|---|---|
| SWD 連通 | OpenOCD / pyOCD | DPIDR 0x0bd12477,認出 Cortex-M7 r1p2 |
| 編譯 | arm-none-eabi-gcc 15.2.1 + CMake | 9s 出 ELF/hex/bin(Flash 2772B/3840K) |
| 燒錄 | pyOCD + GD32H7 DFP 1.5.0 | 25~37 kB/s,向量表讀回校驗一致 |
| 執行 | pyOCD 取樣 GPIOC | OCTL 四次取樣 0x800→0x200→0x1000→0x400 輪轉 |
| 除錯 | pyOCD gdbserver + gdb | extended-remote 連上,reset 後命中 main 斷點 |
工具鏈為什麼從雲端拉
ARM GCC 原始下載源實測都極慢;把包預置到自己的雲伺服器(阿里雲 nginx)後,任何裝置秒級拉取:
bash
curl -O http://120.24.236.163/downloads/xpack-arm-none-eabi-gcc-15.2.1-1.1-darwin-arm64.tar.gz
tar -xzf xpack-*.tar.gz # SHA256 与官方发布一致,sidecar .sha256 同目录同理,兆易 GD32H7 的 DFP pack(官網藏在許可協議頁後面)也放了雲端:/downloads/GigaDevice.GD32H7xx_DFP.1.5.0.pack。
協議棧與工具鏈全景
兆易不在 pyOCD 公共 pack 索引裡——DFP pack 官網藏在許可協議頁後,現已放雲端直拉。
燒錄 + 執行驗證(實測)
除錯驗證(gdb 原始碼級)
踩坑檔案
| 現象 | 根因 | 解決 |
|---|---|---|
| pyOCD 找不到 GD32H7 pack | 兆易不進公共 pack 索引,官網藏在協議頁後 | 雲端預置直拉;或挖 agree 頁直鏈下 AddOn 7z 解包 |
pack 目標報 DebugPortSetup No ACK | 時序問題(OpenOCD 同鏈路直連正常,排除接線) | SWD 降 1MHz:-O frequency=1000000 |
Unable to open device | gdbserver 還佔著探針(獨佔資源) | 先停佔用程序再燒錄 |
| gcc 工具鏈下載兩次超時 | developer.arm.com / GitHub 到本機頻寬極差 | 雲端預置 xpack gcc,45MB/s 秒拉 |
| 模板連結引數編不過/鏈錯庫 | 模板筆誤:編譯 -mcpu=cortex-m7 但連結寫 -mcpu=cortex-m3 | CMakeLists 連結引數統一改 cortex-m7 |
gdb continue 像卡死 | 目標已在 while(1),main 斷點不再命中 | 先 monitor reset halt 再 continue |
| 應急方案:要裁原始檔、改連結指令碼、關 UBSan,無 libc 無 gdb | 工具鏈上雲後直接棄用,全量回歸 gcc |
復現與出處
- 一鍵指令碼(build_gcc / flash / verify_run / debug_gdb / debug)與全部細節見 skill
gd32h7-firedap-debug - 官方原始碼:韌體庫 GD32H73x_75x_Firmware_Library、例程 GD32H7xx_Demo_Suites、GCC 模板 GD32H7xx_CLion_GCC_Template
- 預置工具:
http://120.24.236.163/downloads/(xpack arm gcc + GD32H7 DFP pack,SHA256 附同名 sidecar) - 燒錄/除錯:pyOCD 0.45.1 + DFP pack;備用連通驗證 OpenOCD 0.12(借 stm32h7x.cfg)