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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> stm32f7+Lwip+lan8742, Тормоза при передачи
Kot_Schrodingera
сообщение Nov 28 2017, 07:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Всем доброго дня
Нуждаюсь в помощи с Lwip
В распоряжение железка stm32f745
Передаю картинку(размер 156к)
Прочитал все статьи которые есть на форуме, я даже получилась передача картинки за 30 мс
Во первых, как я понял из многих статей, увеличение скорости передачи достигается путем настройки TCP_WND, TCP_MSS, PBUF_POOL_BUFSIZE, PBUF_POOL_SIZE
Многие писали, что последние два параметра устанавливают порядка 100 и 16 соответственно, но это противоречит тому, что описано здесь http://lwip.wikia.com/wiki/Tuning_TCP
Могли бы вы объяснить почему так или дать путь, в котором нужно искать информацию
Во вторых, при передаче картинки бывают лаги, и вместо 30мс она передается за 1-3 с(использую API Netconn), время замерял следующим образом:

static uint32_t lt1, lt2, ltd;
lt1 = xTaskGetTickCount();
netconn_write(conn, buff_img, size_rx, NETCONN_NOCOPY);
lt2 = xTaskGetTickCount();
ltd = lt2-lt1;

То есть висит на этой функции
Не могу понять, это в драйвере ethernet проблемы или lwip так устроен?и почему тогда данная проблема происходит через раз
Go to the top of the page
 
+Quote Post
sadat
сообщение Nov 29 2017, 15:26
Сообщение #2


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

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Ставим на комп wireshark, смотрим лог временных меток принятия пакетов. Думаем.
У меня картинка 768кб (bmp) по http заливается за 100-120 мс.
32f429, обработка ethernet в прерывании.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 29 2017, 15:36
Сообщение #3


Гуру
******

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



Цитата(sadat @ Nov 29 2017, 18:26) *
32f429, обработка ethernet в прерывании.

Прерывание или нет - не так важно. Важно настроить правильно размеры и число буферов, коих немало. Ну и не нарушать правила использования API.
Go to the top of the page
 
+Quote Post
sadat
сообщение Nov 29 2017, 15:41
Сообщение #4


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

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Цитата(scifi @ Nov 29 2017, 18:36) *
Прерывание или нет - не так важно. Важно настроить правильно размеры и число буферов, коих немало. Ну и не нарушать правила использования API.

Опытным путём дошел, что обработка состояния ethernet оптимальна при опросе 2мс. Чаще - нет никакого выигрыша по скорости, реже - паузы между пакетами увеличиваются.
Ну и не забывать в настройках увеличивать реально выделенную память под буфера приёма и передачи.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Nov 29 2017, 22:46
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(sadat @ Nov 29 2017, 18:41) *
Опытным путём дошел,...


под форточками, есть параметр для уровня TCP - задержка перед передачей. в lwip не помню - функция есть, реализация или заглушка - давно было дело.
Оно?

(круглый)
Go to the top of the page
 
+Quote Post
Kot_Schrodingera
сообщение Nov 30 2017, 06:40
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



wireshark не вариант, потому что обмен идет между железками и нужен хаб или настраиваемый свитч
Цитата
правила использования API.
- можно об этом поподробнее?
Цитата
Важно настроить правильно размеры и число буферов, коих немало.
не подскажите где об этом можно найти информацию?
Еще раз повторюсь, те настройки, которые предлагает lwip.wikia не удовлетворяют меня
Go to the top of the page
 
+Quote Post
Kot_Schrodingera
сообщение Nov 30 2017, 12:24
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Нашел еще кое-что, когда виснет передача, основное время забирает передача ровно 2 пакетов (2920 байт). Время передачи 2 пакетов равно примерно 1-2 сек
Go to the top of the page
 
+Quote Post
sadat
сообщение Nov 30 2017, 14:35
Сообщение #8


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

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Цитата(Kot_Schrodingera @ Nov 30 2017, 15:24) *
Нашел еще кое-что, когда виснет передача, основное время забирает передача ровно 2 пакетов (2920 байт). Время передачи 2 пакетов равно примерно 1-2 сек

Без внешнего мониторинга будете долго ходить "вокруг да около". За это время вполне можно хаб достать и поставить программу.
Вот пример файла, вполне себе работоспособного. В своё время пробовал несколько разных из разных источников, остановился на этом.
Прикрепленный файл  lwipopts.txt ( 7.73 килобайт ) Кол-во скачиваний: 202
Go to the top of the page
 
+Quote Post
BioWolf2000
сообщение Dec 1 2017, 07:30
Сообщение #9


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

Группа: Свой
Сообщений: 89
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 897



В такой связке тоже были проблемы. Долго изучал пакеты Wireshark и видел непонятные паузы. Проблема решилась правкой в файле stm32f7xx_hal_eth.c функции HAL_ETH_TransmitFrame добавлением строки __DSB();

