Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: atmega32u4+ENC28J60+uIP = HTTPD+CGI+DHCP+DFU bootloader
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Ilmarin
Собственно проект: http://code.google.com/p/uhttpd-avr/ компилиурется WinAvr, прошивку можно обновлять с помощью FLIP'a через USB. Параметры сети хрянятся в EEPROM'e, можно менять через web, есть поддержка DHCP. Всё реализовано на основе uIP модифицированного для хранения данных в program memory.

P.S. Работает медленно
Ilmarin
Неужто никому не нужно?
mrKirill
Вот этим отпугнул smile.gif
Цитата(Ilmarin @ Jul 2 2009, 02:29) *
P.S. Работает медленно

Мне лично интересно, но я пока мельком глянул.

PS. Не нашел кнопки в репозитории чтобы сразу архивом все файлы качнуть.
Rst7
Цитата
P.S. Работает медленно


Дык надо uIP хачить на предмет Delayed ACK. Будет лучше smile.gif
Ilmarin
Цитата(mrKirill @ Jul 6 2009, 01:18) *
PS. Не нашел кнопки в репозитории чтобы сразу архивом все файлы качнуть.

Вот, сделал архив: http://uhttpd-avr.googlecode.com/files/uht...-2009-07-06.zip
mrKirill
Цитата(Ilmarin @ Jul 6 2009, 19:35) *

Благодарю. Будем изучать smile.gif
Ilmarin
Цитата(Rst7 @ Jul 6 2009, 02:01) *
Дык надо uIP хачить на предмет Delayed ACK. Будет лучше smile.gif

