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

Самый быстрый и самый маленький TCP-стек.

Итак, по просьбам трудящихся выкладываю порт своего стека на LPC1768, выдранный из текущего проекта, над которым щас тружусь.

 

NikeE_CM3.zip

 

Собирается IAR'ом 6.20.3 (вроде крайний на текущий момент), за подправить для GCC - даже не просите.

 

В качестве PHY используется KSZ8041TL, что, в общем, не принципиально - править, если что, файл emac.c

 

Тактовая проца в проекте - 100МГц, кварц - 20МГц, менять - функция InitPLL в файле hardware_init.c

 

Так же для генерации 50МГц REFCLK используется сам процессор через модуль CLKOUT. Кому не надо, в файле hardware_init.c необходимо убрать

  //Нужно если 50МГц для RMII генерируется процом
  PINSEL3 |= (0x01UL<<22); //CLKOUT on P1.27
  CLKOUTCFG=0x00000110; //CLKOUT 100MHz/2=50MHz used for RMII

 

Стек поддерживает TCP (и серверные, и клиентские сокеты), ICMP. Очень не долго прикрутить UDP. Поддерживается Fast Retransmit на передачу. На прием - сделаю чуть позже (если, конечно, понадобится).

 

Архитектура стека - callback по событиям из низкоприоритетного прерывания (используется модуль RIT как таймер, необходимый для TCP и заодно происходит Wakeup этого потока при поступлении пакетов - через прерывание от EMAC, которые должно быть высокоприоритетным (но при этом очень короткое, TODO - управление Flow Control)). Сам стек - network.c.

 

По умолчанию IP-адрес - 192.168.0.100.

 

Есть вебинтерфейс, даже с поддержкой ajax - можно поставить галочку Update Graphics и повеселиться (естественно, с браузером, который понимает HTML5 - Опера, Хром, Тормозилла - все годится). Кнопки "<<" и ">>" тоже можно понажимать. Для создания и отображения этих данных копать show_data.c и HTMLsource/http_root_level3.

 

Еще там случайно md5-авторизация в вебсервере сделана ;)

 

post-6610-1311763472_thumb.png

 

Эмулятор EEPROM в проекте не прикручен, так что на страничке конфигурации настройки стека не сохраняются. Когда у себя в проекте прикручу, сюда сделаю порт.

 

На порту 2000 висит отдаватель файла со случайными числами размером 100 мегабайт - это для теста скорости. В папочке GetData лежит проект забирателя для большого брата (собирать C++ Builder'ом).

 

Ну вот теперь, собственно, за скорость. По TCP - 90Мбит/с.

post-6610-1311763135_thumb.png

 

На этом, кстати, предлагаю закончить спор о максимально достижимой скорости по TCP.

 

Ну размеры вообще не угадываются - 3.7кБ собственно стек, вебсервер - 3.5кБ. Ах да, там еще странички пакуются, но это осталось с версии для AVR, можно честно выбросить.

 

Собственно, примеры использования можно смотреть в rx_tcp_dump.c (тупой отправлятель данных) и http_server.c (веб-сервер, там берегите мозг).

 

Ну и на посошок - лицензии. От это все - GPL, так что пользуйтесь.

 

На все вопросы постараюсь ответить тут.

 

Добавлено 29 июня 2011г:

http://electronix.ru/forum/index.php?s=&am...st&p=956930 - ревизия 1315.

 

Добавлено 30 июля 2011г:

http://electronix.ru/forum/index.php?s=&am...st&p=957213 - ревизия 1318.

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


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

Эмуляцию EEPROM уже хочется глянуть. У меня своя есть, но довольно сложная реализация и сектора не очень эффективно используются.

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


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

Эмуляцию EEPROM уже хочется глянуть.

 

А что, собственно стек не интересен?

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


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

А че он самый быстрый то? С чем сравнивалось?

У мя тоже есть свой стек :rolleyes: правда в LPC я не силен :) Но есть SAM7X... Как нить измерю сантиметры

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


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

А че он самый быстрый то? С чем сравнивалось?

 

А Вы замечали, что у нас на форуме в каждом обсуждении, касаемом TCP-стеков имеется несколько обязательных фраз про то, что TCP - это очень медленно и т.д.? И обычно выше 30мбит никто не поднимается в заявках ;)

 

 

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


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

А Вы замечали, что у нас на форуме в каждом обсуждении, касаемом TCP-стеков имеется несколько обязательных фраз про то, что TCP - это очень медленно и т.д.? И обычно выше 30мбит никто не поднимается в заявках ;)
Да есть тут пара-тройка юююзвонов, но я не об этом. Я о том, с чем сравнивалось - почему он "самый быстрый" :) Кстати, на счет самого маленького тоже надо проверить...

 

А сколько занимает памяти TCP-сокет кстати? И сколько стек использует стека? :)

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


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

А сколько занимает памяти TCP-сокет кстати?

 

49 байт, если мне не изменяет память.

 

И сколько стек использует стека?

 

Немного. 40 байт стека в основном коде плюс немного в процедурах (не более 16 байт). Callback-и, например, в http-сервере - 48 байт суммарно. Правда, есть еще md5, тот добавляет 56 байт.

 

Я о том, с чем сравнивалось - почему он "самый быстрый"

 

Пока ни с чем, исключительно по общей тенденции реплик по форуму. Мне лень ковыряться в других стеках и доводить их до ума - дабы можно было адекватно сравнить. Давайте с Вашим померяемся :)

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


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

Давайте с Вашим померяемся :)
Хорошо. Постараюсь причесать до понедельника. После отпуска ни как не могу настроиться на нормальный лад :)

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


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

Хорошо. Постараюсь причесать до понедельника.

 

Так а по-простому? Прикрутите к подходящему Вашему проекту тестовый сокет, в который скормится метров 100 рандома и вуаля. Я такой использую:

  r=r*1103515245+12345;

 

Софтик для теста можете у меня из архива взять.

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


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

Так а по-простому?
Сейчас попробую. Просто проект пылится уже более двух лет. По моему под 4 ИАР еще. Так что сегодня и по быстрому не обещаю.

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


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

Интересная штука. Эх, причесать бы код и абстрагировать от железа - получился бы полезный для многих проект. А с документацией ещё полезнее было бы...

Кстати, для разбора заголовков HTTP есть интересная библиотека: HTTP parser. Чтобы не изобретать свой велосипед.

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


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

Эх, причесать бы код и абстрагировать от железа

 

От железа к железу оно в полпинка переносится. Изначально это был проект под AVR, который с рукопашным эзернетом был. Порт по времени занял два дня.

 

А код там нечего причесывать. Он сделан из соображений оптимальности и портабельности под разные архитектуры без потери этой самой оптимальности. Кому читабельность - тому масса проектов в сети, вполне читабельно, только работает так себе ;)

 

А вот документацию, конечно, надо делать. Только где взять время :(

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


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

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

Я пока исходники вообще не смотрел, но к "оторвать от железа" сразу отношусь плохо - этих оторванных от железа, использующих от возможностей железа 0 целых хрен десятых уже понаписано немеряно. На данный момент максимальную ценность представляют решения которые наконец-то показывают, как максимально эффективно работать с конкретным железом и какой эффект от этого получается. Судя по скорости работы с конкретным железом этот стек интегрирован хорошо. И именно в этом его положительный пример.

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


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

Судя по скорости работы с конкретным железом этот стек интегрирован хорошо.

 

Честно говоря, не сильно я там особенности железа использую. Есть что покрутить (в частности, есть тонкости в передатчике), но исключительно ради снижения CPU load. Будет свободное время - займусь. Пока на очереди - Flow Control.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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