完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,最近在移植LWIP,参考原子战舰V3,由于我的系统没实现内存管理,因此,涉及到malloc的函数我全部使用全局数据区来开辟空间(暂时先这么粗略地实现),但对内存池的内存分配我实现是没看明白,在memp.c中,这个memp_get_memorysize函数获取需要分配内存池大小的时候,操作比较野:
//得到memp_memory数组大小u32_t memp_get_memorysize(void) { u32_t length=0; length=( MEM_ALIGNMENT-1 //全局型数组 为所有POOL分配的内存空间 //MEMP_SIZE表示需要在每个POOL头部预留的空间 MEMP_SIZE = 0 #define LWIP_MEMPOOL(name,num,size,desc)+((num)*(MEMP_SIZE+MEMP_ALIGN_SIZE(size))) #include "lwip/memp_std.h" ); return length; } 想请教一下各位,这个实现是运行时实现,还是初始化实现呢?也就是是在编译期间就定下来length长度了,还是程序运行期间通过运算得出来的。我想要将这个函数改为宏定义,使用宏在全局数据区以数组的方式开辟一段内存给内存池应该如何做,一点小分,小白奉上,大神请来收。 |
|
相关推荐
3个回答
|
|
这个大小其实就是LWIP里面定义的,LWIP里面默认的内存吃是数组memp_memory,此数组定义如下:
这个函数就是用的这个数组大小的定义,你要用回LWIP自己的就直接取消掉这些注销 |
|
|
|
受教了左神!原来如此,那么这段代码:
{ MEM_ALIGNMENT-1 //全局型数组 为所有POOL分配的内存空间 //MEMP_SIZE表示需要在每个POOL头部预留的空间 MEMP_SIZE = 0 #define LWIP_MEMPOOL(name,num,size,desc)+((num)*(MEMP_SIZE+MEMP_ALIGN_SIZE(size))) #include "lwip/memp_std.h" } 它是在编译预处理阶段就决定length大小了吗? 还有,在移植中我发现一个问题,sys_arch.c中的sys_msleep()函数LWIP已经在lwip_sys.c中用信号量实现了一遍了,为什么左神当时你移植的时候还要再在sys_arch.c中实现一遍?我编译不过,ADS编译器直接说重复定义了~跪问大神! |
|
|
|
参考原子哥程序,现在LWIP1.4.1已经在我S3C2440/ucosII_2.86/DM9000AEP/稳定运行,但是现在出现了了新的问题,因为板子没做关机资源回收处理,直接掉电后程序截然而止,第二次开机后,导致不能DHCP分配地址失败,不知道这是什么原因导致的,是因为没有回收局域网IP资源吗?(似乎PC关机都不会强行掉电,会有资源回收处理的),排查问题中,请各位大佬支招--有奖竞答,答案靠谱者留下any_wallet_ID,我给你发红包。
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2602 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2421 浏览 5 评论
3279 浏览 3 评论
2873 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2822 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
722浏览 1评论
946浏览 0评论
1084浏览 0评论
716浏览 0评论
543浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-1 16:52 , Processed in 1.081770 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号