You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RV32 CV32核心移植中M-mode环境调用异常排查求助

问题:CV32移植中time()/rand()调用触发默认异常的疑问

我们正将核心从Pulpino移植到CV32,编译运行代码无异常,但调用time()、srand()、rand()时会触发默认异常处理,此时相关CSR值如下:

mcause : 0x0000000b
mstatus : 0x00001880 (mstatus.MPP : 03, mstatus.MIE : 01)
mepc : 0x00003476
mtval : 0x00000000
mip : 0x00000000
mie : 0xffff0000
misa : 0x40101104

通过仅调用rand()的测试程序验证,在默认异常处理中打印CSR值确认mcause=0xB,对应M-mode环境调用异常。反汇编二进制文件发现time()、rand()函数中存在ecall指令,而div()中没有,说明是ecall触发了异常。

现提出两个问题:

  • 为何ecall会触发该异常?
  • 为何异常触发的是default_exception_handler_c而非配置的ecall_insn_handler?是否为硬件接线问题?

附crt0.S代码片段:

.section .vectors, "ax"
  .option norvc;
  .global intvec
intvec:
  .org 0x00
  jal x0, default_exception_handler_c
  [...]

  .org 0x88
  jal x0, ecall_insn_handler

工具链信息:使用riscv32-corev-elf-gcc 11.0.0实验版本,编译参数包含-Os -Wa,-march=rv32ic -Wall -Wdouble-promotion -Wextra -Wformat=2 -fdata-sections -ffunction-sections -fno-builtin -fno-builtin-printf -fno-merge-all-constants -g0 -march=rv32ic -s -std=gnu11

内容的提问来源于stack exchange,提问作者Guillaume D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:15:38