sadat 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба Да, уверен В таких случаях выкладывают часть кода для анализа - то, что не составляет коммерческую тайну. Телепатические приёмы уже не работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 1 декабря, 2017 Опубликовано 1 декабря, 2017 · Жалоба ..скорее, некая демонстрация.... +1 немного другая мысль - что типа специально немного удалили пару блоков кода. не серьёзно но вот как раз паузы создаёт :) - но думаю мысля та-же.. (круглый) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 4 декабря, 2017 Опубликовано 4 декабря, 2017 (изменено) · Жалоба В таких случаях выкладывают часть кода для анализа - то, Я думаю не имеет смысла выкладывать часть, которая относится к lwip, там я ничего не менял void netconn_thread(void const *argument) { HAL_GPIO_WritePin(GPIOE, USB_PWR_GPIO_Pin, GPIO_PIN_SET); HAL_Delay(10000); struct netconn *conn, *newconn; err_t err; conn = netconn_new(NETCONN_TCP); if(conn != NULL) { err = netconn_bind(conn, NULL, 20020); if(err == ERR_OK) { netconn_listen(conn); for(;;) { err = netconn_accept(conn, &newconn); connNoErr = true; //netconn_set_recvtimeout(newconn, 50); while((!ERR_IS_FATAL(netconn_err(newconn)))&(connNoErr)) { recv_and_resp_netconn(newconn); } //if(err != ERR_OK) //continue; netconn_close(newconn); netconn_delete(newconn); } } else { debug("Can not bind netconn"); } } else { debug("Can not create netconn"); } } static void recv_and_resp_netconn(struct netconn *conn) { struct netbuf *inbuf; err_t res; char *buf; u16_t buflen; uint8_t type; uint8_t buff_img[165000]; res = netconn_recv(conn, &inbuf); if(res == ERR_OK) { netbuf_data(inbuf, (void**)&buf, &buflen); if(buflen >= sizeof(packet_tx_t)) { uint8_t buffer[buflen]; memcpy(&buffer, buf, buflen); search_object_t *packet = (search_object_t *)&buffer[1]; if(packet->header.cmd != PB_PVS_CMD_LED) { pb_menu_process(buff_img, IMAGE_SIZE, buffer, buflen, packet->header.cmd); } packet_rx_t *packet_rx = (packet_rx_t *)&buff_img[1]; if(packet->header.cmd) { if(packet->header.cmd == CMD_GET_SCAN) { size_t size_rx; if(packet_rx->status) { size_rx = 20; } else { size_rx = IMAGE_SIZE + 14; }; static uint32_t lt1, lt2, ltd, lt, ltpr; //taskENTER_CRITICAL(); lt1 = xTaskGetTickCount(); netconn_write(conn, buff_img, size_rx, NETCONN_NOCOPY); lt2 = xTaskGetTickCount(); ltd = lt2-lt1; //taskEXIT_CRITICAL(); debug("qwerty\t%u", ltd); } else { netconn_write(conn, buff_img, 80, NETCONN_NOCOPY); } } memset(buff_img, 0, 20); } } else { debug("Error receiver : %d", res); connNoErr = false; } netbuf_delete(inbuf); } И еще, раз возникает retransmission, то есть мой девайс не может дождаться ответа от хоста, может можно как-то увеличить это время? Изменено 4 декабря, 2017 пользователем IgorKossak [codebox] для длинного кода. [code]-для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 4 декабря, 2017 Опубликовано 4 декабря, 2017 · Жалоба И еще, раз возникает retransmission, то есть мой девайс не может дождаться ответа от хоста, может можно как-то увеличить это время? Просто теряется пакет. Либо при приёме, либо при передаче. Это баг. В нормально работающей системе ничто не теряется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 4 декабря, 2017 Опубликовано 4 декабря, 2017 · Жалоба Увеличил буффер TCP_SND_BUF И получил следующее "1213","5.672845","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=712117 Ack=1693 Win=1498 Len=1460" "1214","5.672951","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=713577 Ack=1693 Win=1498 Len=1460" "1215","5.673065","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=715037 Ack=1693 Win=1498 Len=1460" "1216","5.673137","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=710657 Win=65535 Len=0" "1217","5.673416","172.29.21.156","172.29.21.190","TCP","1514","[TCP Previous segment not captured] 20020 > 56571 [ACK] Seq=717957 Ack=1693 Win=1498 Len=1460" "1218","5.673745","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=713577 Win=65535 Len=0" "1219","5.673750","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=716497 Win=65535 Len=0" "1220","5.674088","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=719417 Ack=1693 Win=1498 Len=1460" "1221","5.674191","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=720877 Ack=1693 Win=1498 Len=1460" "1222","5.674314","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=722337 Ack=1693 Win=1498 Len=1460" "1223","5.674366","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1219#1] 56571 > 20020 [ACK] Seq=1693 Ack=716497 Win=65535 Len=0" "1224","5.675012","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1219#2] 56571 > 20020 [ACK] Seq=1693 Ack=716497 Win=65535 Len=0" "1225","5.675019","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1219#3] 56571 > 20020 [ACK] Seq=1693 Ack=716497 Win=65535 Len=0" "1226","5.675024","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1219#4] 56571 > 20020 [ACK] Seq=1693 Ack=716497 Win=65535 Len=0" "1227","5.675320","172.29.21.156","172.29.21.190","TCP","1514","[TCP Fast Retransmission] 20020 > 56571 [ACK] Seq=716497 Ack=1693 Win=1498 Len=1460" "1228","5.676263","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=723797 Win=65535 Len=0" "1229","5.676315","172.29.21.156","172.29.21.190","TCP","1514","[TCP Previous segment not captured] 20020 > 56571 [ACK] Seq=725257 Ack=1693 Win=1498 Len=1460" "1230","5.676904","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1228#1] 56571 > 20020 [ACK] Seq=1693 Ack=723797 Win=65535 Len=0" "1231","5.677312","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=726717 Ack=1693 Win=1498 Len=1460" "1232","5.678181","172.29.21.190","172.29.21.156","TCP","60","[TCP Dup ACK 1228#2] 56571 > 20020 [ACK] Seq=1693 Ack=723797 Win=65535 Len=0" "1244","7.145808","172.29.21.156","172.29.21.190","TCP","1514","[TCP Retransmission] 20020 > 56571 [ACK] Seq=723797 Ack=1693 Win=1498 Len=1460" "1245","7.146624","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=728177 Win=65535 Len=0" "1246","7.146985","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=728177 Ack=1693 Win=1498 Len=1460" "1247","7.147109","172.29.21.156","172.29.21.190","TCP","1514","20020 > 56571 [ACK] Seq=729637 Ack=1693 Win=1498 Len=1460" "1248","7.147869","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=729637 Win=65535 Len=0" "1249","7.147884","172.29.21.190","172.29.21.156","TCP","60","56571 > 20020 [ACK] Seq=1693 Ack=731097 Win=65535 Len=0" Я правильно понимаю, что проблемы не у меня? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grape 0 4 декабря, 2017 Опубликовано 4 декабря, 2017 · Жалоба а какая версия lwip? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 4 декабря, 2017 Опубликовано 4 декабря, 2017 (изменено) · Жалоба а какая версия lwip? 2.0.0 Изменено 4 декабря, 2017 пользователем Kot_Schrodingera Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grape 0 5 декабря, 2017 Опубликовано 5 декабря, 2017 · Жалоба 2.0.0 я бы попробовал 2.0.3 и включил бы статистику. У меня были похожие затыки, в результате нашлась ошибочка в lwip. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kot_Schrodingera 0 11 декабря, 2017 Опубликовано 11 декабря, 2017 · Жалоба я бы попробовал 2.0.3 и включил бы статистику. Сейчас займусь этим, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thrash0r 0 6 июля, 2022 Опубликовано 6 июля, 2022 · Жалоба В 01.12.2017 в 10:30, BioWolf2000 сказал: В такой связке тоже были проблемы. Долго изучал пакеты 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; } Мне помогло. Запускал LWIP+LTDC. По-отдельности все работает отлично, вместе - терялись UDP-пакеты. После добавления __DSB() работает идеально! Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться