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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Вопрос по LwIP, Скорость отправки
Petr_
сообщение Mar 22 2016, 06:59
Сообщение #16





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Решил свои проблемы с LwIP и делюсь результатом(может кому надо будет).

Итак проблема долгого ожидания ACK после отправки одиночного малого (меньше TCP_WND)
фрейма есть у всех версий LwIP.
В версии 1.3.1 (с нее начинал) это решается:
Код
pcb->flags |= TF_NODELAY;
tcp_write(pcb, DirLLine1, WrPntr1, 0);
tcp_output(pcb);
tcp_write(pcb, DirLLine2, WrPntr2, 0);

Т.е. формированием окна из 2-х пакетов вручную.
Разумеется pcb->flags |= TF_NODELAY; можно выполнить при открытии
pcb (например из tcp_connect(FC->DATA_pcb, &Rem_Addr, FC->FTPDataPort.Val, DATA_PUTconnected); обработчика)
получив pcb текущего соединения.

В версии 1.4.1 (на нее перешел по указанным ниже причинам) проблема таже
и решение то же. Но есть тонкость:
Код
tcp_nagle_disable(pcb); //(этого нет в 1.3.1)
tcp_write(pcb, DirLLine1, WrPntr1, 0);
tcp_output(pcb);
tcp_write(pcb, DirLLine2, WrPntr2, 0);

Но tcp_output(pcb); не выполняется пока не закомментите вот это из самой tcp_output:
Код
  /* First, check if we are invoked by the TCP input processing
     code. If so, we do not output anything. Instead, we rely on the
     input processing code to call us when input processing is done
     with. */
//  if (tcp_input_pcb == pcb) {
//    return ERR_OK;
//  }

Ну или напишите:
Код
tcp_input_pcb = NULL;
tcp_output(pcb);

Что одно и тоже по сути.
Далее пары пакетов будут получать ACK мгновенно и скорость возрастет на порядки.

Далее в 1.3.1 заметил еще проблему.
При открытии соединения для получения данных ACK при открытии
при получении очередного фрейма LwIP не формирует, пока не вызовете
tcp_write(pcb, "A", 1, 1); Т.е. с чем угодно.
В 1.4.1 этой проблемы нет!
Это и стало причиной перехода с 1.3.1 на 1.4.1

Но помните, что если обрабатываете данные "долго",
вызывайте tcp_recved(pcb, p->tot_len);
в конце, а не начале функции (как сделано в примерах).
Поскольку при ее вызове уйдет ACK и вторая сторона вышлет очередной
пакет. И его можно будет пропустить.
При вызове в конце проблем не возникнет - будет вполне естественное ожидание.

Сообщение отредактировал Petr_ - Mar 22 2016, 07:05
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Mar 22 2016, 15:55
Сообщение #17


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

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Спасибо большое, что отписались! Я вот тоже немного почитал/посмотрел по теме этого LwIP и оказывается веб-сервер у него есть свой. И файловая система в нем своя. А STM получается, просто переделала этот готовый веб-сервер под себя. Так получается сколько не смотрю. Нашел LwIP-овские исходники с примерами для веб-сервера и еще некоторых вещей (в общем наз. lwip-contrib) скачал/посмотрел - там есть примеры портирований под linux/win.
Go to the top of the page
 
+Quote Post
Petr_
сообщение Mar 22 2016, 18:13
Сообщение #18





Группа: Участник
Сообщений: 14
Регистрация: 15-03-16
Пользователь №: 90 876



Цитата(AleksBak @ Mar 22 2016, 15:55) *
Спасибо большое, что отписались! Я вот тоже немного почитал/посмотрел по теме этого LwIP и оказывается веб-сервер у него есть свой. И файловая система в нем своя. А STM получается, просто переделала этот готовый веб-сервер под себя. Так получается сколько не смотрю. Нашел LwIP-овские исходники с примерами для веб-сервера и еще некоторых вещей (в общем наз. lwip-contrib) скачал/посмотрел - там есть примеры портирований под linux/win.


Я Вам там вопрос написал в личку на микрочипе.
Там по pcb и их разделению.
Если не дойдет - тут повторю.

А WEB сервер то довольно очевидный...
Я именно работу с ~~ прилаживаю.
Чтоб было проще чем у микрочипа и быстро.
Ну и у меня часть страницы по замыслу во флеше лежит,
а часть на SD карте. С этим тоже определенная работа есть.
Кроме того есть плотная связь с SVG модулями для браузера.
Тут еще головняк.
Но более менее получается.
Go to the top of the page
 
+Quote Post

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

 


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


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