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

 
 
> проблемы с lwIp
_fun_
сообщение Mar 13 2012, 04:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Здравствуйте уважаемые гуру lwIP sm.gif Видно, не выйдет из меня толкового электронщика. Почитаешь форум, тут люди за пару недель с нуля интернет прикручивают или с Осями разбираются, а я иногда месяцами на одном месте сижу...sad.gif Вообщем проблема в следующем: как-то прикрутил к своему проекту на LPC1768 (под IAR) lwip неизвестной версии, столкнулся со следующей проблемой - через некоторое время при пересылке больших пакетов (>100 байт ) контроллер перестает отвечать. С маленькими (десятки байт) все стабильно. Попробовал решить эту проблему скачав и прикрутив lwIP 1.4 - заменил файлы и повис на ошибке - Error[Li005]: no definition for "ethernetif_input". Нифига не понимаю - почему IAR эту функцию не видит, ethernetif.h находит, ethernetif.с в проект включен

Сообщение отредактировал _fun_ - Mar 13 2012, 05:01
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
andrewlekar
сообщение Mar 13 2012, 05:08
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



У lwip файлик ethernetif.c в каталоге netif идет в качестве примера - настоящий ethernetif.c лежит в каталоге port. ethernetif.h у меня вообще в проекте не наблюдается - вроде в lwip 1.4 его не было.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Mar 13 2012, 06:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



lwIp 1.4.0 заработал, а проблема с большими пакетами осталась. Такое впечатление, что все это как-то связано с памятью..
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 13 2012, 06:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(_fun_ @ Mar 13 2012, 08:39) *
Видно, не выйдет из меня толкового электронщика. Почитаешь форум, тут люди за пару недель с нуля интернет прикручивают или с Осями разбираются, а я иногда месяцами на одном месте сижу...sad.gif

За пару недель интернет прикручивается при наличии опыта. У меня тоже всё это начиналось со скрипом, а сейчас кажется ерундой.

Цитата(_fun_ @ Mar 13 2012, 10:05) *
lwIp 1.4.0 заработал, а проблема с большими пакетами осталась. Такое впечатление, что все это как-то связано с памятью..

Про "связано с памятью" - это комментарий от безысходности, наверное.
Я бы не рассчитывал на то, что сейчас кто-то появится и скажет: "О! У меня это уже было! Делать нужно так и так..."
Нужно досконально разобраться в принципах работы МК, Ethernet MAC, lwip. Только так можно гарантировать, что всё это будет работать. Более того, только так можно быть уверенными, что будущие глюки будут исправлены. Ну и тщательная отладка: благо, сейчас есть средства внутрисхемной отладки, а lwip позволяет вести довольно подробную статистику.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Mar 13 2012, 08:54
Сообщение #5


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



1. LwIP проверен не одним проектом и не одной платформой стек рабочий. (Правда я его обновляю с репозитория что и вам советую).

2. Указывайте более детальную информацию хотя бы какой протокол используете с ОС или без.

3. Все проблемы на 90% находятся в драйвере MAC и от его реализации, также от его реализации сильно зависит пропускная способность.

4. Вам придется написать свой драйвер для MAC, ибо те которые я встречал в интернете да и примерах с IAR глючные и годятся только подсмотреть использовать их не рекомендую.

5. Изучите все настройки стека их довольно много но без этого никак. В вашем случае я бы хотел обратить внимание на значение PBUF_POOL_SIZE и PBUF_POOL_BUFSIZE. Возможно их не хватает, а драйвер не умеет обрабатывать правильно ситуации переполнений или еще чего.

6. Правильно ли вы работаете в LwIP буферами (pbuf) ? Обязательно изучите их исходники они являются основой стека.

7. Если вы используете без OC убедитесь что все таймера вызываются вовремя (теже pbuf).

8. Убедитесь что у вас нет утечки памяти и все ресурсы освобождате правильно.

Ну вот такие рекомендации.


Цитата
Видно, не выйдет из меня толкового электронщика. Почитаешь форум, тут люди за пару недель с нуля интернет прикручивают или с Осями разбираются, а я иногда месяцами на одном месте сижу...


Не помню кто говорил: Если ты знаешь один язык программирования ты знаешь их все. Если ты умеешь программировать один микроконтроллер сможешь и другой. С осями тоже самое если знаешь отлично одну то и с другой быстро разберешься.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Mar 13 2012, 10:36
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Спасибо всем большое, буду разбираться, но параллельно хотелось бы и дальше в этой теме задавать вопросы на которые я толком пока не могу найти ответа.
EMAC взял готовый из интернета. (LPC17xx_EMAC). ОС нету. До этого работал с UIP, с ним разобрался, думал LWIP тоже самое, но не тут то было (по крайней мере для меня sm.gif ). За что именно отвечает PBUF_POOL_SIZE и PBUF_POOL_BUFSIZE ??? пробовал изменять значения, что-то происходит, но толком пока сказать не могу. И еще, я извиняюсь, но можете мне обьяснить на пальцах значение слова "POOL" (или "пулить"? )?? часто где его встречаю

