Перейти к содержанию
    

быстрый TCP/IP-стек для STR912

Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.

 

Нужно передавать данные с контроллера на PC (в одну сторону). Размер пакета не важен (видимо, нужен большой для высокой пропускной способности). Нужно только одно соединение.

 

+ хочется использовать стек без операционки.

 

Рассматривался uIP. Но, как видно, он больше оптимизирован для 8-битных контроллеров. Настроить его на большую пропускную способность пока не удалось. Примеры на его основе - в основном, web-сервера, не требующие большой пропускной способности канала. Когда они переделываются на передачу данных, выясняется, что пропускная способность всего несколько килобайт/c. :(

 

Есть вариант с использованием операционки. Например, тот же RTX Kernel со стеком. Вопрос, какую пропускную способность эта связка сможет обеспечить и какая загрузка процессора будет при требуемой пропускной способности в 1-2 Мбайт/с.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На STR91x стек TCP/IP от Micrium дает 2.3 Мбайта в секунду c длиной пакетов 1024 байта.

У них на сайте выложен для STR91x весь проект включая TCP стек, RTOS и исходники тестирующей программы.

Проект для IAR EWB, легко переносится и на RVDK.

 

Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).

Тогда можете сами формировать пакеты и не надо никакого стека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потеряете большинство пакетов, либо будете изобретать вилосипед.

PC слишком быстро отправляет UDP один за другим. Контроллер все потеряет кроме первого.

 

Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).

Тогда можете сами формировать пакеты и не надо никакого стека.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужна пропускная способность по протоколу TCP/IP порядка 1-2 МБайт/с.

 

Нужно передавать данные с контроллера на PC (в одну сторону). Размер пакета не важен (видимо, нужен большой для высокой пропускной способности). Нужно только одно соединение.

 

+ хочется использовать стек без операционки.

 

Рассматривался uIP. Но, как видно, он больше оптимизирован для 8-битных контроллеров. Настроить его на большую пропускную способность пока не удалось. Примеры на его основе - в основном, web-сервера, не требующие большой пропускной способности канала. Когда они переделываются на передачу данных, выясняется, что пропускная способность всего несколько килобайт/c. :(

 

Есть вариант с использованием операционки. Например, тот же RTX Kernel со стеком. Вопрос, какую пропускную способность эта связка сможет обеспечить и какая загрузка процессора будет при требуемой пропускной способности в 1-2 Мбайт/с.

 

LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потеряете большинство пакетов, либо будете изобретать вилосипед.

PC слишком быстро отправляет UDP один за другим. Контроллер все потеряет кроме первого.

 

Если все в локалке ( в одном сегменте ) можно использовать UDP ( плюс простая проверка потерянных пакетов, которых по идее быть не должно если сеть правильно настроена).

Тогда можете сами формировать пакеты и не надо никакого стека.

 

Требовалось то передавать данные как раз в сторону PC!

И потом то что контроллер потеряет все пакеты, кроме 1 - это не так!

Можно несколько пакетов в очереди держать...

 

И потом когда данные идут пакетами и в одной сети ( нет марщрутизации, мостов и каналов с разной скоростью... ) гораздо эффективнее использовать UDP (можно вытащить из любого стека)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Требовалось то передавать данные как раз в сторону PC!

И потом то что контроллер потеряет все пакеты, кроме 1 - это не так!

Можно несколько пакетов в очереди держать...

 

И потом когда данные идут пакетами и в одной сети ( нет марщрутизации, мостов и каналов с разной скоростью... ) гораздо эффективнее использовать UDP (можно вытащить из любого стека)

 

 

Соглавсен с вами. Если есть устройство, которое напрямую подключается к компьютеру через Ethernet (у нас было именно так), UDP прекрасно справляется. Реализация UDP в разы проще, в хороших Emac он поддерживается почти аппаратно, нужно только заголовок сформировать, да ввести поле номера пакета, для возможного контроля пропавших (хотя за период тестирования устройства ни одного пропавшего пакета замечено не было). Даже контрольную сумму UDP можно не считать (даже нужно не считать, так как смысла нет). Реализация UDP с нуля займет примерно неделю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер

Очень интересно. можно подробнее? Использовали ОС или без нее обошлись? Что за оптимизация такая хитрая? Если использовали uC/OS не поделитесь портом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

LWIP - 3 мбайта в секунду, очень быстрый и хороший стек. Можно и больше , еслт оптимизировать CRC и драйвер

Очень интересно. можно подробнее? Использовали ОС или без нее обошлись? Что за оптимизация такая хитрая? Если использовали uC/OS не поделитесь портом?

Наибольшие тормоза вызывают функция подсчета CRC и драйвер передачи данных.

Я взял готовую неоптимизированную функцию написанную на С .

В драйвере можно эффективно использовать DMA, те предавать указатель на сегмент данных со сформированным пакетом( а не прегружать в отдельную область и оттуда по DMA слать в сеть, как я сделал для простоты). По прерыванию DMA освобождать память. Если в процессе передачи сформировался новый пакет, то его ставить в очередь на передачу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На STR91x стек TCP/IP от Micrium дает 2.3 Мбайта в секунду c длиной пакетов 1024 байта.

У них на сайте выложен для STR91x весь проект включая TCP стек, RTOS и исходники тестирующей программы.

Имелся в виду порт для STR91x или что?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST.

По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с.

Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов.

 

Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация...

Но уж очень большой исходник у них.

 

Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас нет выбора. Это единственный нормальный стек доступный в исходниках и реально безопасный в многопоточных приложениях.

Быстрые стеки однозначно требуют операционку.

Открытые стеки типа uIP и lwIP очень кривые. Взять к примеру блокирующиеся сокеты без таймаута в lwIP, это гемороя на месяц не меньше чтоб обойти связанные с этим проблемы. И так по мелочи там много проблем.

 

 

Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел. Есть примеры для IAR для платы от ST.

По описанию внутри этого архива видно (на скриншотах), что у них TCP/IP на тесте передачи из контроллера в PC дает даже 2.9 Мбайт/с.

Глянул исходники - они используют оптимизированную ассемблерную функцию вычисления контрольной суммы. + реализация всяких вещей TCP таких как окно на много сегментов.

 

Сделано, конечно, профессионально. куча комментариев, которые пронумерованы, ..., документация...

Но уж очень большой исходник у них.

 

Хочется взять какой-нибудь стек без наворотов и "добавить" в уже существующий проект без операционки, чтоб не переписывать уже написанный код под эту операционку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Порт Micrium uC/OS-II со стеком TCP/IP на STR912 нашел.

 

А может кто нибудь на фтп это добро выложит? Что то на микриуме стали пароли с логинами спрашивать... :blink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

>> Что то на микриуме стали пароли с логинами спрашивать...

Угу, причем еще и не регистрируют =(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А может кто нибудь на фтп это добро выложит? Что то на микриуме стали пароли с логинами спрашивать... :blink:

 

Положил в /upload/TcpStacks/Micrium-uC-TCP-IP.exe

 

Зарегистрироваться мне удалось только с нормального почтового ящика.

С ящиком на mail.ru мой запрос на регистрацию был проигнорирован.

 

To AlexandrY - большой :a14: за наводку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...