硬件:NUC 980
环境:rtthread 4.1.0, BSP 1.0.2, LWIP 2.1.3
如果ping ip -l 20000 -t
, 系统就会崩溃,报tcpip thread data abort
发现是lwip 中的定时器定时检查分片是否完成,在老化释放pbuf时的nextbuf 指针被改写了,后来发现是nu_emac_rx 函数中分配pbuf 时, 发现把还在使用的pbuf重新分配出去了,导致挂载分配重组链中的pbuf 内存被改写。
emac不是在接收到报文把描述符改成EMAC_DESC_OWN_CPU
, 等报文释放才重新置为EMAC_DESC_OWN_EMAC
,才能再次被emac使用,为什么还在使用的pbuf被再次分配出去?