用的 stm32f4 的 bsp,最近发现有时候会挂在 etx 线程里面,PC 值为 0,之前大家有遇到过不?
另外,我发现 erx 线程中有对 eth_rx 的判断:
但是 eth_tx 里面没有,请教下 eth_rx/eth_tx 什么情况下会变成 NULL 呢?
感觉问题出在这:(去掉了被宏关闭的代码)
msg
是个局部变量,全靠 tx_ack
来做保护。但是这个函数会在多个上下文里面调用:tcpip、erx(link up 的时候)、客户线程(调用 udp_sendto 触发),tx_ack
release 的时候并不知道 release 的是哪个上下文,进而导致 etx 线程拿到的 msg 指针内部的数据被覆盖……
许久没弄了,上面的分析不知道对不对,请各位大佬看看这里是有问题不?
这种情况,看没有可能是device变量附近的全局data数据,尤其是附近的全局数组;
比如清空数组的时候,或者做一些内存清零的操作时,多操作了几个字节(传入的len大了),
导致到device的eth_rx/eth_tx就变0了,也就是NULL了。
这种情况,我以前在别的系统平台有遇到这种问题,也是很隐蔽,相当于这个NULL是被意外设置的,不好排查。
提供点思路,希望能帮助到你。
生产环境出的问题,连不了调试器 ;-(
😂 能改代码,又稳定复现的话,可以直接访问cortex-M的调试单元,用代码设置写保护。
明白了!厉害厉害! ;-D