CH32V208以太网+rtthread跑飞进hardfault

以太网的主循环需要不断轮询放在一个线程里会大量占用cpu,所以加了一个信号量,在eth中断里释放信号量,但是这样之后只要不断发送或者接收数据过一会儿就会跑飞,可能几分钟可能几十分钟,打印了mepc也找不到对应的函数,代码是这样:

image.png

image.png

3e5530930f18fc42118bbe052209fa5.png

aa9aadf98aa7d86239c66abb39fa97a.png

56af7c1c101f41975d1fc48b5f2c2c4.png

找了很久也找不到原因,但是有发现这些规律:跑飞的时候di这个线程的sp不正常,不启动di线程不会跑飞,只连接socket不收发数据也不会跑飞,以太网循环轮询线程里不获取信号量,而是使用rt_thread_mdelay(1)也不会跑飞,看了你们发的hardfault教程.lst里也找不到mepc对应的函数,也没找到内存越界访问的情况,想问下对于这种情况有什么排查的办法吗?

您好,可以按照下图介绍解决方法试一下。若不行可将工程发至邮箱(lzs@wch.cn)具体看一下

image.png



这个文档是在哪里看到的呢?我这边看rtthread的官方文档里是推荐使用信号量来同步中断和线程的,在中断中释放信号量,在线程中阻塞获取信号量,rtt官方的finsh也是这样用的,如果不用信号量用一个标志位来记录,那还是需要在线程中轮询,没法保证实时性的,这是RTT官方的文档说明https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1?id=%e4%bf%a1%e5%8f%b7%e9%87%8f

image.png


您好,这是浏览器搜索时给的结论,若方便可以把工程发至我的邮箱(lzs@wch.cn)具体看一下做一下验证测试


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