查看: 6281|回复: 0

[原创] 如何使用Visual Studio Code进行FreeRTOS开发

[复制链接]
  • TA的每日心情
    开心
    2023-6-12 14:34
  • 签到天数: 165 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2021-3-3 10:56:02 | 显示全部楼层 |阅读模式
    分享到:
    isual 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项目
    FreeRTOS为许多开发板、集成开发环境(IDE)、编译器提供了示例工程及入门指南。找一个基于makefiles的GCC工程,尝试使用VS Code。

    许多芯片厂商提供配置了工具,可以生成评估板相应的FreeRTOS项目。使用配置工具生成基于make或CMake的工程,选择GCC作为目标编译器,生成的项目可以在VS Code中轻松使用。关于如何使用ST STM32CubeIDE或STM32CubeMX工具生成FreeRTOS的项目可参考ST官方资料。注意,需在Project Manager标签中选择Makefile作为Toolchain/IDE选项。
    2.png
    NXP的MCUXpresso配置工具和Espresif的IDF工具也可为其设备生成基于CMake的FreeRTOS项目,还可以使用FreeRTOS AWS项目中包含的开发板demo。
    使用makefile
    生成FreeRTOS项目后,在VS Code中通过菜单方式打开项目目录(File->Open Folder),或通过命令行切换到项目目录并输入:code.启动VS Code。
    3.png
    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构建应用程序。
    4.png
    编译错误将在“Problems”窗口中显示,并支持直接导航到引起错误的代码行。
    使用CMake
    如果已经有一个使用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。
    5.png
    首先在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

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 12:33 , Processed in 0.128291 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.