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

FreeRTOS & uIP Stack

При исследовании готового uIP в демо версии FreeRTOS был найден баг. Если при компиляции указать размер IP пакета небольшой, меньше чем стандартный в той сети, где будем работать, например у нас в сети 1500, а я указываю 1492, то происходит такая штука:

Все что двигается без фрагментации пакетов, ходит хорошо. Фрагментация входящих пакетов так же проблем не вызывает. А вот фрагментация исходящих сбивается. После посылки первого пакета максимального размера 1492, принимающий компьютер вместо подтверждения (код 1) присылает запрос на повторную посылку (код 4) и так до конца. Из общих соображений, не должно быть проблемы, что мое устройство шлет пакеты поменьше, значит оно что-то не то указывает в пакете или при установлении связи.

Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия. Однако ее код заметно усложнился, по крайней мере появилась многотридность. Ни кто не пробовал ли ее подцепить под FreeRTOS?

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


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

Нужна была поддержка UDP, собрал франкенштейна (почти весь стек пришлось прелопатить), работало (проект заглох). Целиком не пробовал, актуальнее LwIP.

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


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

Удалось уточнить условия возникновения бага. Оказывается, что он связан с указанием размера пакета меньше внутреннего буфера SAM7X, который равен 2048. При этом пакеты ходят любых размеров. Комментарив по этому участку кода недостаточно, может это издержки портирования на эту платформу.

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


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

Из двух зол:

1. Перевести LwIP под IAR и

2. Встроить современную библиотеку uIP

Оказалось проще чем ожидал.

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


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

Из двух зол:

1. Перевести LwIP под IAR и

2. Встроить современную библиотеку uIP

Оказалось проще чем ожидал.

Непонятно :(

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


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

Из двух зол:

1. Перевести LwIP под IAR и

2. Встроить современную библиотеку uIP

Оказалось проще чем ожидал.

Непонятно :(

:) Да уж... Верно подмечено.

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


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

Что-то я часть фразы пропустил :-)

Я подключил свежую версию uIP к FreeRTOS, заместо старой.

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


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

Информация для пользователей 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() ) {...}

}

 

Проблема пропала.

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


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

Информация для пользователей uIP.

Как-то uIP тут ни причем - кто-то написал приложение (не из примеров поставляемых со стеком - по крайней мере я такого безобразия не нашел в оригинальной поставке) с явными ошибками :(.

Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия.

Начиная c 4.0.3 есть и образчики работы с 1.0 версией uIP полностью совпадающая с текущей версией с сайта.

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


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

В 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.

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


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

Повторяю:

1. Упомяноутого Вами ошибочного кода в составе uIP не нашел, посему "катить бочку" на uIP не стоит.

Это проблема кого-то из тех, кто писал приложение. Естественно, что при использовании "микроскопических" стеков высока вероятность проблем при использованием обращений к стеку в вариантах отличающихся от условий автора :(. Нужно копать стеки достаточно глубоко, или полагаться на авось :).

2. uIP-1.0 входит в комплект FreeRTOS. Находится в .\demo\common\ethernet\uip\uip-1.0\

используется в демке для ARM9_STR91X, о чем помянуто в документации. Соответственно можно смотреть, как его прикрутил автор этой демки.

 

P.S.

К микростекам у меня интерес на данный момент почти "спортивный", по причине наличия своего обкатанного на своей шкуре с 90x годов. Однако возможно потребуется для одной учебно-левой работы использовать посторонний стек. Вот и присматриваюсь....

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


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

У меня нет претензий к написанию стека. Был вопрос к одной из реализаций процедуры приложения. Наверно оно так работало из-за особенностей приложения. Ну, правда, не совсем нет претензий. Стек не хочет работать, если указать размер пакета не равный буферу в процессоре, равный 2К. В FreeRTOS вложен урезанный вариант, на сайте есть более наполненный и очень хорошая документация (http://www.sics.se/~adam/uip/).

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


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

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

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

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

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

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

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

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

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

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