Visual Studio Code(簡稱 VS Code)是目前一個非常流行的原始碼編輯器,也可以用於嵌入式開發。在嵌入式應用中,如何配置VS Code來構建和調試項目?本文將展示如何設置VS Code作為FreeRTOS項目的開發環境,介紹需要安裝的擴展功能,及環境配置的相關選項。
如果你還沒有使用過VS Code,可以訪問VS Code網站(https://code.visualstudio.com/)了解其基本功能,下載系統對應的安裝程序。VS Code是一個輕量級編輯器,可以通過添加擴展以獲得額外的語言支持或其它功能來為自己的需求量身定做。它支持調試功能,併集成Git用於原始碼控制。在VS Code中通過File>Open Folder菜單打開原始碼所在的文件夾即可工作,無需創建額外的工程文件。VS Code將根據打開的代碼,推薦安裝相關的擴展功能。VS Code還有很多高級編輯功能,比如多個指針。可以通過「Help」 幫助菜單打開「Interative playground」了解更多功能信息。
FreeRTOS內核用C語言編寫,所以需要在VS Code中安裝C/C++擴展。如果FreeRTOS工程使用CMake,還需安裝CMake工具擴展。如果希望在VS Code中部署和調試目標設備,可以選擇Cortex Debug擴展。下面將展示如何通過這些擴展功能配置FreeRTOS工程。
還需要為嵌入式開發設置開發環境,為目標設備安裝交叉編譯器,如GNU ARM Embedded tool-chain及燒錄/調試工具,具體工作可參考目標設備開發指南。
FreeRTOS為許多開發板、集成開發環境(IDE)、編譯器提供了示例工程及入門指南。找一個基於makefiles的GCC工程,嘗試使用VS Code。
許多晶片廠商提供配置了工具,可以生成評估板相應的FreeRTOS項目。使用配置工具生成基於make或CMake的工程,選擇GCC作為目標編譯器,生成的項目可以在VS Code中輕鬆使用。關於如何使用ST STM32CubeIDE或STM32CubeMX工具生成FreeRTOS的項目可參考ST官方資料。注意,需在Project Manager標籤中選擇Makefile作為Toolchain/IDE選項。
NXP的MCUXpresso配置工具和Espresif的IDF工具也可為其設備生成基於CMake的FreeRTOS項目,還可以使用FreeRTOS AWS項目中包含的開發板demo。
生成FreeRTOS項目後,在VS Code中通過菜單方式打開項目目錄(File->Open Folder),或通過命令行切換到項目目錄並輸入:code.啟動VS Code。
C++擴展功能為C和C++文件提供智能提示(IntelliSense)。除了簡單的語法高亮顯示外,還提供了基於變量類型、函數定義等的自動代碼補全功能。要為C++擴展配置智能提示,我們需要讓它知道頭文件位置,編譯選項設置等等。makefiles沒有自動處理這些信息的方法,但是添加起來相對容易。打開.vscode/c_cpp_properties.json文件(按F1,選擇C/C++: Edit configurations(JSON),生成c_cpp_properties.json文件),首先將intelliSenseMode變量更新為gcc-arm,並在編譯器路徑變量CompilerPath中設置使用的交叉編譯器路徑。打開工程makefile文件查找文件包含列表,將其複製到c_cpp_properties.json文件中的includePath數組中。使用VS Code的Multiline cursor功能,在每個文件夾位置前面增加${worksapceFolder},指示其相對路徑。還可以向CompilerArgs數組添加編譯器選項,defines數組中增加標誌定義。
下面是一個基於STM32CubeMX生成的FreeRTOS工程的c_cpp_properties.json示例文件:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/Core/Inc",
"${workspaceFolder}/Drivers/STM32F7xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F7xx_HAL_Driver/Inc/Legacy",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/include",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F7xx/Include",
"${workspaceFolder}/Drivers/CMSIS/Include"
],
"defines": [
"USE_HAL_DRIVER",
"STM32F767xx"
],
"compilerPath": "opt/GNU Arm Embedded Toolchain/10 2020-q4-major/bin/arm-none-eabi-gcc.exe",
"compilerArgs": [
"-mcpu=cortex-m7",
"-mthumb",
"-mfpu=fpv5-d16",
"-mfloat-abi=hard"
],
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-arm"
}
],
"version": 4
}
在VS Code terminal窗口(Terminal窗口可以通過View->Terminal打開)運行make構建應用程式。
編譯錯誤將在「Problems」窗口中顯示,並支持直接導航到引起錯誤的代碼行。
如果已經有一個使用CMake的FreeRTOS項目,VS Code中的CMake Tools擴展會自動查詢CMake緩存以獲取前面必須手動配置的信息,但擴展將會使用它在系統上找到的編譯器作為「kit」來配置你的項目。如果擴展提示使用kit時,你可以選擇「unspecified」,以便可以配置一些附加選項。
在嵌入式應用中使用CMake會遇到的一個問題,它首先嘗試編譯一個簡單的C程序,以驗證有一個可以工作的C編譯器。這不適用於交叉編譯器,因為編譯的程序是針對特定的目標系統。可以通過一個選項來告訴CMake不啟動此操作。打開.vscode/setings.json,添加cmake.configSettings項。在該結構中,添加CMAKE_C_COMPILER_WORKS TRUE,告訴CMake不執行此項檢查。你還可以通過此結構將附加參數傳遞給CMake,例如,構建說明中以-D為前綴的任何參數。
下面是一個用於編譯FreeRTOS AWS項目的settings.json文件示例。注意,編譯器、晶片廠商和開發板的選項都與實際運行的示例相關,將相關選項添加到cmake.configureSettings數組中,作為使用CMake構建項目的命令行的一部分,即可在VS Code中構建項目。
Settings.json
{
"cmake.configureOnOpen": true,
"cmake.configureSettings": {
"COMPILER": "xtensa-esp32",
"CMAKE_C_COMPILER_WORKS": "TRUE",
"VENDOR": "espressif",
"BOARD": "esp32_wrover_kit"
},
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}
更新設置後,可以右鍵單擊CMakeLists.txt文件或使用F1快捷鍵,選擇CMake Delete cache and reconfigure選項,重新構建項目,編譯錯誤將顯示在「Problems」窗口中。
Cortex-Debug擴展功能可以實現在設備上部署和調試FreeRTOS應用程式。這個擴展功能支持不同的硬體調試器和相應的軟體。你需要根據調試工具配置環境,然後配置擴展功能以使用該工具。為特定配置啟動擴展可參考wiki。
首先在VS Code,按下F1,顯示所有命令,輸入「launch」 ,選擇open launch.json文件,生成一個基本launch.json文件,然後根據硬體調試器和目標設備配置該文件。
下面為使用Nucleo-F746ZG開發板和J-Link的launch.json示例配置。需要配置的內容為指向構建輸出的可執行文件以及調試硬體和目標板,需要根據環境更新這些設置。
{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/build/Nucleo_F746ZG_FreeRTOS_GCC.elf",
"name": "Debug J-Link",
"request": "launch",
"type": "cortex-debug",
"serverpath": "C:/Program Files (x86)/SEGGER/JLink/JLinkGDBServerCL.exe",
"servertype": "jlink",
"device": "STM32F746ZG",
"interface": "swd",
"jlinkscript": "",
"runToMain": true,
"svdFile": "",
},
]
}
還需要更新setings.json告訴Cortex-Debug交叉編譯器安裝路徑文件。
{
"cortex-debug.armToolchainPath": "opt/GNU Arm Embedded Toolchain/10 2020-q4-major/bin "
}
按下F5或運行->啟動調試,進入調試界面,調試應用。
VS Code除了允許通過安裝擴展來進行代碼重構和版本控制之外,還可以將這個「簡單」代碼編輯器擴展到多平臺開發環境中。VS code可以作為使用FreeRTOS進行嵌入式開發的工作環境,關鍵是利用合適的擴展功能來滿足開發需求,並學習如何為具體環境配置它們。一旦設置,它很容易使用CMake或make FreeRTOS項目。希望這篇文章展示的內容可以幫助你嘗試自己的FreeRTOS項目。
相關設置安裝網址:(微信不支持外部連結,請複製連結至瀏覽器)
C/C++擴展:
https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools
CMake工具:
https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools
Cortex Debug:
https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug
GNU ARM Embedded tool-chain:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
wiki:
https://github.com/Marus/cortex-debug/wiki
歡迎關注微信公眾號【麥克泰技術】,回復 「加群」 按提示可加入技術交流群
產品諮詢:
北京:010-62975900
上海:021-62127690
深圳:0755-82977971