OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4767|回复: 6

关于LWIP系统使用·内存堆内存池的配置问题

[复制链接]

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2016-10-17
在线时间
38 小时
发表于 2018-12-26 09:01:14 | 显示全部楼层 |阅读模式
1金钱
若定义MEMP_MEM_MALLOC=1,用内存堆来实现内存分配

若定义MEM_USE_POOLS=1,用内存池来实现内存分配

但是,工程这两个好像都是 0 啊,到底是怎么分配的,好迷茫



360截图20181226090006576.jpg
360截图20181226090023901.jpg

最佳答案

查看完整内容[请看2#楼]

自己看了几天,原来是自己理解错了 lwip系统中,即有用到内存堆,也有用到内存池的,之前误以为是两种只能选一种。其实是 若定义MEM_USE_POOLS=1,用内存池来实现内存堆分配,即不用堆来申请、释放内存,而是用内存池的实现方式来使用malloc,free这些函数 若定义MEMP_MEM_MALLOC=1,内存池的实现不采用原先的方式,即不使用先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用这种方式,而是使用堆分配。 不过lw ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2016-10-17
在线时间
38 小时
 楼主| 发表于 2018-12-26 09:01:15 | 显示全部楼层
自己看了几天,原来是自己理解错了

lwip系统中,即有用到内存堆,也有用到内存池的,之前误以为是两种只能选一种。其实是
若定义MEM_USE_POOLS=1,用内存池来实现内存堆分配,即不用堆来申请、释放内存,而是用内存池的实现方式来使用malloc,free这些函数
若定义MEMP_MEM_MALLOC=1,内存池的实现不采用原先的方式,即不使用先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用这种方式,而是使用堆分配。

不过lwip库自己实现的堆申请并不是我平时用系统C语言malloc函数一样,申请后内存真的在堆上(.s中说的那个heap_size)
而是定义完一块内存后,在这块内存实现堆申请,释放,在mem.c中,可以看到
* \#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[size] \_\_attribute\_\_((aligned(4)))\n
* or more portable:\n
* \#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u32_t variable_name[(size + sizeof(u32_t) - 1) / sizeof(u32_t)]
*/
#ifndef LWIP_DECLARE_MEMORY_ALIGNED
#define LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size) u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]
#endif

其实是在variable_name数组上实现堆分配的。这个size是可以在宏定义修改大小的
当然,如果不想使用它这种分配方式,也可以使能MEM_LIBC_MALLOC是C库来分配内存的。。。

阿尼陀佛,,,浅尝辄止就好就好,再看下去任务完成不了喽
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-12-27 02:52:52 | 显示全部楼层
帮顶
回复

使用道具 举报

4

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2016-10-17
在线时间
38 小时
 楼主| 发表于 2018-12-29 09:50:31 | 显示全部楼层
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2017-4-18
在线时间
25 小时
发表于 2019-1-30 16:05:48 | 显示全部楼层
厉害。。。
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4367
金钱
4367
注册时间
2017-5-30
在线时间
578 小时
发表于 2019-12-5 11:58:16 | 显示全部楼层
硫酸亚铁 发表于 2018-12-26 09:01
自己看了几天,原来是自己理解错了

lwip系统中,即有用到内存堆,也有用到内存池的,之前误以为是两种只 ...

多谢楼主,也解决了我的疑问
回复

使用道具 举报

56

主题

289

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2012-11-16
在线时间
65 小时
发表于 2020-4-19 22:58:49 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-2 07:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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