Цитата(Cosmojam @ Aug 15 2012, 00:56)

Сталкивался с подобным на LPC17 + FreeRTOS + LwIP. Только не при остановке работы, а при закрытии сразу множества TCP-соединений. Гуглом нашёлся совет что это из-за некорректной обработки пакетов из очереди emac. С езернетом в STM32 дела не имел, не знаю точно как там, а в LPC17 решилось уменьшением кол-ва DMA буферов для входящих и исходящих фреймов.
Спасибо за ответ.
Действительно, изменение кол-ва буферов DMA влияет на проявление глюка. При ETH_RXBUFNB = 1 глюк перестаёт проявляться.
Погуглив, нашёл следующее решение данной проблемы (
тут) - нужно заменить код задачи ethernetif_input на:
Код
void ethernetif_input(void * pvParameters)
{
struct pbuf *p;
for(;; )
{
if(xSemaphoreTake(s_xSemaphore, emacBLOCK_TIME_WAITING_FOR_INPUT)==pdTRUE)
{
GET_NEXT_FRAGMENT:
p = low_level_input( s_pxNetIf );
if (p != NULL)
{
if (ERR_OK != s_pxNetIf->input( p, s_pxNetIf))
{
pbuf_free(p);
p=NULL;
}
else
{
xSemaphoreTake(s_xSemaphore, 0);
goto GET_NEXT_FRAGMENT;
}
}
}
}
}