一、概述
MounRiver Studio Ⅱ(MRS2)为MounRiver Studio的换代版本,从V2.1开始,框架更换至更现代的VSCode,并深度定制开发。在工程管理、代码编辑、编译、调试等方面均兼容之前版本,并在效率和功能等方面进行提升,着力将MRS打造为更加轻量化、智能化、高效化的RISC-V IDE。同时,提供Windows/Linux/macOS 以及国产操作系统版本,用户可以前往MRS官网进行下载。
二、MRS2亮点
- 高速化软件启动:针对安装速度、软件框架启动速度进行了专项优化。
- 自动化工程配置:从模板无需设置直接创建工程、自带默认的编译配置、工具链切换时编译选项联动修改。
- 实时化全局搜索:搜索结果根据实际文件内容实时刷新。
- 智能化代码辅助:支持代码导航、补全、诊断、格式化、重构以及代码的实时静态语法分析;
- 可视化代码分析:支持图表化显示代码中ROM,RAM用量占比、函数及变量占用内存大小及变化、输出文件各段数据实际大小等。
- 高效化芯片调试:除常用的在线仿真调试外,还支持在线异常追踪调试以及远程调试。
- 多样化辅助工具:集成HEX/BIN文件处理、串口调试、ISP下载、二进制文件浏览等多种嵌入式开发辅助工具。
三、核心功能介绍
3.1工程创建
- 内置芯片模板工程,支持快速创建项目
MRS2内置了沁恒微RISC-V芯片裸机及嵌入式实时操作系统工程模板,配套提供完整的编译、下载、调试参数文件,无需手动逐一设置,可直接一键式创建项目。
- 自定义工程模板创建、导入、导出功能
MRS2支持将自定义的项目创建为芯片工程模板并导出,再由安装在其他主机上的MRS2导入后,即可在新建工程时使用自定义的芯片工程模板创建项目。
3.2工程管理
- 支持多种工程加载方式,便捷切换目标芯片型号
MRS2兼容旧版MRS创建的工程、解决方案以及WCH EVT工程,可双击.wvproj/.wvsln文件或软件内菜单项加载工程/解决方案。MRS2还支持切换当前目标芯片型号,同时自动设置对应的下载、调试参数。
- 内置文件版本管理功能,支持回溯历史版本源码
MRS2在文件保存时会自动按照分钟级的时间跨度进行版本备份,用户可以查看、对比任意备份的文件历史版本,并支持同步两个文件历史版本间的代码差异。
3.3代码编辑
- 自由添加文件书签、笔记
MRS2可通过快捷键或右键菜单添加代码书签、笔记,支持快捷键方式跳转、专属页面全局管理,该功能不会像代码注释一样修改源码,修改后不影响源码编译结果,有助于审阅、浏览代码时添加备注信息。
- 主动式文件编码识别,避免中文字符出现乱码
由于在Windows/Linux/macOS等平台下,文件的默认编码方式不同,导致更换平台加载工程时,包含中文的源码往往会显示为乱码,此时用户需要手动调整当前编辑器或整个集成开发环境(IDE)的默认文件编码。而当一个工程中包含多种编码方式的文件时,大多数只支持设置全局文件编码的IDE更是无法准确加载每个文件的中文字符。
MRS2支持在打开文件时自动识别其编码方式,并提供切换浏览、保存文件时编码的快捷按钮,轻松应对跨平台浏览源码、加载包含不同编码文件工程等IDE使用场景。
- 主动式标点转换,防止符号误输入
在编写代码过程中,开发者经常面临在集成开发环境与其他软件之间不断切换使用的场景,可能导致部分全角符号被误输入到代码中,尤其是逗号、分号、圆角括号等半角、全角模式下外观差异不大的标点符号。开发者需要依赖集成开发环境在语法分析、代码编译阶段的报错提示,才能逐个修复误输入的符号。
而MRS2在支持上述被动检测符号语法的基础上,还增加了主动式标点转换功能,可以将代码编辑区输入的逗号、分号、圆角括号等全角字符直接转换为半角字符,避免了后续手动修改的步骤,提升了代码开发效率。
3.4智能代码辅助
- 代码补全
在MRS2中,可以通过使用代码补全来更快输入代码。只要开始输入关键字、变量名或函数名,MRS2便会提供一系列匹配的建议供你选择。
- 代码格式化
在软件开发过程中,代码的整洁性和一致性对于提升代码质量和维护效率至关重要。为此,我们提供了强大的代码格式化功能,帮助开发者轻松修正代码的缩进、换行以及重新排列注释,以确保代码结构的清晰和易读。
此外,我们还支持自定义代码格式模板,允许开发者根据自己的编码习惯和项目需求,灵活设置代码的格式规范。有助于保持代码风格的一致性,从而减少因格式差异而导致的代码审查冲突和误解。
- 代码导航:精准定位,实时更新
在软件开发过程中,高效地导航代码是提升开发效率的关键。MRS2提供的代码导航功能,不仅能够快速跳转至代码的声明、定义和引用位置,而且具备实时更新的能力,确保即使文件经过修改,导航也不会跳转至过时的位置。
- 代码重构:全局多次重命名,安全可靠
在软件开发过程中,全局重命名是一项至关重要的功能,它允许开发者快速且准确地更新代码中的变量名、函数名等符号,以保持代码的一致性和可读性。
MRS2支持跨文件的多次全局重命名,在进行全局重命名时能够理解代码中的上下文和作用域,即使存在相同名称但作用域不同的局部变量,也能被准确地区分和重命名,而且无论涉及的文件数量多少,都能准确且一次性地完成所有相关标识符的更新。
- 代码分析:代码质量实时监控(clang-tidy实时分析)
MRS2能够实时监控代码,寻找其中可能存在的错误。一旦发现任何潜在问题,它会在编辑器中高亮显示可疑的代码段,帮助开发者迅速定位并解决问题。
- 代码诊断:快速修复,高效解决编译问题
MRS2支持快速修复功能。该功能能够自动为许多常见的编译问题提供修复建议,并且可以根据建议自动更新代码。
另外MRS2能够智能识别代码中的点操作符(.)和箭头操作符(->),并完成两者的自动转换,有助于减少因操作符使用不当而导致的编译错误。
3.5代码编译
- 可视化编译分析,输出段用量占比全展示
在嵌入式开发过程中,开发者经常需要留意编译输出文件中芯片FLASH及RAM区的使用情况,防止出现代码超出芯片容量的情况。而大多数集成开发环境在结束编译后,对此类信息的提示往往不够明显、详细,无形中增加了开发者在此类频繁操作上的时间成本和犯错风险。
MRS2支持在结束编译后可视化展示输出段的详细信息:输出段空间占比,FLASH/RAM使用情况,各变量、函数所在地址、大小、增删状态及所占空间大小变化。所有编译输出的关键信息一目了然,一定程度上提升了嵌入式项目的开发效率。
- 精准链接错误跳转
在嵌入式开发过程中,GCC链接阶段报错信息的准确性一直是开发者关注的焦点。传统的报错信息往往不够精确,错误跳转位置指向模糊,导致开发者在排查问题时耗时耗力。
MRS2改善这一情况,优化了错误报告机制,实现了精准的链接错误跳转功能,以提升开发效率。
MRS2
旧版MRS
3.6代码优化
- 快速中断:
增添了一种全新的中断服务程序处理模式,该中断服务程序将原本的 16 个寄存器的压栈、出栈操作予以减少,转而由硬件自动进行保存,提高了硬件中断服务程序的响应时间
未开启优化
开启优化
- 优化程序存储结构:
增加了highcode段,并将其部署在RAM区运行,且段中的函数将不会被内联,并对未使用的 highcode 段函数加以优化,降低 RAM和FLASH 的使用量
未开启优化
开启优化
- 自定义压缩指令:
新增8 条针对 MCU 8/16位数据操作的XW扩展压缩指令,使用MRS2内置的GCC12.2进行测试。利用 CSIBE Benchmark 进行 CodeSize 的对比实验,CSIBE套件中最好的优化比例为4.01%。
- 添加mcpy指令
mcpy指令功能与c语言库函数memcpy相同,使用于内存复制搬运场景,能够提高在内存区域与数据宽度非对其时内存搬运的速度。
- 兼容软件浮点库
对工具链中的 lib 库生成器以及 link 链接器的代码加以修改,针对未涵盖浮点数的库源码进行处理,生成能够同时兼容 ILP32、ILP32F 这两种 ABI 的库,使得所生成的库能够在具备硬件浮点扩展和不具备硬件浮点扩展的工程中均能正常使用,降低了开发者对库的维护工作量。
- 运行库优化
添加基于定点运算的数学函数库 IQMATH
添加专有打印函数printf,用以缩减代码规模
GCC8和GCC12生成的库,在链接时能够彼此兼容
3.7代码下载
- 内置专属下载模块,支持启用外部下载工具
MRS2内置了适配WCH-Link系列硬件调试器的代码下载模块,支持查询硬件调试器模式、开启/禁用芯片代码保护功能、设置芯片ROM+RAM分配状态、禁用芯片两线调试接口、全擦、下载、校验、复位、启用SDI打印等功能。同时,MRS2还支持切换为其他硬件调试器,按用户指定的启动参数调用外部软件来完成下载操作。
- 支持远程下载功能
MRS2还支持远程下载功能,通过近、远端MRS2中运行的远程协助模块将近端(调试方)编译生成的目标文件加密发送至远端(被调试方),再自动调用远端连接的WCH-Link硬件调试器完成下载操作,并将程序运行结果回显到近端。
- 集成多种独立下载工具
除了内置的下载功能模块,MRS2还集成了WCHISPStudio、WCH-LinkUtility等独立下载工具,以实现在不同的使用场景、芯片预留接口条件下满足开发者的代码下载需求。
3.8代码调试
- 完整的在线仿真调试功能
MRS2支持单步运行、重新运行、暂停运行等在线仿真调试功能,提供了代码反汇编、寄存器、外设、调用栈、变量等监控窗口。
- 支持一键开启RISC-V半主机模式(semihosting)
MRS2支持一键开启semihosting功能,无需开发者手动移植相关接口函数,可直接将打印函数输出的内容显示到控制台。配合简化的printf函数,在减少代码占用的同时,不再额外需要串口硬件、上位机串口接收软件,简化了代码的调试环境搭建过程。
- 在线异常追踪调试
在实际的嵌入式产品使用场景中,有部分代码异常运行现象只会在特定的软硬件环境下偶现。此时如果采用常规的在线仿真调试手段,需要先复位芯片再进入调试模式,从而导致多次重试都无法复现之前的异常现象,极大降低了此类问题的处理效率。
MRS2针对此类应用场景,特别支持了在线异常追踪调试方法,通过GDB指令,获取芯片当前变量、寄存器、Flash、调用栈内容,无需芯片先复位、运行再去监控变量、寄存器等内容,最大程度保留硬件瞬时状态,利于追踪代码问题。
- 支持远程源码级、目标代码级调试
MRS2还支持远程调试功能,通过近、远端MRS2中运行的远程协助模块将近端(调试方)编译生成的目标文件、调试指令等加密发送至远端(被调试方),再自动调用远端连接的WCH-LinkE硬件调试器与芯片通信,完成各项单步操作,并将单步调试执行结果回显到近端。MRS2也支持远程目标代码级调试:近端用户将修改后编译生成的目标文件远程下载到目标芯片,然后根据远端回显的芯片运行时打印信息来调整近端源码,再重复上述下载、查看回显信息过程,直到确定最终的代码内容。
四、开放性
- 开放式厂商组件
MRS2支持在线更新各类模块组件,如SDK、OpenOCD等。芯片及开发板厂商可以通过MounRiver组件发布平台,上传组件供其他用户下载使用。
五、下载与更新
- 访问我们的官方网站:http://www.mounriver.com/download,根据操作系统选择对应的安装包进行下载。
- 软件支持在线、离线更新操作。
六、反馈与建议
- MRS2内置反馈与建议通道
- 沁恒微电子官方论坛:https://www.wch.cn/bbs/forums/tech.html
- MRS2内置用户手册