kostya-m 0 25 января, 2007 Опубликовано 25 января, 2007 · Жалоба При исследовании готового uIP в демо версии FreeRTOS был найден баг. Если при компиляции указать размер IP пакета небольшой, меньше чем стандартный в той сети, где будем работать, например у нас в сети 1500, а я указываю 1492, то происходит такая штука: Все что двигается без фрагментации пакетов, ходит хорошо. Фрагментация входящих пакетов так же проблем не вызывает. А вот фрагментация исходящих сбивается. После посылки первого пакета максимального размера 1492, принимающий компьютер вместо подтверждения (код 1) присылает запрос на повторную посылку (код 4) и так до конца. Из общих соображений, не должно быть проблемы, что мое устройство шлет пакеты поменьше, значит оно что-то не то указывает в пакете или при установлении связи. Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия. Однако ее код заметно усложнился, по крайней мере появилась многотридность. Ни кто не пробовал ли ее подцепить под FreeRTOS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 25 января, 2007 Опубликовано 25 января, 2007 · Жалоба Нужна была поддержка UDP, собрал франкенштейна (почти весь стек пришлось прелопатить), работало (проект заглох). Целиком не пробовал, актуальнее LwIP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 26 января, 2007 Опубликовано 26 января, 2007 · Жалоба Удалось уточнить условия возникновения бага. Оказывается, что он связан с указанием размера пакета меньше внутреннего буфера SAM7X, который равен 2048. При этом пакеты ходят любых размеров. Комментарив по этому участку кода недостаточно, может это издержки портирования на эту платформу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Из двух зол: 1. Перевести LwIP под IAR и 2. Встроить современную библиотеку uIP Оказалось проще чем ожидал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Из двух зол: 1. Перевести LwIP под IAR и 2. Встроить современную библиотеку uIP Оказалось проще чем ожидал. Непонятно :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kail 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Из двух зол: 1. Перевести LwIP под IAR и 2. Встроить современную библиотеку uIP Оказалось проще чем ожидал. Непонятно :( :) Да уж... Верно подмечено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 7 февраля, 2007 Опубликовано 7 февраля, 2007 · Жалоба Что-то я часть фразы пропустил :-) Я подключил свежую версию uIP к FreeRTOS, заместо старой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 9 февраля, 2007 Опубликовано 9 февраля, 2007 · Жалоба Информация для пользователей uIP. При большой нагрузке на стек был замечен глюк потери синхронизации IP. При детальном разборе выяснилось, что пакет подтверждения Ack уходил с потребителя, а в APPCALL не приходил. В примере из поставки есть пример APPCALL, в котором все флаги пакета просматриваются эксклюзивно: if(uip_connected()) {...} else if(uip_closed() || uip_aborted()) {...} else if( uip_poll() ) {...} else if(uip_newdata()) {...} else if(uip_rexmit()) {...} else if(uip_acked() ) {...} при детальном разборе были найдены совмещенные пакеты. Потому я обработку собственно входящего пакета объединил: if(uip_connected()) {...} else if(uip_closed() || uip_aborted()) {...} else if( uip_poll() ) {...} else { if(uip_newdata()) {...} if(uip_rexmit()) {...} if(uip_acked() ) {...} } Проблема пропала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 9 февраля, 2007 Опубликовано 9 февраля, 2007 · Жалоба Информация для пользователей uIP. Как-то uIP тут ни причем - кто-то написал приложение (не из примеров поставляемых со стеком - по крайней мере я такого безобразия не нашел в оригинальной поставке) с явными ошибками :(. Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия. Начиная c 4.0.3 есть и образчики работы с 1.0 версией uIP полностью совпадающая с текущей версией с сайта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 9 февраля, 2007 Опубликовано 9 февраля, 2007 · Жалоба В FreeRTOS встроены два пользовательских сервера http и telnet. В этих серверах ответный пакет посылается сразу же при обработке входящего. И такой проблемы не возникает. Мне потребовалась асинхронная отсылка ответов, что может потребоваться и другим. В этом случае посылка ответов производится по событию uip_poll(). Что бы это делать чаще, чем раз в секунду, пришлось подправить стек и поднять частоту опроса. Может проблема как-то связана и с этим. В папке uIP_Demo_IAR_ARM7 поставки FreeRTOS 4.1.3 лежит старый стек 1.62.2.10 2003/10/07 13:23:01. А на сайте 1.65 2006/06/11 21:46:39. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 9 февраля, 2007 Опубликовано 9 февраля, 2007 · Жалоба Повторяю: 1. Упомяноутого Вами ошибочного кода в составе uIP не нашел, посему "катить бочку" на uIP не стоит. Это проблема кого-то из тех, кто писал приложение. Естественно, что при использовании "микроскопических" стеков высока вероятность проблем при использованием обращений к стеку в вариантах отличающихся от условий автора :(. Нужно копать стеки достаточно глубоко, или полагаться на авось :). 2. uIP-1.0 входит в комплект FreeRTOS. Находится в .\demo\common\ethernet\uip\uip-1.0\ используется в демке для ARM9_STR91X, о чем помянуто в документации. Соответственно можно смотреть, как его прикрутил автор этой демки. P.S. К микростекам у меня интерес на данный момент почти "спортивный", по причине наличия своего обкатанного на своей шкуре с 90x годов. Однако возможно потребуется для одной учебно-левой работы использовать посторонний стек. Вот и присматриваюсь.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostya-m 0 10 февраля, 2007 Опубликовано 10 февраля, 2007 · Жалоба У меня нет претензий к написанию стека. Был вопрос к одной из реализаций процедуры приложения. Наверно оно так работало из-за особенностей приложения. Ну, правда, не совсем нет претензий. Стек не хочет работать, если указать размер пакета не равный буферу в процессоре, равный 2К. В FreeRTOS вложен урезанный вариант, на сайте есть более наполненный и очень хорошая документация (http://www.sics.se/~adam/uip/). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться