Код следующий:
Код
/* Create a new tcp connection handle */
pxListener = netconn_new( NETCONN_TCP );
netconn_bind(pxListener, NULL, 3333);
netconn_listen( pxListener );
/* Loop forever */
for(;; )
{
/* Wait for connection. */
pxNewConnection = netconn_accept(pxListener);
if(pxNewConnection != NULL)
{
/* Service connection. */
for (int i=0;i<100;i++)
{ if (netconn_write(pxNewConnection, DataBuf,512,0)==ERR_OK)
continue;
else
while (netconn_write(pxNewConnection, DataBuf,sizeof(DataBuf),NETCONN_COPY)!=ERR_OK)
vTaskDelay(1);
}
netconn_close(pxNewConnection);
while( netconn_delete( pxNewConnection ) != ERR_OK )
{
vTaskDelay( 3 );
}
}
}
pxListener = netconn_new( NETCONN_TCP );
netconn_bind(pxListener, NULL, 3333);
netconn_listen( pxListener );
/* Loop forever */
for(;; )
{
/* Wait for connection. */
pxNewConnection = netconn_accept(pxListener);
if(pxNewConnection != NULL)
{
/* Service connection. */
for (int i=0;i<100;i++)
{ if (netconn_write(pxNewConnection, DataBuf,512,0)==ERR_OK)
continue;
else
while (netconn_write(pxNewConnection, DataBuf,sizeof(DataBuf),NETCONN_COPY)!=ERR_OK)
vTaskDelay(1);
}
netconn_close(pxNewConnection);
while( netconn_delete( pxNewConnection ) != ERR_OK )
{
vTaskDelay( 3 );
}
}
}
Код работает, но скорость отдачи данных - низкая - около 3 кБайт/сек. В качестве приемника данных выступает компюьютер.
FreeRTOS работает в режиме вытесняющей многозадачности, частота переключения - 1000 Гц.
Наибольший приоритет - у задачи обработки данных по прерыванию (обрабатывает сигнал из ISR), следующий за ним по убыванию - у ядра lwIP. У вышеприведенной задачи приоритет на единицу ниже, чем у ядра lwIP. Анализ переключения задач показал, что более 95% времени процессор находится в IDLE.
Что это может быть, почему низкая скорсть ? Может кто-то уже сталкивался с подобным ?