新手上路
- 积分
- 37
- 金钱
- 37
- 注册时间
- 2020-4-9
- 在线时间
- 17 小时
|
楼主 |
发表于 2020-4-21 22:46:22
|
显示全部楼层
目前还是没有解决tcp_write(tpcb, ptr->payload, ptr->len, 1) 返回值还是ERR_MEM,绝对不是tcp_sndbuf或者snd_queuelen的问题,原因如下:
while ((wr_err == ERR_OK) &&
(es->p_tx != NULL) &&
(es->p_tx->len <= tcp_sndbuf(tpcb))&&(es->pcb->snd_queuelen<=TCP_SND_QUEUELEN))
{
/* get pointer on pbuf from es structure */
ptr = es->p_tx;
/* enqueue data for transmission */
wr_err = tcp_write(tpcb, ptr->payload, ptr->len, 1);
}
我是判断后才进入tcp_write;在仿真的时候在tcp_write函数里打断点,发现程序进入到了这里卡主:
if ((concat_p = tcp_pbuf_prealloc(PBUF_RAW, seglen, space, &oversize, pcb, apiflags, 1)) == NULL) {
LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2,
("tcp_write : could not allocate memory for pbuf copy size %"U16_F"\n",
seglen));
goto memerr;
}
这里出错,进入memerr。因此返回ERR_MEM,继续跟踪,tcp_pbuf_prealloc()返回的空值,进入这里查看:
p = pbuf_alloc(layer, alloc, PBUF_RAM);
if (p == NULL) {
return NULL;
只有在p = pbuf_alloc(layer, alloc, PBUF_RAM) == NULL的时候返回空值,因此 是什么原因导致pbuf_alloc()无法分配内存呢? |
|