news 2026/10/23 2:32:25

RISC-V IDE MRS进阶分享(五):代码密度和运行速度的优化方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RISC-V IDE MRS进阶分享(五):代码密度和运行速度的优化方法

一、引言

MRS(第二代)为MounRiver Studio的换代版本,从V2.1开始,框架更换至更现代的VSCode,并深度定制开发。在工程管理、代码编辑、编译、调试等方面均兼容之前版本,并在效率和功能等方面进行提升,着力将MRS打造为更加轻量化、智能化、高效化的RISC-V IDE。同时,提供Windows/Linux/macOS 以及国产操作系统版本。本文将对MRS在代码密度和运行速度的优化方法进行介绍。

二、代码优化

  • XW扩展与B扩展的使用

RISC-V标准的压缩指令扩展中,仅支持字操作的压缩指令,但是在嵌入式领域中字节和半字操作均比较常见,为降低代码大小,青稞处理器增加了八条半字和字节操作压缩指令(XW扩展)并且还增加了对B扩展的支持。目前同时支持B扩展和XW扩展的有青稞V3C、V3B、V5A;(下图引用沁恒微电子官网:https://www.wch.cn/products/QingKe.html?categoryId=77)

MRS环境下的CH584F工程模板:XW扩展与B扩展使用效果:

rv32imc(XW与B扩展均不开启)

rv32imcxw(只开启XW)

相比较rv32imc共减少了88字节

rv32imc_zba_zbb_zbc_zbs(只开启B扩展)

相比较rv32imc共减少了60字节

rv32imc_zba_zbb_zbc_zbs_xw (XW与B扩展均开启):

相比较rv32imc共减少了128字节

  • 快速中断

增添了一种全新的中断服务程序处理模式,该中断服务程序将原本的 16 个Caller Saved整型寄存器的压栈、出栈操作予以减少,转而由硬件自动进行保存,提高了硬件中断服务程序的响应时间。

以CH32V307EVT\EVT\EXAM\USART\USART_Interrupt工程的USART2_IRQHandler函数

为例,开启快速中断需添加如下属性,

通过过汇编代码可以看出开启优化后MRS的工具链取消了Caller Saved整型寄存器的压栈、出栈。

未开启优化

开启优化

  • Highcode段使用及优化

增加 highcode 段,将该段放置在 RAM 区运行,此段中的函数不会被内联,并对未使用的 highcode 段函数加以优化,降低 RAM和FLASH 的使用量

CH573F为例:

未开启优化

开启优化

  • 添加mcpy指令

mcpy指令功能与c语言库函数memcpy相同,使用于内存复制搬运场景,能够提高在内存区域与数据宽度非对其时内存搬运的速度。

MRS环境下的CH584F工程模板:

官方例程已经使用内嵌汇编的形式定义了__MCPY函数,用户后续可以直接调用该函数进行使用


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 2:29:20

3AGameFactory 游戏手感调优:打击反馈、震动与可玩相机系统完整指南

人工智能媒体生成游戏开发AI 应用AI 技能 【免费下载链接】GameFactory-3A 3AGameFactory 是一个全面的开源 3A 游戏生成 Skill 与资产框架。 它覆盖图片、3D 资产、动作、音频与 CG 视频生成,并支持使用 UE5、Blender、Unity、Godot 4 和 three.js 构建游戏。 项目…

作者头像 李华
网站建设 2026/10/23 2:26:37

C++环境下LibTorch张量数值读取与打印实战指南

第一次在 C 里面对深度学习框架的张量&#xff0c;大多数人最先想做的事情就是把它打印出来看看。Python 侧一行print(tensor)就能把 shape、dtype、数值全部摆到屏幕上&#xff1b;到了 C&#xff0c;同样用std::cout << tensor&#xff0c;结果可能只是一个很简略的输出…

作者头像 李华