我目前在飞思卡尔K60项目中使用lwIP来帮助我们的以太网TCP实现,并在lwipopts.h中设置以下选项。
#define MEM_SIZE (12*1024)
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
sends a lot of data out of ROM (or other static memory), this
should be set high. */
#define MEMP_NUM_PBUF 10
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
per active UDP "connection". */
#define MEMP_NUM_UDP_PCB 6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
connections. */
#define MEMP_NUM_TCP_PCB 10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 6
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
segments. */
#define MEMP_NUM_TCP_SEG 12
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. */
#define MEMP_NUM_SYS_TIMEOUT 10
/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE 10
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE 1518
我遇到过一个问题,即从PC客户端到设备的前9条消息已成功读取并传递到应用程序级别,但在第10次尝试时失败,我们不再通过以太网接收任何消息连接。
在追逐这个之后我发现在pbuf.c中,由于
的调用,我收到了PBUF_POOL_IS_EMPTY()
(struct pbuf *)memp_malloc(MEMP_PBUF_POOL); returning NULL.
进一步检查显示memp_tab
的值在发布后如下
-memp_tab[0] 0x1FFF4160 </br>
-memp_tab[1] 0x1FFF421C </br>
-memp_tab[2] 0x1FFF423C </br>
-memp_tab[3] 0x1FFF4364 </br>
-memp_tab[4] 0x1FFF4478 </br>
-memp_tab[5] 0x1FFF450C </br>
-memp_tab[6] 0x1FFF467C </br>
-memp_tab[7] 0x1FFF46D4 </br>
-memp_tab[8] 0x1FFF4744 </br>
-memp_tab[9] 0x00000000 </br>
memp_tab[9]
的价值令人担忧。
在我看来,尽管我们包含了memp_malloc调用,但是在使用后我们的内存没有被重新分配。有没有什么办法可以在使用后重新分配这个内存,在调用中允许我们使用该函数超过声明的用途。