自己的Xboot工程,在ARM的M0/M3/M4/M23/M33平台下面,全部可以在7kB闪存以内实现,几个架构差异不大,7kB闪存普遍剩余一两百个字节。
最近把它移植到RISC-V上,芯片型号GD32VF103CBT6,同样的一套代码,使用gcc编译,-Os面积优化,固件尺寸11520字节。超过11kB了,速度优化代码尺寸超过16kB。
ARM算7kB,两者对比,7*1024/11520*100%=62.2%,也就是说,同样的功能,Cortex-M只需要RISC-V六成多一点的代码就能实现。
当然还有一个变量要考虑,ARM使用AC6编译,RISC-V使用gcc编译,编译器的效率也会有一定差异。
调试方面RISC-V只能用JTAG(GDLink可以支持),相比之下Cortex-M的SWD调试用起来更方便一些。
至此GD32家的M3/M4/M23/M33/RISC-V五种核心全部盘完了。
离线
压缩指令选项应该开了吧?RISCV指令精简程度比ARM更高,大一点也不奇怪。
离线
这样比没有用的,编译器的因素影响太大。都用汇编还好点,不过理论上thum2的代码密度确实比riscv的精简指令要高。
最近编辑记录 kekemuyu (2021-06-22 18:07:49)
离线
差了近40%,这个差距十分明显了,同样核心芯片都是按照FLASH容量定价格的,核心省下来的授权费说不定还不够买多用的FLASH。
还是Cortex-M香。
离线
压缩指令选项应该开了吧?RISCV指令精简程度比ARM更高,大一点也不奇怪。
差了近40%,不是不能算是“一点”了。10%以内的话还可以接受。
离线
这样比没有用的,编译器的因素影响太大。都用汇编还好点,不过理论上thum2的代码密度确实比riscv的精简指令要高。
RISC-V目前除了GCC还有其它编译器支持吗?
离线
kekemuyu 说:这样比没有用的,编译器的因素影响太大。都用汇编还好点,不过理论上thum2的代码密度确实比riscv的精简指令要高。
RISC-V目前除了GCC还有其它编译器支持吗?
据说IAR支持了。
离线
echo 说:kekemuyu 说:这样比没有用的,编译器的因素影响太大。都用汇编还好点,不过理论上thum2的代码密度确实比riscv的精简指令要高。
RISC-V目前除了GCC还有其它编译器支持吗?
据说IAR支持了。
https://www.iar.com/products/architectures/risc-v/iar-embedded-workbench-for-risc-v/
In current version of the toolchain, code density is already small comparing to other available tools
看来代码密度确实是RISC-V的大问题,IAR这里 other available tools 指的应该就是GCC。
离线
标准版的rv32imac指令集比arm差的比较多。简单的例子,没有地址自增指令
arm在漫长的历史上,吸收了一些复杂指令集的骚操作,例如ldm 加载多个寄存器
以后,riscv指令集会有很多魔改扩展出现的,riscv已经预留了魔改的空间
离线
之前看到有大佬讨论说,gcc编译risc-v的代码的时候负优化挺严重的,关掉优化可能会有意想不到的效果
离线
沁恒的riscv ch573支持swd,不过用的是他们自己的WCHLink
离线
这篇文章说用Segger的库和连接器可以大幅减小代码,,楼主可以试下
https://blog.segger.com/code-size-closing-the-gap-between-risc-v-and-arm-for-embedded-applications/
离线
从这个结果来看,GCC实在是太拉胯了。感觉SEGGER在黑GCC。
最近编辑记录 echo (2021-08-05 23:49:25)
离线
提一点,GCC的rw段在binary里是不压缩的,启动时做全量拷贝。Keil的话,无论compiler V5还是V6,都会压缩rw段,__main函数里会调__decompress做解压,IAR/Segger/Green Hill/Ti的工具链也会做类似优化。考虑到多数全局变量只需要做部分初始化(比如一个大描述符中的个别初始化字段),rw段里是有非常多的zeros可以被优化掉的。如果固件里的rw segment size不小,工具链不做压缩带来的size overhead会非常多。楼主可以在AC5/AC6的link flag里添加 --datacompressor off 再和GCC固件比对下体积。
我做过调研,根据rw段的实际使用情况,仅使用zero-rle压缩就可以做到7%~20%的压缩比。
也就是说,假设rw segment有10K,做rw压缩可以减少固件7~9K的size。对mcu firmware来说,这个收益是相当可观的。
GCC Toolchain没有集成rw压缩功能,但是可以插postbuild流程,结合重写的startup load code手动实现。
最近编辑记录 alexyzhov (2021-10-30 20:44:21)
离线
@echo
编译时候的目标risc-v指令集具体有哪些模块?
离线
目前使用gcc 8.2.0,打开-flto选项可以大大减小代码体积,不过代码行为似乎不太正常,会有莫名其貌的问题。
离线
ARM 也用 gcc 来编译,这样比较才有意义。
离线
ARM 也用 gcc 来编译,这样比较才有意义。
这样没意义,好比两军交战,甲方坦克飞机大炮,乙方方砍刀长矛盾牌,乙方输了说你们甲方也要用砍刀长矛盾牌才有意义。乙方不是不想用坦克飞机大炮,是没有。
离线
liyucai 说:ARM 也用 gcc 来编译,这样比较才有意义。
这样没意义,好比两军交战,甲方坦克飞机大炮,乙方方砍刀长矛盾牌,乙方输了说你们甲方也要用砍刀长矛盾牌才有意义。乙方不是不想用坦克飞机大炮,是没有。
非也。这个标题是对比不同指令架构所导致的差异,使用相同编译器才能扣除编译器的影响。是RISC-V VS Cortex-M,而不是GCC VS ARM CC。
离线