【RT-Thread】将BSP工程从RT-Thread源码中独立出来开发(4)

上一篇:【RT-Thread】将BSP工程从RT-Thread源码中独立出来开发(3)

接上回

之前的文章中讲过,将 bsp 独立出来开发可能会遇到一个代码跳转的问题,由于默认的RTT工程结构是所有的源码都在一个目录下,使用 IDE 或者编辑器打开时我们往往打开所有源码。

但我们将 bsp 工程独立出来后,IDE 或编辑器只打开了我们的 bsp 工程,因此很多 RTT 内核的代码无法跳转,在笔者的 VSCode 上,会出现很多红色波浪线,看着非常难受。

本篇介绍一下在 VSCode 环境下 RTT 官方提供的解决这个问题的方法,其他环境下原理也是一致,只是工具可能需要自定义编写。

生成 VSCode 配置文件

我们之前使用 scons 生成 CMake 工程,但其实 scons 还支持很多其他的 IDE,比如我们很熟悉的 mdk 等,当然,也支持 VSCode:

$ scons --target=d
scons: Reading SConscript files ...
Unknow target: d. Avaible targets: mdk, mdk4, mdk5, iar, vs, vs2012, vsc, cb, ua, cdk, makefile, eclipse, ses, cmake, cmake-armclang, xmake, codelite, esp-idf

我们随便输入一个 target,当然这不可能有,但是 scons 会打印它所支持的所有 IDE,并生成对应的工程配置文件,使用 IDE 打开这个配置文件,我们就不必手动去选择某些源文件,添加某些宏定义了。

看起来 scons 支持很多 IDE,包括 Keil MDK,IAR,VS,VSCode,平头哥,Eclipse,还有更直接点的 CMake 和 Makefile。

由于我是基于 VSCode 进行编码,因此这里我直接选择 target 为 vsc

$ scons --target=vsc
scons: Reading SConscript files ...
Newlib version: 4.1.0
Update setting files for VSCode...
Done!

然后我们就可以在工程目录下看到两个新的文件,一个是 vscode.code-workspace 文件,另一个是 .vscode/c_cpp_properties.json 文件

工作区配置文件

vscode.code-workspace 是 VSCode 的工作区配置文件,打开文件的内容如下,

{
    "folders": [
        {
            "path": "."
        },
        {
            "path": "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers",
            "name": "rtthread/00.archive/embeded/rt-thread/bsp/stm32/libraries/HAL_Drivers"
        },
        {
            "path": "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers\\CMSIS\\Include",
            "name": "rtthread/00.archive/embeded/rt-thread/bsp/stm32/libraries/HAL_Drivers/CMSIS/Include"
        },
        {
            "path": "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers\\drivers",
            "name": "rtthread/00.archive/embeded/rt-thread/bsp/stm32/libraries/HAL_Drivers/drivers"
        },
	    // ..................... more
	]
}

该文件定义了我们工程用到的所有源文件和头文件的路径,我们可以关闭 VSCode,然后双击这个文件,会打开一个新的 VSCode 窗口,左侧的文件夹列表如下。

这个工作区配置文件会帮助我们将所有用到的源码的文件夹都添加进来,但有个问题就是如果文件夹之间存在包含关系的,也都会一并添加进来,会存在重复现象,如上图中,HAL_Drivers 路径下可以打开 HAL_Drivers/CMSIS/Include ,但是 HAL_Drivers/CMSIS/Include 也会被添加到工作区。

在这里插入图片描述

C/CPP 配置文件

.vscode/c_cpp_properties.json 文件是 C/CPP 扩展的配置文件,因此 VSCode 需要安装该扩展插件,C/CPP 代码的静态分析和跳转也是基于这个插件。

在这里插入图片描述

打开该配置文件的内容如下,该配置定义了工程中定义的宏、编译器、语言标准以及头文件路径,有了这些定义,C/CPP 扩展就可以自动分析代码关系。

{
    "configurations": [
        {
            "name": "Win32",
            "defines": [
                "RT_USING_LIBC",
                "RT_USING_NEWLIBC",
                "STM32F103xE",
                "USE_HAL_DRIVER",
                "_POSIX_C_SOURCE=1",
                "__RTTHREAD__"
            ],
            "intelliSenseMode": "clang-x64",
            "compilerPath": "D:/Tools/env-windows/tools/gnu_gcc/arm_gcc/mingw/bin/arm-none-eabi-gcc",
            "cStandard": "c99",
            "cppStandard": "c++11",
            "includePath": [
                "applications",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\compilers\\common\\include",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\compilers\\newlib",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\drivers\\include",
                "board",
                "board\\CubeMX_Config\\Inc",
                "board\\ports",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers\\drivers",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers\\drivers\\config",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\HAL_Drivers\\CMSIS\\Include",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\finsh",
                ".",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\include",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\libcpu\\arm\\common",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\libcpu\\arm\\cortex-m3",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\STM32F1xx_HAL\\CMSIS\\Device\\ST\\STM32F1xx\\Include",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\bsp\\stm32\\libraries\\STM32F1xx_HAL\\STM32F1xx_HAL_Driver\\Inc",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\posix\\io\\epoll",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\posix\\io\\eventfd",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\posix\\io\\poll",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\libc\\posix\\ipc",
                "..\\..\\..\\00.archive\\embeded\\rt-thread\\components\\drivers\\usb\\usbdevice"
            ]
        }
    ],
    "version": 4
}

总结

scons 帮我们生成了两个配置文件,其中 C/CPP 的配置文件已经可以帮助我们轻松跳转函数了, VSCode 中的红色波浪线也都消失了。

而工作区配置文件需要我们重新以工作区打开 VSCode,然后 VSCode 会将所有的文件夹自动添加到左侧文件夹列表,其实这一步我们也可以手动添加需要的文件夹(文件-将文件夹添加到工作区)。

由于工作区配置文件一般会添加大量的文件夹,并且会添加重复的文件夹,因此我一般只使用 C/CPP 的配置文件就够了,工作区一般不打开。

如果使用 Git 进行版本控制,记得添加这两个配置文件到 .gitignore 文件,因为这些配置文件中的路径对你的同事可没有用,而且会影响他们的配置,对你其他的电脑一般也没有用,除非路径一致。

对于实现的原理,我想是基于 RTT 的这一套 SConscript 脚本吧,scons 遍历项目中的构建脚本,获得了全部的源文件和头文件路径以及宏定义等,然后根据 VSCode 的特性,通过一个模板文件将这些参数填充到配置文件中,就实现了自动生成配置文件,因此,如果你使用的是其他 scons 还没有支持的 IDE,也可以试试自己生成一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值