LwIP 代码分析(内存优化) – 第十三集

/ 0评 / 0

以太网是个占内存的玩意,在我看来很多东西他多次,分区,占用了好多内存.目前编译结果看来,吃了51K的RAM.主要是实现了FreeRTOS,cJson,还有LwIP的上网页.

==============================================================================
Total RO Size (Code + RO Data) 48332 ( 47.20kB)
Total RW Size (RW Data + ZI Data) 46944 ( 45.84kB)
Total ROM Size (Code + RO Data + RW Data) 48368 ( 47.23kB)
==============================================================================

看起来挺多的.纵观整块内存,看看分布.下图省略了部分微不足道的占用.

可以看出,LwIP占用了大约20K,操作系统占用大约16K,以太网底层驱动占用大概16K.堆栈之类的占用大概256字节.为了字节对齐增加了16字节的padding.
先通过xPortGetFreeHeapSize查找下,FreeRTOS实际上有多少闲置内存.

有5K剩余的,做做非收发buf,给lwip用,应该够用了,充分利用下内存.

通过memp.c占用发现,这里定义了很多块RAM.

看来减少数量,就可以立竿见影地减少RAM占用.
剩下最后的16K属于以太网驱动的.这个缩小会导致发送到的最大内容变小,(需要分段),最优方法,只能是改进复制算法了.如果调用LL_ETH_TransmitFrame能够发送pbuf->payload的内容,那就没什么问题,可惜,pbuf可能并不在连续空间,所以不可行.

不过,只要小于64K的RAM占用,就可以完美塞到F107了.

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注