Приделал uip_split ( http://www.sics.se/~adam/uip/uip-1.0-refman/a00154.html )
заметно лучше не стало. Скорее всего из-за того что этот хак отсылает по-частям только пакеты максимальной длинны.

Что интересно, если сравнивать скорость загрузки страннички с динамически сгенерированной формой на винде ХП и линиксе (Ubuntu) то на линуксе существенно быстрее (и там и там Firefox 3.0.11 , без прокси ).

http://uhttpd-avr.googlecode.com/files/uht...-2009-07-08.zip
Rst7
Цитата
Приделал uip_split заметно лучше не стало. Скорее всего из-за того что этот хак отсылает по-частям только пакеты максимальной длинны.


Дык захачте его, чтобы любые пакеты пилил. Либо есть другой вариант (я так делал, пока не реализовал полноценную поддержку Delayed ACK у себя в стеке) - после каждого пакета с данными посылать пакет без данных с тем же SEQ - на такое что винда, что линух мгновенно отвечает ACK'ом.

Цитата
Что интересно, если сравнивать скорость загрузки страннички с динамически сгенерированной формой на винде ХП и линиксе (Ubuntu) то на линуксе существенно быстрее (и там и там Firefox 3.0.11 , без прокси ).


Дело в том, что авторы стека TCP/IP в линухе видимо писатели, а не читатели (рекомендаций в RFC), посему линух отвечает ACK'ом на каждый пакет.
Ilmarin
Цитата(Rst7 @ Jul 8 2009, 01:57) *
Дык захачте его, чтобы любые пакеты пилил.


Пробовал ( поменял условие при котором распил происходит ) - что-то нестабильно работать стало.
Rst7
Цитата
Пробовал ( поменял условие при котором распил происходит ) - что-то нестабильно работать стало.


В чем нестабильность выражена? Попробуйте поступить второму методу (про доп. пакет).
Ilmarin
Цитата(Rst7 @ Jul 8 2009, 11:55) *
В чем нестабильность выражена?


Связь стала случайным образом подвисать.

Цитата(Rst7 @ Jul 8 2009, 01:57) *
Дело в том, что авторы стека TCP/IP в линухе видимо писатели, а не читатели (рекомендаций в RFC), посему линух отвечает ACK'ом на каждый пакет.

Нашёл в интернете что в виндах таймер на ACK - 200мс, а в Линуксе - 10мс. Кстати, в виндах можно настраивать количество пакетов : http://support.microsoft.com/kb/328890 , если поставить 1 то всё работает довольно быстро.
Rst7
Цитата
Связь стала случайным образом подвисать.


Хз, хз..

Цитата
Кстати, в виндах можно настраивать количество пакетов : http://support.microsoft.com/kb/328890 , если поставить 1 то всё работает довольно быстро.


Ну это не выход. Во-первых - нарушает чи большим братьям с полновесной реализацией TCP-стеков. Во-вторых - без полноценной поддержки Delayed ACK толку от этого на медленных каналах связи не будет - каждый пакет будет передаваться за время прохода туда и обратно.

В принципе, можно дохачить uIP под полноценную поддержку Delayed ACK (и посылок размером в окно).
Ilmarin
В общем нашёл ошибку ( надо было проверять что пакет уже ушёл, и в рассчёте размеров пакета в uip-split была ошибка). Ну и сделал отправку пустых пакетов. Теперь работает и то и другоe ( выбирается в uNetConfigure.h). Работать стало быстрее, но Линукс по прежнему опережает винду, почему то.

Обновлённый релиз: http://uhttpd-avr.googlecode.com/files/uht...-2009-07-09.zip
Rst7
Цитата
Работать стало быстрее, но Линукс по прежнему опережает винду, почему то.


Да потому, что все это - костыли. Если такое просунуть через медленный канал, будет ужасно. Надо реализовывать правильную работу с окном.
Ilmarin
Цитата(Rst7 @ Jul 9 2009, 03:13) *
Да потому, что все это - костыли. Если такое просунуть через медленный канал, будет ужасно. Надо реализовывать правильную работу с окном.


Ну, это всё делается не для того чтобы сотню запросов в секунду обрабатывать.
Сейчас уже на мега32 память почти вся занята ( и это при том что буфер установлен в 400 байт и максимум 2 паралельных соединения):

AVR Memory Usage
----------------
Device: atmega32u4

Program: 25658 bytes (78.3% Full)
(.text + .data + .bootloader)

Data: 2125 bytes (83.0% Full)
(.data + .bss + .noinit)

EEPROM: 19 bytes (1.9% Full)
(.eeprom)
Rst7
Ну тогда посмотрите сюда - http://electronix.ru/forum/index.php?showtopic=44276

Вот тут почти крайние исходники - http://electronix.ru/forum/index.php?act=a...st&id=30493

Эта штука довольно просто портируется под работу с ENC28J60 (например, вот - http://alyer.frihost.net/web_server.htm и результат - http://wapbox.ath.cx/ , но это не последняя версия, тут по 2 пакета с данными отправляется, такая себе полуполноценная реализация)

В крайних исходниках реализована достаточно полноценная работа с окном и утилизация Delayed ACK, что позволяет достичь вполне вменяемых скоростей на быстрых каналах и не тормозить на медленных.
Ilmarin
Цитата(Rst7 @ Jul 9 2009, 03:42) *
В крайних исходниках реализована достаточно полноценная работа с окном и утилизация Delayed ACK, что позволяет достичь вполне вменяемых скоростей на быстрых каналах и не тормозить на медленных.

- в крайних это в которых?
Rst7
Цитата
- в крайних это в которых?


Эти -
Цитата
Вот тут почти крайние исходники - http://electronix.ru/forum/index.php?act=a...st&id=30493

имеют сей функционал.

PS "Крайние" - это последние. Представители некоторых профессий не любят употреблять слово "последний".
Ilmarin
Цитата(Rst7 @ Jul 9 2009, 03:42) *
Эта штука довольно просто портируется под работу с ENC28J60 (например, вот - http://alyer.frihost.net/web_server.htm и результат - http://wapbox.ath.cx/ , но это не последняя версия, тут по 2 пакета с данными отправляется, такая себе полуполноценная реализация)


А исходников с ENC28J60 нету?
Rst7
Цитата
А исходников с ENC28J60 нету?


У меня - нет. Я не пользую ENC. Появится портер в онлайне, я его попрошу выложить, только склеивать эти версии сами будете.
fmdost
bb-offtopic.gif
Цитата(Rst7 @ Jul 9 2009, 19:58) *
PS "Крайние" - это последние. Представители некоторых профессий не любят употреблять слово "последний".

Альпинисты что ли?! wink.gif
Ilmarin
Цитата(Rst7 @ Jul 9 2009, 14:33) *
У меня - нет. Я не пользую ENC. Появится портер в онлайне, я его попрошу выложить, только склеивать эти версии сами будете.


Вообще, у меня в планах с lwip поигратся - может на mega128 он поместится.
Rst7
Цитата
Вообще, у меня в планах с lwip поигратся - может на mega128 он поместится.


Тогда зачем Вам исходники с поддержкой ENC?
Ilmarin
Цитата(Rst7 @ Jul 10 2009, 01:36) *
Тогда зачем Вам исходники с поддержкой ENC?

чтобы было с чем сравнивать (быстродействие и т.д).
vadim_ich
Цитата(Ilmarin @ Jul 10 2009, 11:19) *
чтобы было с чем сравнивать (быстродействие и т.д).

Здравствуйте! Пытаюсь портировать uIP0.9 +enc28j60 на платформу 8052. Как ни крутил не работает Http. ICMP и ARP работает вроде. Помогите пожалуйста!!!

Вот архив с проектом.
http://depositfiles.com/files/yhf528h17
defunct
Цитата(Rst7 @ Jul 9 2009, 17:58) *
PS "Крайние" - это последние. Представители некоторых профессий не любят употреблять слово "последний".

Крайние, последние.... не лучше будет обозвать их - "самые свежие". ;>

Цитата(Ilmarin @ Jul 10 2009, 06:41) *
Вообще, у меня в планах с lwip поигратся - может на mega128 он поместится.

Только внешнюю память не забудьте добавить. внутренней 4kb RAM - чертовски мало. а с 4+32K - жить можно.
vadim_ich
Цитата(Ilmarin @ Jul 9 2009, 11:03) *
В общем нашёл ошибку ( надо было проверять что пакет уже ушёл, и в рассчёте размеров пакета в uip-split была ошибка). Ну и сделал отправку пустых пакетов. Теперь работает и то и другоe ( выбирается в uNetConfigure.h). Работать стало быстрее, но Линукс по прежнему опережает винду, почему то.

Обновлённый релиз: http://uhttpd-avr.googlecode.com/files/uht...-2009-07-09.zip


Здравствуйте, попробовал портировать uIP+enc28j60 на мк Aduc812. Почему то пакеты больше чем 255 байт принимаются с ошибками. В чем может быть причина?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.