一、引言

MounRiver Studio Ⅱ(MRS2)为MounRiver Studio的换代版本,从V2.1开始,框架更换至更现代的VSCode,并深度定制开发。在工程管理、代码编辑、编译、调试等方面均兼容之前版本,并在效率和功能等方面进行提升,着力将MRS打造为更加轻量化、智能化、高效化的RISC-V IDE。同时,提供Windows/Linux/macOS 以及国产操作系统版本。其下载地址为:MounRiver Studiohttp://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函数,用户后续可以直接调用该函数进行使用


————————————————
版权声明:本文为CSDN博主「MounRiver_Studio」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36353650/article/details/162880340

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