Задача следующая: Есть пример Simple socket server, devboard Stratix II. Использую пример Standart.
SSS изменил след образом: убрал все task в RTOS, кроме инициализации. После инициализации добавил функцию
Код
void sss_send_menu(SSSConn* conn)
{
alt_u8 *a = TESTSTREAMTOAVALONMM_0_BASE; /* указатель на память с данными */
alt_u8 strb; // сигнал на отправку пакета
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(SEND_PACKET_BASE, 0); // сигнал об отправке пакета, если единица
strb = IORD_ALTERA_AVALON_PIO_DATA(STRB_PULSE_BASE); // считываю сигнал на отправку пакета, если 1
if(strb != 65)
{
send(conn->fd, a, 1452, 0); // отправляю 1452 байта
}
IOWR_ALTERA_AVALON_PIO_DATA(SEND_PACKET_BASE, 1);// формирую сигнал для обнуления strb
}
return;
}
{
alt_u8 *a = TESTSTREAMTOAVALONMM_0_BASE; /* указатель на память с данными */
alt_u8 strb; // сигнал на отправку пакета
while(1)
{
IOWR_ALTERA_AVALON_PIO_DATA(SEND_PACKET_BASE, 0); // сигнал об отправке пакета, если единица
strb = IORD_ALTERA_AVALON_PIO_DATA(STRB_PULSE_BASE); // считываю сигнал на отправку пакета, если 1
if(strb != 65)
{
send(conn->fd, a, 1452, 0); // отправляю 1452 байта
}
IOWR_ALTERA_AVALON_PIO_DATA(SEND_PACKET_BASE, 1);// формирую сигнал для обнуления strb
}
return;
}
Записываю в память в НИосе данные, после записи отправляю на компьютер. Данные следуют импульсами по 1024 байта каждые 850 мкс. То есть скорость достигается около 10 Мбит/с.
Ethernet на плате 10/100 Мбит. Тем не менее принимается только один пакет (импульс данных). Другие пакеты иногда можно наблюдать не по TCP протоколу, а по FMTP, но не 1452 байта. а разбитые ппакеты по 509 байт. Другими словами все импульсы подряд выслать не получается.
Что может влиять на скорость передачи данных? Есть предположение, что RTOS ограничивает быстродействие stack'а, выделяя на передачу пакета определенное время.