Сообщение отредактировал _fun_ - Mar 13 2012, 10:37
Go to the top of the page
 
+Quote Post
ReRayne
сообщение Mar 13 2012, 10:46
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 12-10-11
Из: Москва
Пользователь №: 67 699



Цитата
"О! У меня это уже было! Делать нужно так и так..."

Аха-ха-ха-ха)))
Черт, а я думала только на STM32 такая проблема, грешила на драйвер DMA изернета, что его Suspend mode не вытаскивают.
Пинги и на малые пакеты со временем умрут.
Лично у меня просто перестает подниматься прерывание от Ethernet....
Предлагаю автору в привате переговорить и провести совместно серию тестов на наших контроллерах.
Кстати PHY уровень Ethernet какой?)

Сообщение отредактировал ReRayne - Mar 13 2012, 12:04
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Mar 13 2012, 11:55
Сообщение #8


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
До этого работал с UIP, с ним разобрался, думал LWIP тоже самое, но не тут то было (по крайней мере для меня ).


UIP - это жалкое подобие TCP/IP стека, рассчитанное на 8 битники с малыми размера ми памяти, за это вы платите скорость и функциональностью.

LWIP - очень близок к серьезным стекам, он более - менее соответствует всяким RFC.


PBUF_POOL_BUFSIZE - размер входящего буфера, если входящий пакет будет больше чем этот размер, нужно буфера обьеденять в цепочку (если это неумело сделать то эффект может быть такой как у вас), что приводит к петере производительности но у величивает расход памяти, эсли памяти до черта идеальный размер 1540 (1532) в зависимости от MAC.

PBUF_POOL_SIZE - указывает количество вхjдных буферов для входящих фреймов. Если буферов будет мало пакеты начнут теряться что в случае TCP приведет ку резкому снижению пропускной способности (а то и вобще к неработаспособности в зависимости от настроек других параметров), в случае UDP это привет к потере данных.

как то так MY_BUFF[ PBUF_POOL_SIZE ][ PBUF_POOL_BUFSIZE ];

Цитата
Пинги и на малые пакеты со временем умрут.
Лично у меня просто перестает подниматься прерывание от Ethernet....


Это 100% кривой драйвер MAC.
Если вы используете STM32 и LwIP без ОС, вам вообще не нужны прерывания от мак контроллера.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Mar 14 2012, 06:44
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Вообщем я, похоже, нашел причину : в opt.h стояло значение TCP_SND_BUF меньше, чем я указывал в tcp_write(...) , увеличил и все починилось sm.gif, хотя, можно было и несколькими пакетами я так понимаю отправить. Подскажите пожалуйста, зачем нужен TCP_QUEUE_OOSEQ ???
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 14 2012, 07:04
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(_fun_ @ Mar 14 2012, 10:44) *
Подскажите пожалуйста, зачем нужен TCP_QUEUE_OOSEQ ???

В ваших краях гугл сломался?
Tuning TCP
Go to the top of the page
 
+Quote Post
_fun_
сообщение Mar 14 2012, 08:47
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Цитата(scifi @ Mar 14 2012, 11:04) *
В ваших краях гугл сломался?
Tuning TCP


Прочитал, спасибо sm.gif Но с английским туго, как ни стараюсь. Понял то, что эта весчь нужна когда когда есть опасность потерять пакет в большом объеме. Правильно?
Подскажите, пожалуйста FTP сервер для LWIP какой не сильно сложный и не очень замудреный лучше использовать?? я скачал отсюда:
FTP , сижу разбираюсь, пока вышел затык с Фифо и файловой системой (???). Начал сомневаться что я с правильного конца начал.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 14 2012, 09:09
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(_fun_ @ Mar 14 2012, 12:47) *
Прочитал, спасибо sm.gif Но с английским туго, как ни стараюсь.

Ну и зря. Без знания английского поднимать lwip - это мазохизм.

Цитата(_fun_ @ Mar 14 2012, 12:47) *
Понял то, что эта весчь нужна когда когда есть опасность потерять пакет в большом объеме. Правильно?

