реклама на сайте
подробности

 
 
> FreeRTOS & uIP Stack, Ошибки в старом uIP и подключение нового
Мусатов Констант...
сообщение Jan 25 2007, 17:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



При исследовании готового uIP в демо версии FreeRTOS был найден баг. Если при компиляции указать размер IP пакета небольшой, меньше чем стандартный в той сети, где будем работать, например у нас в сети 1500, а я указываю 1492, то происходит такая штука:
Все что двигается без фрагментации пакетов, ходит хорошо. Фрагментация входящих пакетов так же проблем не вызывает. А вот фрагментация исходящих сбивается. После посылки первого пакета максимального размера 1492, принимающий компьютер вместо подтверждения (код 1) присылает запрос на повторную посылку (код 4) и так до конца. Из общих соображений, не должно быть проблемы, что мое устройство шлет пакеты поменьше, значит оно что-то не то указывает в пакете или при установлении связи.
Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия. Однако ее код заметно усложнился, по крайней мере появилась многотридность. Ни кто не пробовал ли ее подцепить под FreeRTOS?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
3.14
сообщение Jan 25 2007, 22:26
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



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


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Jan 26 2007, 00:31
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Удалось уточнить условия возникновения бага. Оказывается, что он связан с указанием размера пакета меньше внутреннего буфера SAM7X, который равен 2048. При этом пакеты ходят любых размеров. Комментарив по этому участку кода недостаточно, может это издержки портирования на эту платформу.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 7 2007, 00:49
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Из двух зол:
1. Перевести LwIP под IAR и
2. Встроить современную библиотеку uIP
Оказалось проще чем ожидал.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2007, 01:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Мусатов Константин @ Feb 6 2007, 23:49) *
Из двух зол:
1. Перевести LwIP под IAR и
2. Встроить современную библиотеку uIP
Оказалось проще чем ожидал.

Непонятно sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Kail
сообщение Feb 7 2007, 11:01
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 3-08-06
Пользователь №: 19 285



Цитата(zltigo @ Feb 7 2007, 01:03) *
Цитата(Мусатов Константин @ Feb 6 2007, 23:49) *

Из двух зол:
1. Перевести LwIP под IAR и
2. Встроить современную библиотеку uIP
Оказалось проще чем ожидал.

Непонятно sad.gif

smile.gif Да уж... Верно подмечено.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 7 2007, 14:33
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



Что-то я часть фразы пропустил :-)
Я подключил свежую версию uIP к FreeRTOS, заместо старой.
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 9 2007, 17:31
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



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

Проблема пропала.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 9 2007, 18:09
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Мусатов Константин @ Feb 9 2007, 16:31) *
Информация для пользователей uIP.

Как-то uIP тут ни причем - кто-то написал приложение (не из примеров поставляемых со стеком - по крайней мере я такого безобразия не нашел в оригинальной поставке) с явными ошибками sad.gif.
Цитата
Я нашел, что в FreeRTOS встроена старая версия uIPот 2003-го года. На сайте разработчиков uIP http://www.sics.se/~adam/uip/index.html есть новая версия.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 9 2007, 19:00
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



В 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.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 9 2007, 21:59
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Повторяю:
1. Упомяноутого Вами ошибочного кода в составе uIP не нашел, посему "катить бочку" на uIP не стоит.
Это проблема кого-то из тех, кто писал приложение. Естественно, что при использовании "микроскопических" стеков высока вероятность проблем при использованием обращений к стеку в вариантах отличающихся от условий автора sad.gif. Нужно копать стеки достаточно глубоко, или полагаться на авось smile.gif.
2. uIP-1.0 входит в комплект FreeRTOS. Находится в .\demo\common\ethernet\uip\uip-1.0\
используется в демке для ARM9_STR91X, о чем помянуто в документации. Соответственно можно смотреть, как его прикрутил автор этой демки.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Мусатов Констант...
сообщение Feb 10 2007, 01:00
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 188
Регистрация: 10-10-06
Пользователь №: 21 172



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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 19:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016