Lwip快速连续发送数据导致死机的解决方法

MCU 使用的是freeRTOS+lwip实现网络功能。Lwip的版本是1.4.1。使用场景是pc做服务器,mcu做客服端。MCU连接到服务器后每隔20ms发送一包数据,数据长度70多byte,发送几分钟后就会死机。进入debug后发现是进入了handfault 中断。

打开lwip的调试信息,发现lwip有错误信息打出。调到打印处发现是do_write函数里的write_offset的值不对。于是全部找修改write_offset的地方。发现函数do_writemore里会把write_offset清0。于是去查找没有执行到清0的原因。并在函数do_writemore里加上打印。于是发现这个函数被重入了。继续往下追发现是网络中断处理接收到的数据包时,会调用do_writemore函数。中断里的调用会有概率打断网络任务里调用do_writemore,导致该函数重入。后来对接收部分进行修改。网络中断中只发出信号量,不处理数据,再建一个处理数据的任务,该任务的优先级和网络任务的优先极相同,从而避免了,do_writemore函数重入,该问题解决。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值