使用CUBEMX配置Freertos+LWIP工程,移植了freemodbus,正常运行一段时间后崩溃出现下面两个报错:
Assertion "pcb->snd_queuelen >= pbuf_clen(next->p)" failed at line 1111 in../Middlewares/Third_Party/LwIP/src/core/tcp_in.c
Assertion "pbuf_free: p->ref > 0" failed at line 753 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c
原因是lwip内核任务tcpip_thread和modbus任务优先级设置问题修改后运行正常,目前没有出现掉线崩溃的现象。使用Modebus Poll发送超300000+次暂未出现崩溃(以前发送700+就会崩溃!)
修改方法
#define TCPIP_THREAD_PRIO osPriorityAboveNormal
typedef enum {
osPriorityIdle = -3, ///< priority: idle (lowest)
osPriorityLow = -2, ///< priority: low
osPriorityBelowNormal = -1, ///< priority: below normal
osPriorityNormal = 0, ///< priority: normal (default)
osPriorityAboveNormal = +1, ///< priority: above normal
osPriorityHigh = +2, ///< priority: high
osPriorityRealtime = +3, ///< priority: realtime (highest)
osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority
} osPriority;
工程文件附上,供大家参考!
解压后直接打开有时会报错,建议解压后把工程文件放在不带有中文的目录下再打开!
(本人首次使用freemodbus,本文的解决办法也是一遍遍试出来的,可能还有问题,还请各位大佬指出!!一周的努力,希望对大家有所帮助,还请点赞收藏支持一下!)