Код отправки (фрагмент, т.к. код с xemacif_input(&NetItfs) и т.д. в другой части):
Код
case MSG_SLOT_TX_WAIT:
//Укладываем в сообщение уникальный идентификатор
*(uint16_t*)&SrvcMsgQueue[Idx].Message.RawData[1] = SrvcMsgCounter;
SrvcMsg_pBuff = pbuf_alloc(PBUF_RAW, sizeof(SrvcMsgHeader_Type) + SrvcMsgQueue[Idx].Message.PayloadLen, PBUF_RAM);
if (SrvcMsg_pBuff != NULL)
{
memcpy(SrvcMsg_pBuff->payload, SrvcMsgQueue[Idx].Message.RawData, sizeof(SrvcMsgHeader_Type) + SrvcMsgQueue[Idx].Message.PayloadLen);
udp_send(pcbServiceSnd, SrvcMsg_pBuff);
pbuf_free(SrvcMsg_pBuff);
SrvcMsgCounter++;
SrvcMsgQueue[Idx].Busy = (SrvcMsgQueue[Idx].Message.Header.OpFlags & OP_FLAGS_CONFIRM_BIT) ? MSG_SLOT_NOT_CONFIRMED : MSG_SLOT_FREE;
SrvcMsgQueue[Idx].ReSendTimeout = MSG_RESEND_TIMEOUT;
SrvcMsgQueue[Idx].ReSendCounter = 0;
}
break;
//Укладываем в сообщение уникальный идентификатор
*(uint16_t*)&SrvcMsgQueue[Idx].Message.RawData[1] = SrvcMsgCounter;
SrvcMsg_pBuff = pbuf_alloc(PBUF_RAW, sizeof(SrvcMsgHeader_Type) + SrvcMsgQueue[Idx].Message.PayloadLen, PBUF_RAM);
if (SrvcMsg_pBuff != NULL)
{
memcpy(SrvcMsg_pBuff->payload, SrvcMsgQueue[Idx].Message.RawData, sizeof(SrvcMsgHeader_Type) + SrvcMsgQueue[Idx].Message.PayloadLen);
udp_send(pcbServiceSnd, SrvcMsg_pBuff);
pbuf_free(SrvcMsg_pBuff);
SrvcMsgCounter++;
SrvcMsgQueue[Idx].Busy = (SrvcMsgQueue[Idx].Message.Header.OpFlags & OP_FLAGS_CONFIRM_BIT) ? MSG_SLOT_NOT_CONFIRMED : MSG_SLOT_FREE;
SrvcMsgQueue[Idx].ReSendTimeout = MSG_RESEND_TIMEOUT;
SrvcMsgQueue[Idx].ReSendCounter = 0;
}
break;
Грешил на нехватку кучи, пробовал задавать в линкере 64МБайта и для LWIP 32МБайта, на время успешной отправки это не повлияло (в пределах погрешности...).
Настройки LWIP (в виде картинки, так наверное нагляднее...):

Может кто сталкивался, буду рад любой информации...