文章目录
最近一段时间都在用沁恒家的 MCU 开发一些小玩具,例如 CH32V003、CH585 等。之前开发的项目,工程和工具链都是使用的 Visual Studio Code + PlatformIO 插件来管理的,整体用起来也还算方便。
前段时间发现沁恒发布新版本的 MounrRiver Studio II,框架换为了 Visual Studio Code,另外更重要的是,除了 Windows/Linux 系统外,还支持 macOS 操作系统 啦~这不得赶紧下载体验一番。我也在网上搜索了一下,本身 MCU 厂商提供 IDE 的就不多,基于 Visual Studio Code 开发并且集成全套 RISC-V 工具链就更少了,不得不说沁恒在开发者生态的建设上还是花了功夫的。
这次就拿之前开发过的基于 CH32V003 的 UVLED 紫外固化灯固件项目,来试试新 MounrRiver Studio II 好不好用~
PS. 为了打字方便 MounrRiver Studio II 后面都缩写成 MRS2 了 😃。
下面会从界面、迁移工程、烧录、调试几个方面体验一下 MRS2 的功能。
整体界面
MRS2 虽然是基于 Visual Studio Code 构建的,但是界面上还是做了相当多的定制,并不是和 Visual Studio Code 完全一样。
在 MRS2 中,增加了顶部工具栏,将常用操作都放在了这个工具栏中,例如构建工程、下载固件到 MCU、调试固件等,在需要使用这些功能时,不用费劲地在菜单里找来找去了。
另外在左侧的资源管理器也定制过了,能更清晰的展示一个 MCU 固件工程的项目结构。
PS. 现在 MRS2 还集成了 WCH 芯片样品申请入口 😃,就在主界面右下角,可以一键到达官网填表申请 MCU 样品,之前申请了几个 CH582 芯片和开发板,还是挺方便的。
新建工程
作为沁恒自家开发的 IDE,对自家青稞 RISC-V 系列 MCU 的支持肯定相当到位了,在新建工程里,可以直接看到 WCH 全系列 MCU 的列表,也可直接根据系列名称筛选,例如我常用的 CH32V003,直接用 003 筛选就可以了。
另外在新建工程时,对于资源更丰富一些的 MCU,还可以选择不同的系统框架,CH32V003 只能使用 NoneOS,但是 CH32V103 就可以使用 FreeRTOS、HamonyOS、RT-Thread 等各种系统框架了,这对于要构建复杂 MCU 应用的项目来说,还是方便很多的。
这里就新建一个 CH32V003 + NoneOS 项目,把之前做的智能紫外线固化灯项目迁移过来尝试一下。
迁移 UVLED 项目
如果之前是使用 MounRiver Studio I 开发的工程,在 MRS2 里面也是直接打开的,兼容性方面还不错。
不过我这里因为老 macOS 工程结构的原因,选择复制文件来迁移 UVLED 项目。过程相当简单,直接把所有项目代码文件复制到新工程的 User
目录中,再把自动生成的 main.c
删掉就可以了,一把梭~
给项目增加 C++ 编译支持
然后就碰到问题了,编译输出竟然说找不到 main.o
,项目模板里面是 C 项目,难道是 MRS2 不支持 C++ 项目吗?
在找了沁恒的支持后,发现需要在状态栏里切换一下项目类型:
切换成 C++ 项目,就可以正确识别 cpp 文件开始编译了。
好了继续去下一关。
修改 C++ 标准为 C++17
因为之前在使用 PlatformIO 时就直接用了 C++,而且平时写 C++ 项目时也直接用了 C++17 标准相关的语法,没想到在这里编译时也出现问题了。
有一段结构体数组的初始化编译不过,具体的代码如下:
这个好找,在 工程属性 设置中,将 GNU RISC-V Cross C++ Compiler
中的 Language standard
修改为 GNU ISO 2017 C++ (-std=gnu++17)
就可以了。
去除重复符号
胜利在望了,UVLED 项目的主要代码都可以编译通过,进入链接阶段了,这个时候报了个重复符号的错误:
这个就简单了,之前的项目中,已经定义了中断相关的处理函数,在 MRS2 创建新的项目时,也创建了对应的中断处理函数,就在 ch32v00x_it.c
这个文件中,所以导致了两边符号重复定义的问题。
反正原来的中断处理也没有写代码,只要把原来项目代码中的中断处理函数都注释掉就可以了。
编译成功
一番操作之后,终于把 UVLED 项目编译成功了。
接下来可以开始烧录固件了。
编译结果分析
哦,顺便发现了 MounRiver Studio 里面也带了个类似 PlatformIO Inspect 的功能,叫“编译结果分析”,可以详细查看编译出来的固件 Flash、RAM 使用量,以及各种符号的占用空间大小。
这样就可以在 Flash 或 RAM 不够用时,明确裁剪的方向了。
固件烧录
固件烧录就比较简单了,MounRiver Studio II 已经集成了烧录工具链,在工程属性的下载设置里,也可以直接对 WCH-LinkE 进行检测和设置。
对于 CH32V003 来说,需要将 WCH-LinkE 的模式设置为 RISC-V,这个在设置里可以直接操作。
最后将 WCH-LinkE 连接到 PCB 上的 SWDIO,点击下载就可以完成固件的烧录了。
这整个烧录体验还是相当丝滑的。
仿真调试
之前使用 PlatformIO 开发 UVLED 的时候,在调试固件时都是使用串口输出调试信息来 debug,但是有些时候代码写得不完善,并不会走到输出调试信息那一行,直接就抓瞎了。
我没有去深入研究过,可能 PlatformIO 可能也支持仿真调试?但是本身配置工作就比较麻烦了。
一键调试
在 MRS2 里面就方便很多了,直接 F5 一键进入调试模式,随意下断点、看堆栈、看变量,有了使用 Visual Studio 开发桌面端应用的感觉。
在进入调试后,可以直接针对具体的代码行加断点,同步看被调试固件的源代码、反汇编代码、局部变量、全局变量、函数调用栈等信息,这相对于使用串口来调试,简直就是鸟枪换炮了 😃。
下面就是直接单步执行到了 I2C 初始化的代码,可以清晰看到调用栈是 main => OLED_init => I2C_start
。之前就是在调试 I2C 读取数据过程中花了很大功夫,要是早点能使用这样的方式来调试,应该效率会高很多。
semihosting
另外 MounRiver Studio 还有个 semihosting 功能,可以直接将 MCU 固件代码中的 printf 重定向到 MounRiver Studio 的控制台中,这样在调试的时候如果用了串口,也不需要额外的硬件的。
最简单的情况下,只需要 WCH-LinkE 连接 V3、GND、SWDIO 三根线就可以搞定一个单片机的开发、测试、调试了 🤩。
semihosting 功能可以在调试配置中打开:
可以看到固件代码中的 printf,直接输出到了 MounRiverStudio 的 调试控制台,这样在调试的时候,就不用开好几个软件、连接额外的串口调试器了。
在线异常追踪调试
另外还发现 MRS2 有个在线异常追踪调试的功能,可以实现不复位进入调试状态。
在实际的嵌入式产品使用场景中,有部分代码异常运行现象只会在特定的软硬件环境下偶现。此时如果采用常规的在线仿真调试手段,需要先复位芯片再进入调试模式,从而导致多次重试都无法复现之前的异常现象,极大降低了此类问题的处理效率。
通过 MRS2 的在线异常追踪调试功能,可以通过GDB指令,获取芯片当前变量、寄存器、Flash、调用栈内容,不需要复位 MCU 就可以直接进入调试状态,这个时候就能看到异常发生那一刻的 MCU 的各种现场数据了,包括现场的调用堆栈、变量等信息,还可以 dump 内存,都免去了先复现问题的过程,排查问题效率也会高很多。
我这里测试的时候并没有发生异常,但是还是可以直接捕获了正在执行的现场,如果有异常的话,就可以使用这里的堆栈、数据来排查问题了。
远程源码级、目标代码级调试
另外,MRS2 还支持远程调试功能,通过近、远端 MRS2 中运行的远程协助模块将近端(调试方)编译生成的目标文件、调试指令等加密发送至远端(被调试方),再自动调用远端连接的 WCH-LinkE 硬件调试器与芯片通信,完成各项单步操作,并将单步调试执行结果回显到近端。
MRS2 也支持远程目标代码级调试:近端用户将修改后编译生成的目标文件远程下载到目标芯片,然后根据远端回显的芯片运行时打印信息来调整近端源码,再重复上述下载、查看回显信息过程,直到确定最终的代码内容。
这个功能听起来以后找技术支持就更方便了,可以直接现场 debug 😃。
不过在 macOS 版本里没有找到这个功能,没办法实际体验,尝试用用户反馈咨询了官方,没想到还真收到回复说 macOS 后续版本就会支持,期待一下,等新版本发布了再尝试看看。
其他功能
另外对于 Visual Studio Code 本身对于 C、C++ 项目的分析功能就不多赘述了,像什么代码跳转、自动完成、大纲等能力,那都是基本操作了。
和 PlatformIO 功能对比
PlatformIO 作为一个通用的嵌入式开发插件,主要使用的场景还是那些没有自家 IDE 的单片机产品,以及可以对多种单片机的框架集中进行管理。
但是如果是针对青稞 RISC-V 系列 MCU 进行开发的话,我觉得使用 MounrRiver Studio II 应该是更优选择了。
使用 MounrRiver Studio II 优势 :
- 内嵌了 WCH MCU 的各种库、框架,并且支持自动更新
- 基于 Visual Studio Code 开发,编码功能强大
- 集成了下载、调试工具,无需额外安装
- 可以一键进入调试模式,无需额外配置
0 条评论。