硬汉嵌入式论坛

 找回密码
 立即注册
查看: 146|回复: 1
收起左侧

[LwIP] Lwip内存堆实现内存池程序崩溃解决办法

[复制链接]

2

主题

5

回帖

11

积分

新手上路

afa

积分
11
发表于 2025-4-27 11:18:00 | 显示全部楼层 |阅读模式
1、硬件STM32H743+LAN8720+LWIP,由于匆忙,使用的网上的教程(大部分都是内存堆实现内存池的方法,强烈建议不要使用此方法,就如代码中不建议使用malloc和free;如果需要此方法,需确保内存堆的大小>>内存池的大小)

2、现象:程序老化运行7天-14天左右后容易崩溃:程序中编写HardFualt异常定位工具未发现ram区域的堆栈都是正常的;监控lwip的内存,发现内存碎片化导致;
3、查看内存堆、池的实现源代码;发现内存堆的实现方法,单个内存过小时,会标记使用后而不释放导致内存锁片;
4、使用内存池的方式实现实现内存堆(消除内存锁片,用空间来换取,目前测试暂无异常),配置时需要注意:内存池的地址区域的DCACHE需配置为不进行缓存(非常重要),可通过查看编译后.map文件来确认;或者手动修改链接文件,同时修改arch.h文件中
   #define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) __attribute__((section(".Rx_PoolSection"))) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER
   这个代码来指定内存池的地址区域;

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-4-28 09:51:23 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-9 21:50 , Processed in 0.303756 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表