Evgeniy
Andy кстати, где-то на уровне TCP часть данных теряется - на стороне TCP клиента в случайные моменты времени приходит меньше байт, чем должно придти, и это значение случайное: receive timeout 64644
receive timeout 70853
receive timeout 56064
receive timeout 65837
receive timeout 72437
receive timeout 63062
receive timeout 71116
receive timeout 64648
receive timeout 63855
Evgeniy
При этом должно приходить всегда 72704 байт, а передача и прием через сокет исключительно по 1024 байта. Выходит - эти чипы не надежные и нельзя применять?
Andrey
tcp - это поток - там нет понятия пакета
Evgeniy
Так я и работаю как с потоком - считываю по 1024 байта, пока не наберу 72704
Evgeniy
tcp - это поток - там нет понятия пакета
while total < length:
chunk = client.recv(1024)
if chunk == None or len(chunk) == 0:
break
byteBuffer = byteBuffer + chunk
total = total + len(chunk)
received_total = total
Evgeniy
Только клиент на питоне, но разницы же нет - так везде делают
Andrey
len(chunk) == 0 скорее всего лишнее
Evgeniy
ок, уберу
Andrey
хотя я не пишу на питоне - не знаю что там recv возвращает
Evgeniy
это python
Andrey
обычный системный вызов recv возвращает 0 когда сокет закрыт с той стороны
Andy
Evgeniy
Хм, но здесь нет узкого места - там запрос это 10 байт
Evgeniy
А вот ответ (прием по UART) - это 72704 байта
Andy
Evgeniy
ага, ок, тогда получается эта задачка может быть нерешаемой, если используется ОГРОМНЫЙ приемный буфер по uart
Evgeniy
т.к. RAM нехватит
Evgeniy
тогда я не смогу тест запустить вообще, если закомменотирую))
Evgeniy
Там запрос по TCP -> UART, далее другое устройство (эмулятор) отвечает в UART -> TCP
Evgeniy
Evgeniy
Andy
Dmitriy
Evgeniy
это плохо, т.к. его еще найти надо и разобраться...
Evgeniy
кстати уже 500/500 передач по 73 кб, с uart rx buffer 8192 и полет нормальный
ok-home
и если честно - сразу в глаза бросилось - static volatile int sock - пишет и читает из разных задач, судя по всему задачи могут на любом ядре esp выполняться - ((((
Evgeniy
они на одном ядре, по умолчанию
Dmitriy
Evgeniy
вот уже 1 сбой: 72696 байт принято вместо 72704, но может из-за uart, потому что буфер короткий...
Evgeniy
А при передаче через send(sock,..) по 1024 байт - это с подтверждением после каждого чанка по 1024 байт происходит? Т.е. отправили 1024 - получили подтверждение, дальше уже после отправили еще и т.п.?
C
друзья, всех приветствую.
перешел с ардуино иде на платформио+вскод, импортировал первый ардуино проект, при компиляции получаю ошибку
C
при импорте указал использоавать библиотеки из ардуины
C
этот файл, на который оно ругается существует и я могу его открыть
C
подскажите, что я делаю не так?
EAgold
можете подсказать, что это за маразм ?
как-бы, явно проверяем на нан, и если не нан то печатаем
каким ...... там оказывается нан после условия?
Алексей
Нужно компилятору указать, где искать файл. Можно через файлы сборки, можно через проект, он сам добавит.
EAgold
Алексей
EAgold
EAgold
EAgold
функция voltage может вернуть только либо флоат либо этот же нан
Алексей
Всё таки это макрос
Алексей
Нельзя никогда сравнивать с NAN
Алексей
есть методы для проверки isnan
EAgold
Алексей
if(isnan(voltadge)) как то так
EAgold
Evgeniy
Вот такую забавную вещь нашел - предлагают подрегулировать этот параметр. Попробовал пока 30 вместо 120, наблюдаю... Может кстати и не на уровне TCP теряются байтики, на UART тоже жалобы есть, от 460800 и выше.
ok-home
кстати, а почему uart_event не используешь ?
Evgeniy
Evgeniy
Вызывается callback, когда буфер заполнен?
ok-home
https://github.com/espressif/esp-idf/blob/master/examples/peripherals/uart/uart_events/main/uart_events_example_main.c
ok-home
ну примерно так, заодно и все ошибки uart можно определить
Evgeniy
ok-home
честный асинхронный прием в от одельном таске и дальше в очередь на отправку в сокет, и из очереди в tcpip, если конечно данные из уарта не нужно обрабатывать.
Алишер
Всем привет! Кто нибудь работал с датчиками влажности почвы на 1 wire?
Алишер
вообще есть ли такие
Anton
Anton
Evgeniy
Кстати, пока 3023/3023 отправки без сбоев, уменьших rx fifo threshold до 30 вместо 120 по умолчанию
Anton
для нонблокинг это вообще обязательная проверка. но и для блокинг при посылке проверять бы
AKE
Anton
Это разве не для nonblocking io? У меня вариант блокирующий
ну вот точно когда для блокирующегося сокета бывает еэгейн: It's possible that you have a nonzero receive timeout set on the socket (via setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,...)) as that would also cause recv to return EAGAIN
Anton
с посылками еэгейн бывает независимо от типа сокета, просто, например, все буфера тцп уже полные и твои данные пихнуть некуда
Anton
о, я немного вчитался в программу. один сокет из двух параллельных тасков, без блокировок и селектов. это повод ругать есп32 и его идф...
Dr Zlo
Не только для esp, у всех +- так
Dr Zlo
либо в 0% либо в 100% не убирается
Evgeniy
3676/3676 шт по 73 кб - пока без зависаний и потерь байтиков, чудеса!, uart rx fifo 73 kb, rx fifo threshold 30 вместо 120
Esteban
Парни, есть у кого установленный микропайтон на Есп32/8266? Попробуйте сделать
From urequests Import md5
Не получается нативную либу импортнуть. причем вместо md5 легко импортятся sha256 и sha1
Esteban
Так и не могу разобраться с авторизацией digest с шифрованием md5. Помогите плс? По моему понимаеию присутствует ошибка в либе
Алишер