您尚未登录。

楼主 # 2023-01-05 16:53:16

echo
会员
注册时间: 2020-04-16
已发帖子: 351
积分: 356.5

RISC-V不支持非对齐地址访问非常坑

隔壁Cortex-M0也不支持非对齐地址访问,代码中uint8_t*指针一旦强转uint16_t*或者uint32_t*,很容易引起HardFault。然而M3/M4就支持非对齐地址访问了,很多历史代码中会存在上面的强制地址转换,M3和M4上运行正常的代码移植到RISC-V以后非常容易踩到地址对齐的坑,代码规模比较大的时候填这些坑还是非常麻烦的。
RV32MAC假想对手是整个Cortex-M系列,M0是整个Cortex-M里面最低端的系列,RISC-V起码应该和M3/M4差不多,非对齐地址访问起码应该作为一个选项存在。

离线

楼主 #3 2023-01-05 18:41:20

echo
会员
注册时间: 2020-04-16
已发帖子: 351
积分: 356.5

Re: RISC-V不支持非对齐地址访问非常坑

XIVN1987 说:

是否支持非对齐访问,是实现层面的问题,,RISC-V ISA 本身并不限制是否支持非对齐访问。。

人家隔壁ARM M0/M3/M4是不是支持是规定了的,这种模棱两可,依赖厂家来实现对齐、非对齐结果就是碎片化。RISC-V应该有一个扩展来约束是否支持非对齐访问操作。

离线

楼主 #7 2023-01-05 22:43:54

echo
会员
注册时间: 2020-04-16
已发帖子: 351
积分: 356.5

Re: RISC-V不支持非对齐地址访问非常坑

海石生风 说:

GCC编译器的特定优化选项会自动将不对齐的操作转为对齐操作。

编译器能力是有限的,uint8_t*指针强制转换uint32_t*编译器就无法处理,大概率会跪。很多解析二进制数据的代码都会这么干。规模庞大的代码填这些坑就非常麻烦。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn