|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||
TCP сервер LWIP stm32f74621.10.2020, 12:25. Показов 4844. Ответов 23
Настроил TCP сервер на плате stm32f746 discovery при помощи FREERTOS и LWIP (использую CubeMX). Дальше измеряю скорость передачи данных от ПК к МК, использую передачу одного и того же массива данных в цикле определенное колличесво раз (сеть локальная, просто провод 10 м от МК к ПК).
А именно массив в 1 кбайт передаю 12800 раз (итого передается 100 МБит)
Дальше замеряю таймером время передачи всех этих данных в преывании увеличивая счетчик
В среднем время, за которое передается все 100 Мбит данных равняется 55 сек, что уже достаточно много, так как PHY позволяет работу на 100 Мбит/сек, а тут получается около 3-4 Мбит/сек. Но еще есть такой момент: из кода выше видно, что массив передается 16 раз по 800 раз (итого 12800 раз), если замерять логическим анализатором время передачи каждой порции из 800 массивов, то они будут существенно различаться. Т.е. эти 800 массивов могут передаться за 1.5 секунды, следующие 800 уже за 5 секунд и тд. Помимо передачи по TCP программа почти ничего не выполняет, мигает светодиодом раз в секунду в отдельной задаче. Почему наблюдается такое сильное различие ов времени передачи при абсолютно одинаковых условиях работы кода? От каких настроек зависит скорость работы LWIP?
0
|
||||||||||||||||
| 21.10.2020, 12:25 | |
|
Ответы с готовыми решениями:
23
LWIP TCP сервер ошибки соединения Передача данных по Ethernet TCP LWIP LWIP TCP RAW API server |
|
76 / 52 / 26
Регистрация: 23.01.2019
Сообщений: 134
|
|
| 21.10.2020, 20:28 | |
|
Привет.
Сравнивать физическую возможную скорость интерфейса и реальную скорость передачи данных конкретным приложением не совсем корректно. Вы не учитываете наличие служебных байтов и пакетов протоколов IP и TCP. К тому же TCP - это протокол с подтверждением, то есть, после передачи пакета, ожидается подтверждение его получения с другой стороны. Более того, если подтверждения не приходят, пакеты могут отправляться повторно. Вы пишете, что у вас подтормаживет терминал. Возможно узкое место в принимающей стороне.
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 21.10.2020, 22:23 | |
|
Почитав объяснение функции:
- Вы заставляете функцию копировать данные себе куда-то в свой буфер. Может отнимать время у менеджера памяти, помимо самого копирования. - Вы вызываете функцию без контроля возвращаемого значения. То есть попросту половина месседжей может быть утеряна, но самое главное - вы останавливаете на время вызова поток отправки данных, ну, или хотя бы мешаете ему работать. PS: все это теоретические рассуждения.
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||
| 22.10.2020, 08:10 [ТС] | |||||||
|
yatrim,
https://studfile.net/preview/5... %BE%D0%B2. Я думаю это не существено сказывается на скорости по сравнению с размером передеваемых данных в 1 Кбайт Со служебными протоколами уже посложнее, на каждый отправленый пакет мы получаем пакет с подтверждением, тут уже на скорости значительнее может сказаться, но опять же, я получил скорость 3-4 МБит/сек, а хотелось бы 40-50. Можно же как-то получить такие значения, вопрос только на что обратить внимание. Voland_,
0
|
|||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 22.10.2020, 10:44 | |||
|
Функция netconn_write() - по-сути обрезанная netconn_write_partly(): https://github.com/m-labs/lwip... #L277-L280 У которой возвращаемое значение имеет следующие возможные состояния: https://github.com/m-labs/lwip... .h#L50-L73 которые вы никак не контролируете в момент отправки. Попробуйте поиграться с флагом "NETCONN_FLAG_NON_BLOCKING": https://github.com/m-labs/lwip... #L302-L305 , т.к. он напрямую влияет на выполнение функции внутри цикла. Возможно, в неблокирующем режиме скорость будет выше (тогда нужно использовать netconn_write_partly()).
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 22.10.2020, 12:56 [ТС] | ||
|
Voland_,
Т.к. именно этот параметр приводится к функции netconn_write_partly() http://www.nongnu.org/lwip/2_0... 83f7c423bf
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 22.10.2020, 13:34 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 22.10.2020, 13:51 [ТС] | |
|
Voland_, Я думаю, я пока еще не так хорошо разобрался в LWIP, чтобы написать свое решение, но понемного изучаю как там все устроено. С NETCONN_COPY и NETCONN_NOCOPY() вроде разобрался. NETCONN_COPY используется в случае если отправляемые данные могут быть изменены в ходе отправки, поэтому они предварительно копируются. NETCONN_NOCOPY используется, если отправляем неизменные данные.
NETCONN_MORE так понимаю если данные могут быть разбиты. И NETCONN_DONTBLOCK если данные должны быть отрпавлены одним пакетом. Еще у меня возник вопрос относительно функций netconn_write(conn, dataptr, size, apiflags) и netconn_write_partly(conn, dataptr, size, apiflags, bytes_written) В чем их различие, почему netconn_write используется чаще? И к парметру bytes_written отдельные вопросы: bytes_written pointer to a location that receives the number of written bytes Указатель на место, которое получает количество отправленных байтов? Т.е. сюда мы должны записать переменную, в которую будет записываться сколько байт отправилось функцией netconn_write_partly?
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 22.10.2020, 18:15 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 23.10.2020, 06:55 [ТС] | ||
|
Voland_, Если я правильно понял, то в функцию netconn_write и netconn_write_partly (я так и не понял их различие) мы можем поместить массив размера больше 1,5 КБ, т.е. больше максимального размера кадра для TCP, например 100 МБайт, и функция отправки уже будет заниматься фрагментацией на кадры и т.д. Однако если мы укажем параметром NETCONN_DONTBLOCK, то отправлять можно данные только размером меньше 1,5 КБ.
Опять же я не понимаю разницы между netconn_write и netconn_write_partly, что первое может фрагментировать пакет что второе Добавлено через 1 минуту Voland_,
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
|
| 23.10.2020, 09:00 | |
|
Не по теме: Voland_, верни аву, а то "я не узнаю вас в гриме"
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 23.10.2020, 09:19 | |||
. Я ж Вам дал ссылки на места где функции написаны?Функция netconn_write() вызывает netconn_write_partly() с параметром получения оставшихся байт = NULL. Это значит, что netconn_write() является частным случаем, с учетом определенного режима, скорее всего дефолтного, в котором этот параметр всегда возвращает 0 (при отсутствии проблем) - по крайней мере в BLOCKING-режиме так должно быть, исходя из назначения. Не по теме: Дети подрастают :). Меняются игры...
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 23.10.2020, 12:29 [ТС] | ||
|
Voland_,
0
|
||
|
|
||
| 23.10.2020, 13:19 | ||
|
Запретите все прерывания и передавайте в цикле, а еще лучше через DMA остановив ядро переведя в режим Sleep.
0
|
||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||||||||||||||||||||
| 23.10.2020, 13:55 [ТС] | |||||||||||||||||||||||||||||
|
locm,
Добавлено через 22 минуты locm, Voland_, приведу еще код, но он практически такой же как и во всех примерах Настройка LWIP Кликните здесь для просмотра всего текста
Создание соединения Кликните здесь для просмотра всего текста
Поток приема Кликните здесь для просмотра всего текста
Поток отправки Кликните здесь для просмотра всего текста
Еще есть задача, в которую передается все, что принимается по TCP Кликните здесь для просмотра всего текста
0
|
|||||||||||||||||||||||||||||
|
|
|
| 23.10.2020, 15:55 | |
|
У вас еще и ОС. Все это требует процессорного времени. То что частота 200 МГц ни о чем не говорит. Не оптимальный код может свести на нет все мегагерцы.
Напишите код как можно проще без ОС и прерываний. В цикле функции main передавайте данные и смотрите какая будет скорость. Выберите оптимизацию по скорости и включите LTO.
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||
| 23.10.2020, 16:06 [ТС] | |||
|
locm,
Хорошо, спасибо за совет, перепишу на RAW.
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||
| 23.10.2020, 20:10 [ТС] | ||
|
locm,
Можете подсказать, как выбрать оптимизацию по скорости и почему она будет влиять на скорость передачи TCP?
0
|
||
|
|
|||
| 23.10.2020, 21:08 | |||
|
Нужно собрать с параметрами компиляции -Ofast и -flto. Ищите что-то похожее в CubeIDE.
0
|
|||
| 23.10.2020, 21:08 | |
|
Помогаю со студенческими работами здесь
20
Можно ли на netconn api LwIP сделать сервер с несколькими подключениями на один порт TCP сервер stm32 Stm32f746-disco b-02 и b-04 STM32F746, sim800l, воспроизведение аудио STM32F746 LCD лишние точки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|