RISC-V IDE MRS2进阶分享(五):代码密度和运行速度的优化方法
一、引言
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函数,用户后续可以直接调用该函数进行使用


更多推荐



所有评论(0)