一、引言

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

二、代码优化

  • XW扩展与B扩展的使用

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

MRS2环境下的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函数

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

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

未开启优化

开启优化

  • Highcode段使用及优化

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

CH573F为例:

未开启优化

开启优化

  • 添加mcpy指令

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

MRS2环境下的CH584F工程模板:

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


Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