Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
vscode
RT-Thread with VS Code之MacOS篇 - 系列2
发布于 2023-03-27 23:42:10 浏览:2781
订阅该版
[tocm] ## 前言 前文在Win环境下使用VS Code进行了工程构建与编译。本文初步探讨MacOS+VScode下的基础开发环境。 [前文提要: RT-Thread-RT-Thread with VS Code之Windows篇RT-Thread问答社区 - RT-Thread](https://club.rt-thread.org/ask/article/564516da5e187209.html) 为了保证过程的可复现,本文在出厂条件下的Mac Air M2上进行探索,之前未安装任何嵌入式相关工具。 ## VS Code on Clean Mac **Step 1. VS Code 安装 ** 首先下载VS Code Silicon版本,安装RT-Thread Studio插件,该插件依赖于C/C++和Cortex-Debug插件,安装Studio插件后,依赖插件自动添加。  **Step 2 打开原有工程,Scons出错 ** 首先将workspace保存在硬盘某个目录,个人习惯,可忽略,但强烈建议。  尝试打开在RT-Thread Studio下创建的工程。  添加工程后,使用`scons --target=vsc -s`命令行或者`工程名称右键->同步C/C++设置`,会提示无法找到Scons命令。  因此,下一步需要安装Scons环境。根据官方教程和网络资源,一般有两种处理方式: - 在Python3 环境中安装Scons。经过验证,不可行; - 在Python2环境中安装Scons。经过验证,可行。 下文依此开展讨论。 ## Scons 4.5.2 on Mac with Python 3 Wrong 官方链接指导用户在MacOS上使用QEMU,需要依次安装Python3, Brew,Scons, QEMU,从而在MacOS上顺利进行仿真,参考链接如下: [RT-Thread/quick_start_qemu_macos.md at master · PoisonNF/RT-Thread · GitHub](https://github.com/PoisonNF/RT-Thread/blob/master/documentation/quick-start/quick_start_qemu/quick_start_qemu_macos.md) `但是,很遗憾的是,官方链接中的解决方案在我的这台Mac上运行不成功,Scon版本太高,运行时出错。` 下方的安装过程,是我走过的弯路,但是对新用户而言,可以了解scons的安装、MacOS下环境变量的设置,对以后使用可能会有些帮助。所以,我将详细过程也记录下来。 **Step 1. Python3确认与命令行安装** Mac air M2自带Python3。可以通过命令看到Python3的默认位置 ```c which python3 ``` 如果需要在终端工具中,使用python3的相关安装命令,则需要安装命令行开发者工具。具体如下所示:   **Step 2. Scons安装 ** 安装好了命令行工具后,在终端中输入如下命令,安装Scons ```c python3 -m pip install scons ``` 很遗憾,安装完毕后,依然无法在命令行使用scons。  **Step 3. 环境变量设置 ** 为了在任意路径下均能使用Scons,需要将Scons的路径写入到环境变量中。 首先使用如下命令,打开zshrc文件 ```c sudo vi ~/.zshrc ```  然后编辑zshrc文件。输入密码后,会弹出如下窗口,按下键盘按键`i`,进入编辑模式,输入命令将Scons加入环境变量 ```c export "PATH=$PATH:/Users/lichuang/Library/Python/3.9/bin" ```  输入完毕,按下键盘上的`ESC`退出编辑模式,然后按下键盘`:`键,在最下方输入`wq`保存。  保存完毕,执行一次如下命令生效zshrc,每次修改后该命令仅仅需要运行一次。 ```c # This is only needed once after `~/.zshrc` is modified source ~/.zshrc ``` 然后就可以使用`scons --version`查看Scon的版本号。如图所示,在Python3环境下顺利安装了Scons 4.5.1版本,且支持在任意路径下使用Scon命令。  **Step 4. 高版本Scons运行错误 ** 很遗憾,在Python3环境下安装的Scon 4.5.1版本,在VS Code中运行错误。  为了后面在Python2环境下安装的Scons能够正常工作。需要重复上述步骤3,将Scons从环境变量中删除,此处不在赘述。 ## Scons 3.1.2 on Mac with Python2 Correct 为了顺利在VS Code中使用Scons,我们需要Python2的环境。 **Step 1. 安装Python2.7.18** Python 2.7.18可以在如下链接中找到。为了简单起见,本文配置不再zshrc。因此,本演示中下载了MacOS 64-bit installer版本。 [Python Release Python 2.7.18 | Python.org](https://www.python.org/downloads/release/python-2718/)  安装完毕后,打开终端工具,输入python2,可以查看python版本。  **Step 2. Python2环境安装Scons** 在Python2环境中安装Scons,使用如下命令: ```c python -m pip install scons ```  **Step 3. VS Code验证Scons** 安装Scons完毕,确认Scons的版本号为3.1.2。然后进入VS Code再次同步C/C++设置,或者直接在VS Code终端中输入命令行。如图所示,Python2 + Scons 3.1.2在VS Code下工作良好。 ```c scons --target=vcs -s ```  ## arm-none-eabi-gcc Scons在VS Code中用于构建工程。为了在MacOS中交叉编译STM32(Cortex-Mx系列ARM处理器),我们还需要arm-none-eabi-gcc编译器。 **Step 1. 安装gcc** 下载链接如下所示。为了后续使用方便,也不再编辑zshrc,我在演示中使用了pkg安装包。安装完毕后,默认路径是`\Applications\ARM`。 [Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer](https://developer.arm.com/downloads/-/gnu-rm)   **Step 2. gcc加入环境变量** 依次使用如下语句打开vim,编写、确认版本号即可。使用pkg安装包,可以一次成功。 ```c sudo vi ~/.zshrc //edit zshrc with the following code //export "PATH=$PATH:/Applications/ARM/bin" // only need once source ~/.zshrc arm-none-eabi-gcc -v arm-none-eabi-gcc --version ```  至此,完成了Scons和GCC的安装,可以顺利在VS Code中编译程序代码了。 后续如果需要安装Jlink等,需要再安装Homebrew,在brew环境下安装即可。此处不再赘述。 ## VS Code Compile **Step 1. 打开某个工程** 在本演示中,使用了本人以前在Win RT-Thread Studio中创建的工程。该工程基于STM32F429,使用了FAL+QSPI接口Flash+Qboot的组件,RT版本使用4.0.2。 **Step 2. 修改rt-config.py选项** 取消文件夹中的`在编译前自动检查/更新rt-config.py`文件,然后再勾选上。会自动在applications中生成一个Sconscript文件。  **Step 3. 修改applications中Sconscript** 原始生成的Sconscript如下图所示,其中,src部分根据开启的pakcage会有所不同,CPPPATH部分则对应工程中的头文件。  为了顺利编译工程,需要对该文件进行修改: - 若在29行后,有`c,m`等字样,则删除; - 去掉22行的`str(Dir('#'))` - 修改第6行的src,基本HAL库和board等即可 我在工程中使用的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 + '/../drivers', cwd + '/../packages/quicklz-v1.0.1', cwd + '/../packages/qboot-v1.05/inc', cwd + '/../packages/fal-v0.5.0/inc', cwd + '/../packages/crclib-v1.00/inc', 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') ``` **Step 4. 修改rt-config.py文件** 根据自己工程实际使用的CPU修改如`cortex-m4`, `STM32F429VI`等字样。 ```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' ``` **Step 5. 编译 ** 编译顺利通过,Mac Air M2使用scons -j 32耗时约15秒,相较于M1 Pro速度有所下降。  **Step 6. 下载** 目前,Mac上还没有安装brew和Jlink。为了快速验证,我在main函数中新增了一条LOG_I语句,编译生成rtthread.bin文件,然后将新生成的rtthread.bin文件拷贝至Windows RT-Thread Studio工程目录下,在RT-Thread Studio中通过Jlink下载。 下载程序后的结果如下图所示,新增的LOG信息和RT-Thread的编译时间信息表示,在Mac上用VS Code编译生成的代码,顺利在电路板上运行。  ## 小结 本文初步探讨了在纯净Mas OS环境下的编译与构建工具的搭建问题,讨论了Scons安装、gcc complier安装、环境变量设置、rt-config.py文件改写、Applications\Sconscript文件改写等问题。 至于MacOS下Env工具、工具包(Pkgs)新增与更新等问题,后续会`按照Win环境工程在Mac环境下的更新与构建 -> RT-Thread git包基于BSP的构建 -> CSP工程 -> BSP自定义工程`的顺序依此更新。由于水平有限,不足之处敬请批评指正。
7
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
xiaorui
3
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部