如何使用Visual Studio Code進行FreeRTOS開發

2022-01-29 麥克泰技術

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

相關焦點

  • 終極指南:如何使用 Visual Studio Code 進行 Java 開發?
    VS Code(Visual Studio Code)已成為多語言開發人員的首選文本編輯器。 大量 Javascript、TypeScript、Go、Python 和其它語言的開發人員都在使用 VS Code 進行編碼,這部分歸功於 VS Code 擴展形成的龐大生態系統。
  • 剖析並利用Visual Studio Code在Mac上編譯、調試c#程序
    不過visual studio code這種編輯器顯然會提供很方便的用戶自定義的Json配置。那麼匹夫為了找到控制快捷鍵配置的Json文件,匹夫首先使用cmd+p這個快捷鍵組合,將visual studio code的command顯示出來。
  • 如何在 Linux 中安裝 Visual Studio Code
    Visual Studio Code 是微軟開發的支持包括 Linux 在內的全平臺代碼編輯器和文本編輯器。它是免費軟體但不開源,在專有軟體許可條款下發布。它是可以用於我們日常使用的超級強大和快速的代碼編輯器。
  • 使用 Visual Studio Code 開發 LINUX 上 C++ 應用
    配配置連接到 LINUX 伺服器上,點擊「遠程資源管理器」,然後選 SSH TARGERTS 的「+」號,輸入一行 ssh 命令,就會打開一個登錄配置文件,你可以自己編輯多個需要登錄的主機安裝代碼自動格式化器 clang-format。
  • 如何進行code review?
    一個主持人,負責預定會議室,操作visual studio查看最近兩周提交的changeset,一個記錄員,負責記錄發現的問題,相關功能的開發人員負責講解和解答疑問。最後記錄員將review結果記錄到wiki中並發送到整個開發部門。
  • Visual Studio Code搭建C語言"集成"開發環境
    使用其內嵌的Windows power shell當作命令行終端來執行MinGW的便宜命令,這種方式雖然比較麻煩,但是其開發的過程和方法最大地逼近了Linux下C語言的開發,因此,我們在之前的C語言講述過程中,選擇使用了這種開發方式。但是,這種方式隨著你代碼的複雜度提升,如果使用gdb工具去做代碼的調試,其實是很不方便的,因為命令行為主的操作方式永遠都比不過圖形化界面來的方便。
  • Python程式設計師的VS Code|Visual Studio Code for Python Programmers
    熟練和高效地使用Visual Studio Code,並學習如何集成所有外部工具!針對Python程式設計師的Visual Studio Code幫助Python開發人員不僅熟悉軟體,而且提高了使用效率。首先,您將看到在Windows、Mac和Linux平臺上安裝Visual Studio Code的步驟,以及對工作區編輯功能的介紹。
  • 為什麼Visual Studio Code如此受歡迎?
    來自:Linux迷   連結:https://www.linuxmi.com/visual-studio-code-huanying.html
  • Visual Studio Code 最新版本發布
    我們還在研究如何在GitHub的vscode-theme-generator項目中輕鬆創建主題。使用vscode-theme-generator,您可以通過僅6種顏色來創建一個看起來像這樣的主題:原文來自:  https://www.oschina.net/news/84485/visual-studio-code-1-12本文地址:  http://www.linuxprobe.com/visual-studio-code.html編輯員:張雄,審核員:逄增寶
  • 微軟visual studio誕生20年回顧
    這個版本的visual basic也是原汁原味basic的最後一個版本, 是拖拉控制項和事件編程的先驅,許多windows應用程式都是用它開發的。visual studio .net (2002)從這個版本開始vs開始提供免費的社區版本, 官方提供下載 。在這之前的18年, 想要使用vs要不花錢向微軟買 , 要不就使用盜版。
  • 微軟 VS Code 或將取代 Visual Studio!
    作者 | 琥珀對於前端來講,使用微軟的Visual Studio Code 以提高開發效率簡直就是一款無比性感的神器。「免費」、「開源」、「顏值高」、「比atom更快」、「比webstorm更輕」……這均是開發者給出的最高評價。
  • 給宇宙最強Visual Studio Code配置編譯和運行C/C++
    來自:Linux迷  https://www.linuxmi.com/ubuntu-visual-studio-code-c.html
  • Linux上配置 Visual Studio Code 編譯和運行C/C++
    來自:Linux迷連結:https://www.linuxmi.com/ubuntu-visual-studio-code-c.html
  • 如何使用Visual Studio Code開發Arduino
    雖然官方提供的Arduino IDE上手比較簡單,但當你的項目比較複雜的時候,再使用官方IDE就慢慢變得痛苦了,沒有自動補全,無法跳轉函數
  • Visual Studio Code 1.13 發布,趕緊試試
    Improved Git merge - 使用 Accept Changes CodeLens 進行內聯合併操作。Better IntelliSense details - 輕鬆切換完整的建議文檔。原文來自:  https://www.oschina.net/news/85675/visual-studio-code-1-13本文地址:  http://www.linuxprobe.com/visual-studio-code
  • 通過 railway 和 code-server 搭建網頁版的 visual studio code
    除了用一些SSH Terminal[2]遠程登陸伺服器用 vim 改代碼, 平板上做開發並沒有很好用的 IDE.Code-Server項目地址: https://github.com/cdr/deploy-code-server通過這個項目可以在伺服器 (VPS) 上配置 code-server, 通過 export 埠(8080) 可以在瀏覽器裡以網頁方式打開 vscode.
  • 10 個好用的 Visual Studio Code 插件
    這個插件能幫助開發人員生成智能代碼補全提示,並且它內置支持很多種程式語言。Visual Studio Intellicode 使用機器學習技術,通過學習大量 GitHub 項目的代碼,能找到一些編碼模式,然後在你編程時給予代碼提示。
  • 10個好用的Visual Studio Code插件
    這個插件能幫助開發人員生成智能代碼補全提示,並且它內置支持很多種程式語言。Visual Studio Intellicode 使用機器學習技術,通過學習大量 GitHub 項目的代碼,能找到一些編碼模式,然後在你編程時給予代碼提示。「誰寫的這段代碼?」每隔一段時間,你都可能需要了解某段代碼是誰寫的。
  • 30 個超實用的 Visual Studio Code插件
    為了計算包大小,該插件要使用 Webpack 和 babili-webpack-plugin。這個插件將 visual studio code 的快捷鍵綁定改成了和 Sublime Text 3 一樣。你可以試一試:cmd + P (Mac),ctrl + P (Windows)。
  • Visual Studio Code 0.3.0發布,首次更新!
    現在在使用 Code 的用戶需要注意,根據反饋對一些 Keybindings 做了修改:The native File Open dialog has been restored to unassigned.The Code File Open dialog is now accessible via ⌘P.