STM32F407和LAN8720调试记录(4)

本文详细记录了在STM32F407与LAN8720网络通信过程中遇到的问题及解决方案,包括HEAP到POOL的数据存储切换、LWIP锁的实现、多数据包处理以及中断处理的优化,以解决网络通信挂起和内存不足的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.STM32F407和LAN8720调试记录(1)

2.STM32F407和LAN8720调试记录(2)

3.STM32F407和LAN8720调试记录(3)

之前是由陈工在进行LWIP的移植,之后陈工因为学业原因暂时离开公司,之后便由我接手后续的工作。所以和之前的博客地址不一样。我写的没有陈工那么好,但我会尽量按照比较清晰的逻辑把LWIP移植过程中的坑说明白。
经过前面三个实验,虽然网络已经能够正常收发了,可是有一些非常严重的问题

当有大量数据传输的时候,大概半个小时,网络通信就会挂。

这个问题有如下四个原因

原子例程中设置的存放数据的方式是HEAP

使用HEAP作为数据包储存方式会产生大量内存碎片,使得大数据包越来越难找到合适的内存来存放数据,只有将HEAP改为POOL才能解决这个问题。通过更改MEM_USE_POOLS和MEMP_USE_CUSTOM_POOLS这两个宏定义为1并且自己编写lwippool.h能够从HEAP切换为POOL。下面是我自己写的lwippool.h

#if MEM_USE_POOLS
LWIP_MALLOC_MEMPOOL_START
LWIP_MALLOC_MEMPOOL(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值