Без знания TCP поднимать lwip - это совсем неприлично.
Почитайте про TCP. Первоисточники - это всяческие RFC. Но и на русском тоже много написано. Хотя бы тут:
TCP
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Mar 14 2012, 09:18
Сообщение #13


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Цитата
Подскажите, пожалуйста FTP сервер для LWIP какой не сильно сложный и не очень замудреный лучше использовать??


Я сам писал. готового под LwIP и FATfs нету.
Go to the top of the page
 
+Quote Post
_fun_
сообщение Mar 14 2012, 12:20
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 24-04-08
Пользователь №: 37 032



Цитата(scifi @ Mar 14 2012, 12:09) *
Ну и зря. Без знания английского поднимать lwip - это мазохизм.


Без знания TCP поднимать lwip - это совсем неприлично.
Почитайте про TCP. Первоисточники - это всяческие RFC. Но и на русском тоже много написано. Хотя бы тут:
TCP


Уважаемый scifi, мне право не удобно, такое чувство, что я на очень авторитетном для меня форуме задаю какие-то мегаглупые вопросы. По английски я как-то читаю, но вот мозгов у меня не хватает понять правильно (или корректно перевести???) следующую вещь:
Queueing out-of-sequence packets (TCP_QUEUE_OOSEQ)
Strictly, queueing out-of-sequence packets is only necessary when packet loss is expected, since can prevents resending all packets (e.g. packets 2, 3, 4) when only one packet is lost (e.g. packet 2 is lost but 3 and 4 have been received correctly: with TCP_QUEUE_OOSEQ disabled, packets 3 and 4 would be discarded as they are out-of-sequence and would have to be resent in-sequence by the remote host once packet 2 got through). However, even in environments where packet loss isn't expected, it might still happen, so enabling this is recommended.

Поэтому и спросил. Думал, может кто на пальцах объяснит. Параллельно пытаюсь разобраться сам. TCP считал что знаю, раньше UIP к LPC17xx прикручивал, разбирался и в физике и в Дункеле. По крайней мере та ссылка которую вы мне дали для меня не нова. Считаете, нужно вернутся к истокам?)) Типа "смотрю в книгу - вижу фигу"??? ))))
Сейчас еще ситуация сложилась, что в ограниченное время нужно разобраться со многим. Поэтому и начал сюда писать.

Цитата(MALLOY2 @ Mar 14 2012, 12:18) *
Я сам писал. готового под LwIP и FATfs нету.


А прилично будет попросить у вас показать исходники?

Сообщение отредактировал _fun_ - Mar 14 2012, 12:24
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Mar 14 2012, 12:38
Сообщение #15


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Да могу, но это код работает с FREERTOS, LwIP и FATfs, реализует не все команды FTP (только которые мне нужны были), и не поддерживает пассивный режим FTP.


Прикрепленные файлы
Прикрепленный файл  ftp.zip ( 4.38 килобайт ) Кол-во скачиваний: 114
 
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 14 2012, 12:39
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(_fun_ @ Mar 14 2012, 16:20) *
Уважаемый scifi, мне право не удобно, такое чувство, что я на очень авторитетном для меня форуме задаю какие-то мегаглупые вопросы.

Ладно, зря я наехал. Просто лень было выступать переводчиком.

Цитата(_fun_ @ Mar 14 2012, 16:20) *
Queueing out-of-sequence packets (TCP_QUEUE_OOSEQ)
Strictly, queueing out-of-sequence packets is only necessary when packet loss is expected, since can prevents resending all packets (e.g. packets 2, 3, 4) when only one packet is lost (e.g. packet 2 is lost but 3 and 4 have been received correctly: with TCP_QUEUE_OOSEQ disabled, packets 3 and 4 would be discarded as they are out-of-sequence and would have to be resent in-sequence by the remote host once packet 2 got through). However, even in environments where packet loss isn't expected, it might still happen, so enabling this is recommended.

Буферизация пакетов, приходящих вне очереди.
Строго говоря, буферизация таких пакетов необходима только тогда, когда ожидается потеря пакетов, так как буферизация предотвращает повторную посылку всех пакетов (например, пакетов 2, 3, 4) когда только один пакет потерян (например, пакет 2 потерян, но 3 и 4 получены корректно: при отключенном TCP_QUEUE_OOSEQ пакеты 3 и 4 были бы выброшены, так как они пришли вне очереди, и они должны были бы быть посланы повторно удалённым узлом в порядке очереди после того, как пакет 2 будет принят). Однако, даже там, где потеря пакетов не ожидается, она всё равно может происходить, поэтому включение этой опции рекомендуется.

Кажется, исчерпывающее объяснение. Понятно, что вся эта радость не бесплатна: буферизация расходует память. Так что смотрите сами.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:08
Рейтинг@Mail.ru


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