日期:2019.05.05
開發環境:ubuntu18.04
工具鏈:gcc-arm-none-eabi-7-2018-q2(7.3.1)
一.基礎軟件
- vscode
安裝方式自行百度,之後記得再安裝一些必要插件比如C/C++,GitLens等。 - git
ubuntu自帶
二.下載和編譯
1.下載代碼
git clone https://github.com/betaflight/betaflight.git
2.安裝編譯工具鏈
我使用的工具鏈版本爲7.3.1,低於該版本無法編譯betaflight最新分支。
請下載gcc-arm-none-eabi-7-2018-q2-update,Linux 64-bit
拷貝該文件至Home目錄並解壓(其它任意目錄均可,不過導入環境變量時要注意修改爲你的實際目錄)。
在終端中輸入以下命令,導入工具鏈路徑到環境變量:
exportline="export PATH=$HOME/gcc-arm-none-eabi-7-2018-q2-update-linux/bin:\$PATH"
if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
. ~/.profile
檢測gcc-arm-none-eabi是否已正確安裝,輸入
arm-none-eabi-gcc --version
應該輸出類似以下內容
arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
最好重啓或註銷使該環境變量應用到所有終端
reboot
3.編譯
啓動vscode,打開betaflight項目所在文件夾,然後按下"ctrl+shift+`"打開終端,輸入編譯命令
make TARGET=SPRACINGF3 DEBUG=INFO
其中TARGET指定了固件編譯目標,對應你的板子,注意基於STM32F3的飛控板已經不支持高於4.0版本的固件了。DEBUG=INFO表示編譯時開啓Debug信息(帶有一定優化級別),而DEBUG=GDB則是開啓Debug信息並關閉優化。
三.在線調試
1.安裝Jlink驅動
https://www.segger.com/downloads/jlink#J-LinkSoftwareAndDocumentationPack
請點擊"J-Link Software and Documentation pack for Linux, DEB installer, 64-bit",並選擇一個版本進行下載,我這裏選擇的是v5.10。下載完之後直接在ubuntu下雙擊安裝。
2.安裝vscode調試插件
在vscode的插件市場中搜索"Cortex-Debug"(下圖中左側欄的第五個圖標),並點擊安裝,安裝完之後最好重啓一下vscode。
3.Debug參數配置
打開Debug界面(左側欄第三個圖標),在調試菜單欄中選擇“添加配置”,並選擇Cortex Debug。
點擊小齒輪圖標,打開launch.json,將下面的代碼複製(覆蓋)進去。
{
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "./obj/main/betaflight_SPRACINGF3.elf", //需要設置爲你編譯出來的固件路徑
"request": "launch",
"type": "cortex-debug",
"servertype": "jlink",
"device": "STM32F303CB", //飛控的單片機型號,需要jlink驅動支持
"interface": "swd",
}
]
}
根據不同的飛控板子,需要修改其中的"executable"和"device"。
4.開啓調試
將Jlink通過SWD接口連接飛控,在vscode中點擊DEBUG圖表或者按下F5,開始進入Debug模式。接下來可以在代碼左側單擊設置斷點,以及在Debug窗口中查看當前變量,也可以在WATCH窗口中設置需要觀察的變量(手動輸入變量名)。
四.使用OpenOCD實現燒錄調試一體
上述方式存在一個明顯的缺點,即無法通過vscode給飛控燒錄程序,而每次調試前又要必須更新飛控程序,使兩邊固件保持一致,否則調試時會引發錯誤。
可以使用OpenOCD軟件,來實現這個功能。
1.安裝OpenOCD
終端中輸入命令
sudo apt install openocd
2.修改vscode的Debug配置文件
在vscode的Debug頁面中點擊小齒輪圖標,打開launch.json文件,將下列代碼複製進去(覆蓋):
{
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}",
"executable": "./obj/main/betaflight_SPRACINGF3.elf", //固件路徑,需要根據實際情況修改
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd",
"configFiles": [
"interface/jlink.cfg", //Jlink配置文件
"target/stm32f3x.cfg" //目標芯片配置文件,需要根據自己飛控的實際芯片修改,可以到/usr/share/openocd/scripts/target目錄下查看存在的配置文件
]
}
]
}
3.修改openocd的jlink配置
由於我使用的調試接口爲SWD,需要對openocd的配置文件進行修改,輸入:
sudo gedit /usr/share/openocd/scripts/interface/jlink.cfg
打開jlink.cfg文件進行修改,在其中加入一行並保存:
transport select swd
如下圖所示:
4.修改芯片配置文件
理論上到上一步就已經結束了,但實際上存在着一些意外情況,若此時直接在vscode中按下F5,進入調試,會輸出以下信息:
提示固件加載失敗,此時繼續按F5,會接着進入調試,但毫無疑問的是固件燒錄失敗了。
原因在於,openocd的stm32f3x.cfg配置文件會自動識別F3芯片的flash大小爲128k,而實際燒錄的固件大小超出200k,因此會燒錄失敗。
因此,我們需要手動修改以下配置文件,輸入:
sudo gedit /usr/share/openocd/scripts/target/stm32f3x.cfg
找到這一行,將其註釋掉
flash bank $_FLASHNAME stm32f1x 0 0 0 0 $_TARGETNAME
並在下面加入一行(修改flash大小爲256k)
flash bank $_FLASHNAME stm32f1x 0x08000000 0x40000 0 0 $_TARGETNAME
如下圖所示
如果你的飛控板不是F3而是基於F4或F7的,或許不存在這個問題(我沒測試過),便可以直接跳過這一步。
再打開vscode,按下F5,這時候已經沒有了錯誤提示,等待數秒,待固件燒寫完畢後,就可以開始調試了!