基于VSCode软件框架的RISC-V IDE MRS2正式上线发布
基于VSCode软件框架的RISC-V IDE MRS2正式上线发布
一、概述
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内置反馈与建议通道
- MRS2内置用户手册
相关文章:

基于VSCode软件框架的RISC-V IDE MRS2正式上线发布
基于VSCode软件框架的RISC-V IDE MRS2正式上线发布 一、概述 MounRiver Studio Ⅱ(MRS2)为MounRiver Studio的换代版本,从V2.1开始,框架更换至更现代的VSCode,并深度定制开发。在工程管理、代码编辑、编译、调试等方面均兼容之前版本&#…...

AWS re:Invent 2024 - Dr. Werner Vogels 主题演讲
今年,我有幸亲临现场参加了所有的 keynote,每一场都让我感受到深深的震撼。无论是全新的功能发布,还是令人眼前一亮的新特性展示,每一场 keynote 都精彩纷呈,充满干货,值得反复学习和回味。 恰好ÿ…...

前端小案例——520表白信封
前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…...

FPGA随记——过约束
什么是过约束? 从字面意思来看,所谓过约束是指约束过紧了。这个“过”体现在setup requirement变小了,对于单周期路径,这个值通常与时钟周期一致,但在过约束情况下,等效于这个值变小了,也就是时…...

如何利用云计算进行灾难恢复?
云计算环境下的灾难恢复实践指南 天有不测风云,企业的IT系统也一样,我见过太多因为没有做好灾备而吃大亏的案例。今天就和大家聊聊如何用云计算来做灾难恢复。 一个惊心动魄的真实案例:某电商平台的主数据中心因为市政施工不小心挖断了光纤…...

【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
【华为OD-E卷 - 九宫格按键输入 100分(python、java、c、js、c)】 题目 九宫格按键输入,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母…...

基于AI大模型的医院SOP优化:架构、实践与展望
一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术取得了迅猛发展,尤其是大模型的出现,为各个领域带来了革命性的变化。在医疗领域,AI 医疗大模型正逐渐崭露头角,展现出巨大的应用潜力。随着医疗数据的海量积累以及计算能力的大幅提升,AI 医疗大模型能够对复杂的…...

Linux快速入门-一道简单shell编程题目
编写一个 Shell 程序。 功能:在用户家目录下创建一个文件夹myshell;进入此文件夹;在文件中创建文件aa.sh,如果文件夹或文件存在,则提示对象已存在,不创建。 代码编写 #!/bin/bash#获取用户家目录:方便后…...

Hive如何创建自定义函数(UDF)?
目录 1 自定义UDF函数基础 2 自定义UDF函数案例 3 创建临时函数 4 创建永久函数 1 自定义UDF函数基础 1. 内置函数:Hive 自带了一些函数...

聊聊前端框架中的process.env,env的来源及优先级(next.js、vue-cli、vite)
在平时开发中,常常使用vue、react相关脚手架创建项目,在项目根目录可以创建.env、.env.[mode](mode为development、production、test)、.env.local等文件,然后在项目中就可以通过process.env来访问相关的环境变量了。 下面针对如下…...

linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习
1.思维导图 2.练习 1.定义一个find函数,查找ubuntu和root的gid 2.定义一个数组,写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...

VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”
VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本”解决方案: 1.用get-ExecutionP…...

Android ActionBar 技术深度解析
Android ActionBar 技术深度解析 概述 ActionBar 是 Android 应用中的一个核心 UI 组件,用于提供导航、操作和品牌展示。它通常位于应用窗口的顶部,包含应用的标题、导航按钮、操作项等。ActionBar 自 Android 3.0(API 11)引入,并在 Android 5.0(API 21)后被 Toolbar …...

matlab-数字滤波器设计与实战
文章目录 数字滤波器设计FIR 滤波器设计IIR 滤波器设计巴特沃斯滤波器切比雪夫 I 型滤波器切比雪夫II型椭圆滤波器线性相位与非线性相位零相位响应数字滤波器实战数字滤波器产生延迟的主要原因补偿滤波引入的延迟补偿常量滤波器延迟补偿与频率有关的延迟从信号中除去不需要的频…...

JDK的运作原理
JDK(Java Development Kit)是Java开发者用来构建、编译、调试和运行Java应用程序的一套工具包。其核心原理涉及到Java语言的编译、执行以及Java虚拟机(JVM)的运作等多个方面。 1. Java编译原理 Java是一种先编译后解释执行的语言。…...

