Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
vscode
RT-Thread with VS Code之Windows篇 - 系列1
发布于 2023-03-25 20:29:09 浏览:2919
订阅该版
[tocm] ## 前言 近期工作PC从Win转向了Mac,由于Mac平台还没有RT Studio IDE工具,日常开发不是太方便。在前期折腾的基础上,萌生了用VS Code+GCC在Mac上偶尔编程的想法。 考虑到Mac上配置会相对复杂一点,需要首先安装GNU_Tools_for_ARM_Embedded_Processors,过程中还需要安装brew。因此,本文暂时不用Mac,后续在全新Mac上留好每一步的安装记录,再写一篇Mac上的配置过程。 本文简单介绍在Windows上使用VS Code编译RT-Thread工程的过程,按照文章步骤来,应该都能成功。前置条件如下: - 安装了RT-Thread Studio; - 安装了VS Code,RT-Thread插件(该插件的其他依赖项会自动安装)。 ## VS Code的基础配置 VS Code的插件安装如下图所示,依赖于C/C++,Cortex-Debug插件。 ![rt-thread-pluggin.png](https://oss-club.rt-thread.org/uploads/20230325/4ef6bf5a4d9cc35e3ebb8d6e7a2d543d.png.webp) **Step 1**. VS Code工作区配置 在VS Code中,将工作区存放在硬盘某个目录。这一步纯属个人习惯。 ![VSCodeWorkSpace.png](https://oss-club.rt-thread.org/uploads/20230325/1fb6d8055d2628dd1eb1658cb0adb632.png.webp) **Step 2**. 使用RT-Studio新建一个工程。 在本文中,以STM32F103ZET6为处理器,新建一个4.1.0版本的工程。(原计划这一步使用4.0.5版本的,不小心选错,将错就错了) ![RTStudioNewProject.png](https://oss-club.rt-thread.org/uploads/20230325/b92926a7c980525e087655c752987424.png.webp) **Step 3**. 将已有工程添加到VS Code工作区。 在RT-Thread Studio中关闭新建的工程。在VS Code中击`添加工程到工作区`,找到RT-Thread Studio生成工程的路径,将文件目录添加即可。 ![AddProject2WorkSpace.png](https://oss-club.rt-thread.org/uploads/20230325/0a13369270d4487890b7a2ebf224bd62.png.webp) **Step 4**. 在VS Code中编译工程。 此处的四个图标,分别对应:编译、下载、调试、清除工程文件。编译后,会发现有大量的`c,m`未定义的情况。 ![FirstCompile.png](https://oss-club.rt-thread.org/uploads/20230325/99fbed7206673a0e179cc8fd83b4230f.png.webp) 打开application目录下的SConscript文件,删除`CPPDEFINES`中的m和c部分。 ![OpenSConscript.png](https://oss-club.rt-thread.org/uploads/20230325/eec6a7b36f121fde676746eb3f8e6398.png.webp) 删除后,再次编译。此时编译错误发生变化,提示bss段相关信息无法找到。右键进入到工程属性菜单中,在文件夹属性处,默认是勾选上`在编译前自动检查/更新rtconfig.py文件`。根据这个提示,可以在左侧文件目录中找到`rtconfig.py`文件。 ![FirstCompileErrorReason.png](https://oss-club.rt-thread.org/uploads/20230325/e54a774e8f2182e6f945673880d4e29b.png.webp) 默认在VS Code中生成的部分文件信息如下: ```C # modified by rtthread.studio.vscode DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections' CFLAGS = DEVICE + ' -Dgcc' CFLAGS += ' -O0 -gdwarf-2 -g' CXXFLAGS = CFLAGS AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' AFLAGS += ' -gdwarf-2' POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' ``` 将上方的内容删除,使用此处提供的新内容。`注意,根据使用的CPU不同,cortex-m3,lds路径`均要根据具体的处理器进行相应修改。 ```c # modified by rtthread.studio.vscode DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections ' CFLAGS = DEVICE + ' -Dgcc' CFLAGS += ' -O0 -gdwarf-2 -g' CXXFLAGS = CFLAGS AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' AFLAGS += ' -gdwarf-2' LFLAGS = DEVICE + '-Wl,-gc-sections, -T linkscripts//STM32F103ZE//link.lds' POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' --format=berkely' +' $TARGET \n' ``` **Step 5**. 再次编译。 此时,VS Code能得到正确的编译结果。从结果中可以看到,RT-Thread Studio和VS Code编译后的text内容相差4个字节。我思考了很久,暂时没有找到答案。以后解决了再来填坑 [## TODO] ![FisrtCompileResult.png](https://oss-club.rt-thread.org/uploads/20230325/eec4f1eded58816544da5bba16e63644.png.webp) ## VS Code的下载配置 **Step 6**. 下载程序。 点击下载,下方的输出窗口提示出错,无法找到ST-Link Programmer。 ![Download2STM32.png](https://oss-club.rt-thread.org/uploads/20230325/edf0cd9b46b712461fa833bbcedbd5e4.png.webp) **Step 7**. 修改下载配置。 在工程上点击右键,进入属性配置。此处要重点关注如下逻辑: `文件夹 > 工作区 > 用户` `文件夹`的配置优先级要高于`工作区`和`用户`。因此,此处在`文件夹`的属性中配置下载路径。RT-Thread团队已经很贴心地给出了参考目录。由于我是将RT-Thread Studio安装在C盘默认路径下,因此,只需要将官方示例的文字内容复制,将`D`改成`C`即可。各位可以按照自己的实际安装路径进行配置。 配置后,再次点击下载,在VS Code中编译的工程会成功下载到STM32F1处理器中,通过终端工具发现程序成功得以运行。 ![ConfigDownload.png](https://oss-club.rt-thread.org/uploads/20230325/fe0f209511abbc72c990355b6736bb38.png.webp) ## VS Code下添加组件 **Step 8**. 在VS Code环境下添加FAL。 本文原计划是基于v4.0.5版本撰写,因为该版本中默认不含FAL,需要通过软件包下载。但是,前文生成工程时误用了v4.1.0,因此,下文继续基于v4.1.0进行添加。 在4.1.0中,FAL是RT-Thread Component的一部分,因此,需要通过Settings配置打开Component,而不是去online packages中寻找FAL。 ![ConfigComponent.png](https://oss-club.rt-thread.org/uploads/20230325/f08fd27a21b662fb191aba9138604b3f.png.webp) 此处需要说明的是,由于版本不同,在VS Code中点击`RT-Thread Settings`,会出现下图中无法找到`Tkinter`的错误。 ![sons_pyconfig_error.png](https://oss-club.rt-thread.org/uploads/20230325/10de37cbeb76a7f0a99ec50ec3e25937.png) 解决方案是,在官网上下载最新的env工具包,然后将其中tools路径下的PYTHON27和PYTHON27_32覆盖到T-Thread安装路径下`\RT-ThreadStudio\platform\env_released\env\tools`即可。 ENV安装包可以在官网:https://www.rt-thread.org/download.html 下载,如下图所示 ![Env Download](https://oss-club.rt-thread.org/uploads/20230325/36d674d095cd34a22af466128693b58d.png.webp) 解决`Tkinter`错误之后,再次点击`RT-Thread Settings`,会出现如下配置。我们在Components组件中找到FAL,使能FAL。本文仅做最基础的入门操作,因此不使能SFUD。 ![Menuconfig.png](https://oss-club.rt-thread.org/uploads/20230325/1349e00d15bdd0412700b95b401e534b.png.webp) **Step 9**. 更新软件包。 使能FAL后,保存,关闭`RT-Thread Settings`。然后在工程名称上点击右键,更新软件包。然后,在下方命令行中输入: ```c scons --userconfig = .config ``` **这一条命令,我不太确定是否必须。感兴趣的朋友自行验证。** ![UpdatePackage.png](https://oss-club.rt-thread.org/uploads/20230325/90f6ae269b85ddf1283d47039cebdcc8.png.webp) **Step 10**. 再次编译程序且出错。 再次编译程序,提示fal_cfg.h文件无法找到。 ![SecondCompile.png](https://oss-club.rt-thread.org/uploads/20230325/6c27941d8b41cf6eb8341c0181001750.png.webp) 解决方案不难。我个人习惯是,将fal\samples\poring路径下的fal_cfg.h文件,剪切至fal\inc路径下。 ![CutFALCFG.png](https://oss-club.rt-thread.org/uploads/20230325/d2223a8c43598d5477f24de810dc9703.png.webp) 默认的fal_cfg.h文件中,有一个norflash和stm32f2的示例。我在本文中,仅仅使用了STM32F1的自带Flash,因此,建议按照下方的代码进行修改。配置过程如下: - 首先在board.h中使能`#define BSP_USING_ON_CHIP_FLASH` - 然后在stm32f1xx_hal_conf.h中使能`#define HAL_FLASH_MODULE_ENABLED` - stm32_onchip_flash变量位于drv_flash_f1.c中,将原文的stm32f2_onchip_flash修改成该变量 - 去掉FAL_FLASH_DEV_TABLE中的NorFlash - 将FAL_PART_TABLE中的字符串修改成与drv_flash_f1.c文件中的stm32_onchip_flash初始化内容一致 - 按照个人需求修改分区表FAL_PART_TABLE 出于演示的需要,我将FLASH分别配置成128KB,128KB,256KB。 ```c /* ===================== Flash device Configuration ========================= */ extern const struct fal_flash_dev stm32_onchip_flash; /* flash device table */ #define FAL_FLASH_DEV_TABLE \ { \ &stm32_onchip_flash, \ } /* ====================== Partition Configuration ========================== */ #ifdef FAL_PART_HAS_TABLE_CFG /* partition table */ #define FAL_PART_TABLE \ { \ {FAL_PART_MAGIC_WORD, "bl", "onchip_flash", 0, 128*1024, 0}, \ {FAL_PART_MAGIC_WORD, "app", "onchip_flash", 128*1024, 128*1024, 0}, \ {FAL_PART_MAGIC_WORD, "download","onchip_flash", 256*1024, 256*1024, 0}, \ } #endif /* FAL_PART_HAS_TABLE_CFG */ #endif /* _FAL_CFG_H_ */ ``` 修改后再次编译,出现了新的错误,提示无法找到变量`stm32_onchip_flash`。 此处的原因是,V4.1.0的配置中,没有去掉以前PKG方式的配置,导致在drv_stm32_flash.c中,这部分代码没有被添加进来。 ![PKG_FAL_ERROR.png](https://oss-club.rt-thread.org/uploads/20230325/b22aa9d2a46d325fd7fe25fbeb7b4b59.png.webp) 通过简单修改,在drv_flash_f1.c中,添加一句`#define PKG_USING_FAL`即可。 ![ConfigPKGDefine.png](https://oss-club.rt-thread.org/uploads/20230325/f2594ef9e7ac538113c5f1ad2d7609e0.png.webp) 在main函数中添加fal_init,对FAL组件进行初始化,编译无误,运行正确的结果。 ![FAL_init.png](https://oss-club.rt-thread.org/uploads/20230325/841a59373d0ce29daed34449f2705f6a.png.webp) ![SecondDownload.png](https://oss-club.rt-thread.org/uploads/20230325/9f302fa9c019c17bb3d1f083a61aebd7.png.webp) 为了进一步验证结果,屏蔽main函数中的log输出,重新下载后,使用fal probe和fal read命令,可以发现在bl分区,即0x08000000地址上,出现了熟悉的栈顶指针和中断向量表。 ![fal_result.png](https://oss-club.rt-thread.org/uploads/20230325/cfdc24ca6d1022d5c0b4fc43254dca7a.png) ## 后续 最后一部分内容是Debug。点击Debug,会弹出属性窗口,按照官方配置后,依然无法Debug。我根据对应的错误提示,正在下载最新的GNU_Tools_for_ARM_Embedded_Processors,不确定能否解决。 本坛也有相关提问,但目前尚未得到解决。若后续能成功解决,我再来更新本部分内容。 https://club.rt-thread.org/ask/question/60e7a9c181d83c4b.html ![image-20230325193749838.png](https://oss-club.rt-thread.org/uploads/20230325/f8b35c78b14b85a768dbac7eb88b1219.png.webp) ![Try2Debug.png](https://oss-club.rt-thread.org/uploads/20230325/0b5dab3559cfefbf75ed4e18764bc496.png.webp) ## 小结 在本文中,简单演示了在VS Code环境下编译、下载、添加组件、修改再编译的过程。得到的结果与Studio一致。通过这个过程,对GCC的编译会有更深的体会。 至于修改rtconfig.py部分的参数,可以对照GCC手册进行查找和阅读。我能懂其中一部分,但是限于个人水平,就不展开说明了。本文若有遗漏和错误,欢迎各位不吝赐教,谢谢! ## 补充 2023-03-26 17:00 补充文章部分内容: 已有在Studio中配置成功的工程,相关组件包括F429+MQTT+WebClient+OTA+FAL+SD+FatFS+Libc+ADC+AT Client等。 在VS Code上,将上述已有丰富组件的工程重新编译通过了,第一次成功的过程比较麻烦,主要是package中的samples在VS Code中通过Scons无法排除构建,只能一个个手动删,且同时修改在applications中生成的Sconscript。 第二次严格按照如下步骤执行,packages中的samples.c等文件并不会参与到构建过程中。不需要手动删除,验证过程耗时短,简单可行。 步骤: 1.同步C/C++设置 ```c scons --target=vsc -s ``` 2.打开RT-Thread Settings,保存 3.更新Scons所用的config ```c scons --useconfig=.config ``` 4.确认一下根目录下的的Sconstruct中`objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)`,编译,等待applications中生成Sconscript,然后按照如下过程修改 ```c import rtconfig from building import * cwd = GetCurrentDir() src = Glob('../applications/*.c') + Glob('../drivers/*.c') + Glob('../libraries/STM32F4xx_HAL_Driver/Src/*.c') + Glob('../libraries/STM32F4xx_HAL_Driver/Src/Legacy/*.c') + Glob('../libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/*.c') + Glob('../libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/*.S') CPPPATH = [ cwd, cwd + '/../applications', cwd + '/../drivers', cwd + '/../libraries/STM32F4xx_HAL_Driver/Inc', cwd + '/../libraries/STM32F4xx_HAL_Driver/Inc/Legacy', cwd + '/../libraries/CMSIS/Include', cwd + '/../libraries/CMSIS/RTOS/Template', cwd + '/../libraries/CMSIS/Device/ST/STM32F4xx/Include', cwd + '/../drivers/include', cwd + '/../drivers/include/config', ] CPPDEFINES = [ 'SOC_FAMILY_STM32', 'SOC_SERIES_STM32F4', 'USE_HAL_DRIVER', 'STM32F429xx', ] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) Return('group') ``` 5.修改rtconfig.py ```c # modified by rtthread.studio.vscode DEVICE = ' -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections' CFLAGS = DEVICE + ' -Dgcc' AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T linkscripts//STM32F429VI//link.lds' CFLAGS += ' -O0 -gdwarf-2 -g' AFLAGS += ' -gdwarf-2' CXXFLAGS = CFLAGS POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' ``` VS Code编译结果 ```c LINK rt-thread.elf arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin arm-none-eabi-size rt-thread.elf text data bss dec hex filename 441700 3116 118176 562992 89730 rt-thread.elf scons: done building targets. ``` RT-Studio编译结果 ```c make -j8 all arm-none-eabi-size --format=berkeley "rtthread.elf" text data bss dec hex filename 442720 3108 118144 563972 89b04 rtthread.elf Used Size(B) Used Size(KB) Flash: 445828 B 435.38 KB RAM: 121252 B 118.41 KB ``` 尚未下载验证。
14
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
lchnu
Witness, Understand, Skill
文章
10
回答
229
被采纳
88
关注TA
发私信
相关文章
1
潘多拉开发板在VSCODE无法执行micropython
2
vscode qemu debug 遇到的问题
3
rtthread使用makefile开启动态方式创建线程失败
4
VScode调试qemu-vexpress-a9工程,GDB出错,求助~
5
使用Vscode+qemu调试RT-Thread,F5调试时报错
6
在VScode适用studio插件项目里面的环境变量问题
7
vscode插件编译报错
8
如何vs code中新建rt-thread在项目?
9
GD32VF103 VSCODE开发环境移植问题
10
在bsp目录下打开vscode,没办法通过vscode查看src目录下的源文件
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部