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

 
 
> 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
Ответов
Мусатов Констант...
сообщение Feb 9 2007, 17:31
Сообщение #2


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

Группа: Участник
Сообщений: 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

Сообщений в этой теме
- Мусатов Константин   FreeRTOS & uIP Stack   Jan 25 2007, 17:29
- - 3.14   Нужна была поддержка UDP, собрал франкенштейна (по...   Jan 25 2007, 22:26
- - Мусатов Константин   Удалось уточнить условия возникновения бага. Оказы...   Jan 26 2007, 00:31
- - Мусатов Константин   Из двух зол: 1. Перевести LwIP под IAR и 2. Встро...   Feb 7 2007, 00:49
|- - zltigo   Цитата(Мусатов Константин @ Feb 6 2007, 23...   Feb 7 2007, 01:03
|- - Kail   Цитата(zltigo @ Feb 7 2007, 01:03) Цитата...   Feb 7 2007, 11:01
- - Мусатов Константин   Что-то я часть фразы пропустил :-) Я подключил све...   Feb 7 2007, 14:33
|- - zltigo   Цитата(Мусатов Константин @ Feb 9 2007, 16...   Feb 9 2007, 18:09
- - Мусатов Константин   В FreeRTOS встроены два пользовательских сервера h...   Feb 9 2007, 19:00
|- - zltigo   Повторяю: 1. Упомяноутого Вами ошибочного кода в с...   Feb 9 2007, 21:59
- - Мусатов Константин   У меня нет претензий к написанию стека. Был вопрос...   Feb 10 2007, 01:00


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

 


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


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