1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
主控芯片为SMT32F429,使用RMII,外面接LAN8742,无系统(裸系统)。
直接使用CubeMx生成代码,堆栈设置都是0x800。其它代码很少。ping和发送都没有问题,但是每次接收数据时会报错: Assertion "pbuf_free: p->ref > 0" failed at line 753 in ../Middlewares/Third_Party/LwIP/src/core/pbuf.c 频繁接收数据之后,发送会报错ERR_MEM(-1),后面就再也不能正常收发数据了。 各位大佬,请问这是什么原因导致的?或者如何能避免啊? |
|
相关推荐
1个回答
|
|
从您提供的信息来看,这个问题可能是由于内存不足导致的。在LwIP中,ERR_MEM(-1)表示内存分配失败。以下是一些建议来解决这个问题:
1. **检查内存分配**:首先,确保您为LwIP分配了足够的内存。您可以通过修改`lwipopts.h`文件中的`MEM_SIZE`宏来增加内存大小。例如,将其设置为16KB: ```c #define MEM_SIZE (16 * 1024) ``` 2. **优化内存使用**:检查您的代码,确保没有内存泄漏或不必要的内存分配。使用LwIP的内存调试功能可以帮助您找到内存泄漏。 3. **调整PBUF配置**:在`lwipopts.h`文件中,您可以调整PBUF的配置,例如减少PBUF_POOL_SIZE,以减少每个PBUF占用的内存。但是请注意,这可能会影响网络性能。 ```c #define PBUF_POOL_SIZE 4 ``` 4. **使用更小的MTU**:减小MTU(最大传输单元)可以减少每个数据包所需的内存。在`lwipopts.h`文件中,将`ETH_MAX_MTU`设置为较小的值,例如: ```c #define ETH_MAX_MTU 1500 ``` 5. **检查LAN8742配置**:确保您的LAN8742配置正确,没有导致过多的数据包丢失或错误。检查硬件连接和配置参数,如速率、双工模式等。 6. **使用LwIP调试**:启用LwIP的调试选项,以便在出现问题时提供更多信息。在`lwipopts.h`文件中,取消以下行的注释: ```c //#define LWIP_DEBUG 1 ``` 然后,重新编译并运行您的程序,查看调试输出以找到问题所在。 7. **优化网络协议栈**:如果您的应用程序对网络性能要求较高,您可能需要优化LwIP协议栈以适应您的特定需求。这可能包括调整TCP、UDP和IP层的参数。 尝试上述建议,看看是否能解决您遇到的问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:21 , Processed in 0.801968 second(s), Total 80, Slave 63 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号