CH32V203xx不定时会触发HardFault

接之前的帖子:/bbs/thread-99652-1.html

目前没有在中断里使用printf了,仅在main的循环里使用,但偶尔还是会不定时的触发HardFault异常。

异常信息如下:

MCAUSE= 0x7

MTVAL= 0x4d904d6

MEPC= 0x2032

MSTATUS= 0x88


在反汇编视图里定位到 0x2032处,显示如下:

          __sfputc_r:
0000200e:   lw      a5,8(a2)
00002010:   addi    a5,a5,-1
00002012:   sw      a5,8(a2)
00002014:   bgez    a5,0x2028 <__sfputc_r+26>
00002018:   lw      a4,24(a2)
0000201a:   blt     a5,a4,0x2024 <__sfputc_r+22>
0000201e:   li      a5,10
00002020:   bne     a1,a5,0x2028 <__sfputc_r+26>
00002024:   j       0x183c <__swbuf_r>
00002028:   lw      a5,0(a2)
0000202a:   mv      a0,a1
0000202c:   addi    a4,a5,1
00002030:   sw      a4,0(a2)
00002032:   fsd     fa1,0(a5)
00002034:   ret


发现是调用__sfputc_r函数这里死掉了,请问这种异常该如何排查?

另外MRS里有办法查看调用栈(call stack)么,好像没看到有这个视图,调试起来不方便。

查了下资料,fsd是RISC-V架构里浮点数相关的指令。而CH32V203xx是V4B架构,不包含浮点数单元,那么为何编译出来的代码会包含浮点数相关的命令呢?


您好,可以根据MCU具体型号检查一下ld文件以及启动文件的配置是否正确,如下图。若方便,可以将你的工程发到我的邮箱具体看一下(lzs@wch.cn)。后面若有问题,也可以通过邮箱和我沟通

image.png


邮件已发送,另外想问下,MRS IDE里有没有办法进行栈回溯?看不到调用堆栈感觉调试起bug来很困难。


只有登录才能回复,可以选择微信账号登录