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

 
 
> sam9xe lwip
taoga
сообщение Aug 27 2011, 11:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Здравствуйте!

Почти все примеры для TCP из lwIP используют методику запрос/ответ, т.е. на запрос с ПК возвращается порция данных. В примерах веб, фтп серверов или как в этом примере:

Прикрепленный файл  tcpecho_raw.rar ( 3.58 килобайт ) Кол-во скачиваний: 121


Как сделать, что-бы на запрос началась непрерывная передача данных? Как правильно использовать tcp_write не из callback функций, т.е. чтобы контроллер выступал инициатором передачи данных?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skripach
сообщение Aug 27 2011, 12:24
Сообщение #2


■ ■ ■ ■
*****

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



Цитата
В примерах веб, фтп серверов или как в этом примере:

Цитата
чтобы контроллер выступал инициатором передачи данных?

Может контроллер должен быть клиентом, а не сервером. wink.gif


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
taoga
сообщение Aug 27 2011, 18:10
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 8-10-09
Пользователь №: 52 809



Цитата(skripach @ Aug 27 2011, 16:24) *
Может контроллер должен быть клиентом, а не сервером. wink.gif

Может и так, но нужно, чтобы контроллер был сервером. Написать код клиента или сервера, которые будут асинхронно передавать друг другу данные не проблема. Такой код у меня есть.
Я попытался написать код, который посылает данные из обработчика tcp_sent(), но похоже этот обработчик вызывается 4 раза в секунду, скорость передачи соответственно очень медленная.
Попробовал передавать данные из основного цикла программы с помощью tcp_write(), tcp_output(), передача тоже очень медленная и через несколько секунд соединение закрывается.
Поэтому у меня и возник вопрос. Очень мало примеров и информации. Кто-то же передавал данные со скоростью 60 - 80 Мбит?

Цитата(taoga @ Aug 27 2011, 22:08) *
Может и так, но нужно, чтобы контроллер был сервером. Написать код клиента или сервера, которые будут асинхронно передавать друг другу данные не проблема. Такой код у меня есть.

Забыл написать, для ПК есть такой код.
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 28 2011, 18:54
Сообщение #4


Гуру
******

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



Цитата(taoga @ Aug 27 2011, 22:10) *
Я попытался написать код, который посылает данные из обработчика tcp_sent(), но похоже этот обработчик вызывается 4 раза в секунду, скорость передачи соответственно очень медленная.

Для непрерывной передачи вроде бы и нужно из tcp_sent() посылать. Для достижения высокой скорости передачи должен быть достаточного размера TCP_SND_BUF и, возможно, размеры иных буферов, участвующих в передаче. Там много настроек, и очень легко выделить память не туда, где она действительно нужна. Полезно включить статистику и попытаться понять, есть ли где-либо нехватка памяти. Также надо посылать помногу, вплоть до того момента, пока tcp_write() не перестанет возвращать ERR_OK. В общем, стараться держать буфер передачи заполненным.

Цитата(taoga @ Aug 27 2011, 22:10) *
Очень мало примеров и информации.

Да, есть такая особенность у lwip. Стек бесплатный, "вы получаете то, за что заплатили". Опираясь на свой опыт, могу предположить, что для использования lwip в своих проектах народ просто становится экспертами по lwip, а эксперту сторонняя помощь уже не нужна. Ну а потом отвечать на чужие вопросы просто времени нет. Но вообще есть англоязычные списки рассылки на домашней странице проекта. В этих списках на вопросы отвечают. Можно даже пошерстить их архивы: Ваша проблема не экзотическая, её неоднократно решали.

Update:
Да, забыл, для быстрой передачи нужно отключить Nagle Algorithm. То есть после установления соединения сделать "tcp_nagle_disable(pcb);".
Go to the top of the page
 
+Quote Post



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

 


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


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