Код
      heth->TxDesc = (ETH_DMADescTypeDef *)(heth->TxDesc->Buffer2NextDescAddr);
    }
  }
  
//////////////////////
   __DSB();

/////////////////////
    
  /* When Tx Buffer unavailable flag is set: clear it and resume transmission */
  if (((heth->Instance)->DMASR & ETH_DMASR_TBUS) != (uint32_t)RESET)
  {
    /* Clear TBUS ETHERNET DMA flag */
    (heth->Instance)->DMASR = ETH_DMASR_TBUS;
    /* Resume DMA transmission*/
    (heth->Instance)->DMATPDR = 0;
  }


--------------------
ex740104/103 БГУИР
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 1 2017, 07:37
Сообщение #10


Гуру
******

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



Цитата(BioWolf2000 @ Dec 1 2017, 10:30) *
В такой связке тоже были проблемы. Долго изучал пакеты Wireshark и видел непонятные паузы. Проблема решилась правкой в файле stm32f7xx_hal_eth.c функции HAL_ETH_TransmitFrame добавлением строки __DSB();

Кстати, у меня давно сложилось ощущение, что то, как они портировали lwip на STM32, - это, скорее, некая демонстрация. Как небольшая демка вроде бы как-то работает. А если хотите сделать что-то серьёзное - используйте на свой страх и риск. Если взорвётся, сожгёт ваш дом, уронит на кого-то бетонную плиту - сами виноваты.
Go to the top of the page
 
+Quote Post
Kot_Schrodingera
сообщение Dec 1 2017, 07:43
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Цитата
Без внешнего мониторинга будете долго ходить "вокруг да около".

Поставил вторую сетевуху и сделал мост
Нашел эту большую паузу, оказалось вот что
Код
5288    69.077155    172.29.21.156    172.29.21.190    TCP    1514    [TCP Previous segment not captured] 20020 → 40392 [ACK] Seq=1814255 Ack=3988 Win=1865 Len=1460
5289    69.077975    172.29.21.190    172.29.21.156    TCP    60    [TCP Dup ACK 5286#1] 40392 → 20020 [ACK] Seq=3988 Ack=1812795 Win=65535 Len=0
5311    70.366679    172.29.21.156    172.29.21.190    TCP    1514    [TCP Retransmission] 20020 → 40392 [ACK] Seq=1812795 Ack=3988 Win=1865 Len=1460


то есть я правильно понял?что процесс retransmission занимает секунду?
Go to the top of the page
 
+Quote Post
BioWolf2000
сообщение Dec 1 2017, 07:45
Сообщение #12


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

Группа: Свой
Сообщений: 89
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 897



Цитата(Kot_Schrodingera @ Dec 1 2017, 10:43) *
Поставил вторую сетевуху и сделал мост
Нашел эту большую паузу, оказалось вот что
Код
5288    69.077155    172.29.21.156    172.29.21.190    TCP    1514    [TCP Previous segment not captured] 20020 → 40392 [ACK] Seq=1814255 Ack=3988 Win=1865 Len=1460
5289    69.077975    172.29.21.190    172.29.21.156    TCP    60    [TCP Dup ACK 5286#1] 40392 → 20020 [ACK] Seq=3988 Ack=1812795 Win=65535 Len=0
5311    70.366679    172.29.21.156    172.29.21.190    TCP    1514    [TCP Retransmission] 20020 → 40392 [ACK] Seq=1812795 Ack=3988 Win=1865 Len=1460


то есть я правильно понял?что процесс retransmission занимает секунду?


У меня без Data Synchronization Barrier тоже около секунды было. В STM32F7 серии из-за кэшей может неккоректно DMA работать.

И вообще, мне кажется, с выходом F7 серии ST бездумно перенесла код драйверов с 4-ой серии. Очень уж сырые библиотеки


--------------------
ex740104/103 БГУИР
Go to the top of the page
 
+Quote Post
Kot_Schrodingera
сообщение Dec 1 2017, 08:12
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Цитата
Проблема решилась правкой в файле stm32f7xx_hal_eth.c функции HAL_ETH_TransmitFrame добавлением строки __DSB();

Данная строка присутствует, но увы...не помогло
Go to the top of the page
 
+Quote Post
sadat
сообщение Dec 1 2017, 09:44
Сообщение #14


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

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Почитать ERRATу на чип?
http://www.st.com/content/ccc/resource/tec....DM00145382.pdf
Полная уверенность в работоспособности второго устройства?
Go to the top of the page
 
+Quote Post
Kot_Schrodingera
сообщение Dec 1 2017, 10:39
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 28-11-17
Пользователь №: 100 395



Да, уверен
Go to the top of the page
 
+Quote Post

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

 


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


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