el-table 实现纵向多级表头
为了实现上图效果,最开始打算用el-row、el-col去实现,但发现把表头和数据分成两大列时,数据太多时会导致所在格高度变高。但由于每一格数据肯定不一样,为保持高度样式一致,就需要我们手动去获取最高格的高度之后再设置…...

Android Studio 下载安装教程(2024 更新版),附详细图文
今天,为大家带来的是Android Studio 2024更新版的下载安装教程,包含详细图文步骤。 随着 Android Studio 的不断更新,自从引入 Koala 系列后,其版本号的命名规则也发生了变化。以本次更新为例,版本号为 2024.2.1&#…...

安全框架:Apache Shiro
安全框架:Apache Shiro 前言您的第一个 Apache Shiro 应用程序Multiple Parts(多个部分)INI配置[main]部分[users]部分[roles]部分[urls]部分默认过滤器常规启用/禁用 密码学会话管理Remember Me 整合SpringBoot登录登录超时记住我注解登录后…...

泊松融合调研
目录 裁剪加速,速度提升2倍多 cuda版: 效果没测,官方效果不错: 效果不好,parosky/poissonblending 裁剪加速,速度提升2倍多 import os import sys import os os.chdir(os.path.dirname(os.path.abspath(__file__))) current_dir = os.path.dirname(os.path.abspath(__…...

uniapp——App下载文件,打开文档(一)
uniapp如何下载文件、打开文件 文章目录 uniapp如何下载文件、打开文件下载文件下载文件成功返回数据格式 打开文档处理 iOS 打开文件可能失败问题 相关API: uni.downloadFileuni.openDocument 注意: 只支持 GET 请求,需要 POST的ÿ…...

Python 列表的高级索引技巧
列表是 Python 中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素。本文将带你深入了解 Python 列表的高级索引技巧,让你在处理数据时更加得心应手。 1.基本索引 首先,我们来看看如何使用基本索引来访…...

UE5.3 虚幻引擎 Windows插件开发打包(带源码插件打包、无源码插件打包)
0 引言 随着项目体量的增大,所有代码功能都放一起很难管理。所以有什么办法可以将大模块划分成一个个小模块吗。当然有,因为虚幻引擎本身就遇到过这个问题,他的解决办法就是使用插件的形式开发。 例如,一个团队开发了文件I/O模块插…...

RC充电电路仿真与分析
RC充电原理 下图是一个常见的RC充电电路:(假设R10K,C100nF) SW断开时,这个电路处于断路状态,C既没有充电也没有放电;SW闭合时,直流电源5V为电容C充电; 充电时电容两端…...

C++ 设计模式:观察者模式(Observer Pattern)
链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 策略模式 观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主…...

栈及栈的操作
栈及栈的操作 栈结构 栈是一种只能在一端进行插入或删除操作的数据结构。栈有两个基本的操作:入栈和出栈。 入栈:将一个新的元素放到栈顶。 出栈:从栈顶取出一个元素。栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。栈的操作规则:LIFO(Last…...

算法:切饼
对以下题目设计一个算法:切饼 假设:有一张很大很大的饼,给你一把足够长的刀。要求:每次在饼上切一刀。 问题:n刀,最多能切出多少块饼? n3 要解决这个问题,我们可以从数学归纳法的…...

C++ 设计模式:代理模式(Proxy Pattern)
链接:C 设计模式 链接:C 设计模式 - 门面模式 链接:C 设计模式 - 中介者 链接:C 设计模式 - 适配器 代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制(…...

JDK、JRE、JVM的区别
JDK(Java Development Kit)、JRE(Java Runtime Environment)和 JVM(Java Virtual Machine)是 Java 开发和运行环境的三个重要组成部分。 JDK 是 Java 开发工具包,它包含了编译器(ja…...

2021年福建公务员考试申论试题(县级卷)
2021年福建公务员考试申论试题(县级卷) 材料一 “把她的家粉刷一新。给独自生活的她更多支持。” 某公益平台上,为女孩小珊修缮房屋的公益计划得到不少爱心网友的支持。1元、10元、100元……不到一个月,爱心捐赠就超过了修缮…...

问题记录:[FATAL] [1735822984.951119148]: Group ‘manipulator‘ was not found.
前言:最近仿照UR5手眼标定的例程,在新的机械臂上进行手眼标定,还准备用easy_hand手眼标定包。将机器人功能包导入到工作空间后进行编译运行,启动launch文件: roslaunch easy_handeye eye_to_hand_CR7_calibration.lau…...