• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого webсервера на esp8266.

1801BM1

New member
Сегодня проверил работу тайм-аута приемника UART:
- тайм-аут измеряется в 8-кратном битовом интервале, то есть единичка значения в поле лимита соответствует 8 битовым интервалам, кетайская дока об этом говорит, но мутно
- тайм-аут рестартует в момент обнаружения приемником стартового бита на входе
- прерывание тайм-аута генерируется только если в приемном FIFO что-то есть, если пусто - прерывания нет
В-общем, пользоваться можно

Еще вылезла странность - не мог настроить скорость UARTO в user_init(), то есть - регистр CLKDIV ставится верно, значение в нем верное, FIFO сброшены (делал и руками и вызывал функцию установки uart_div_modify(), а все равно - передавал на скорости 76килобит, помогла только пауза в 1000мкс после настройки. Такле ощущение что скорость менятеся только после некоторого интервала по пустом передающем FIFO.
 

pvvx

Активный участник сообщества
Еще вылезла странность - не мог настроить скорость UARTO в user_init(), то есть - регистр CLKDIV ставится верно, значение в нем верное, FIFO сброшены (делал и руками и вызывал функцию установки uart_div_modify(), а все равно - передавал на скорости 76килобит, помогла только пауза в 1000мкс после настройки. Такле ощущение что скорость менятеся только после некоторого интервала по пустом передающем FIFO.
Примерно так, но при пустом FIFO требуется задержка около 170 us (выведено экспериментально).
Пример: https://github.com/pvvx/SDKnoWiFi/blob/master/app/user/user_main.c#L68
 

pvvx

Активный участник сообщества
@Артём_Игоревич - всё решилось, и как всегда забыли главное. Размер MTU у GSM меньше, чем ставим. При установке в lwipopts.h:
[HASHTAG]#define[/HASHTAG] TCP_MSS 1420
а стояло 1460 и не лезет в GSM :)
c 1420 всё заработало (скрин с телефона):
Screenshot_2015-07-10-08-41-43.gif
https://ru.wikipedia.org/wiki/Maximum_transmission_unit
PS: возможно надо сделать опцию установки MTU (MSS).
 
Последнее редактирование:

Ivan

New member
in web_int_callbacks.c
Код:
else if(!os_memcmp((void*)cstr, "debug", 3)) tcp_puts("%u", system_get_os_print()&1); // system_set_os_print
.........
else if(!os_memcmp((void*)cstr, "csta", 5)) tcp_puts("%d", wifi_station_get_connect_status());
?
Код:
else if(!os_memcmp((void*)cstr, "debug", 5)) tcp_puts("%u", system_get_os_print()&1); // system_set_os_print
.........
else if(!os_memcmp((void*)cstr, "csta", 4)) tcp_puts("%d", wifi_station_get_connect_status());
 
Последнее редактирование:

Ivan

New member
in web_int_vars.c
Код:
else if(!os_memcmp((void*)cstr, "dncp", 5)) wificonfig.b.ap_dhcp_enable = val;
................
if(!os_memcmp((void*)cstr, "dncp", 5)) wificonfig.b.st_dhcp_enable = val;
................
else if(!os_memcmp((void*)cstr,"close", 4)) {
?
Код:
else if(!os_memcmp((void*)cstr, "dncp", 4)) wificonfig.b.ap_dhcp_enable = val;
................
if(!os_memcmp((void*)cstr, "dncp", 4)) wificonfig.b.st_dhcp_enable = val;
................
else if(!os_memcmp((void*)cstr,"close", 5)) {
 
Последнее редактирование:
  • Like
Реакции: pvvx
@Артём_Игоревич - всё решилось, и как всегда забыли главное. Размер MTU у GSM меньше, чем ставим. При установке в lwipopts.h:
[HASHTAG]#define[/HASHTAG] TCP_MSS 1420
а стояло 1460 и не лезет в GSM :)
c 1420 всё заработало (скрин с телефона):
Посмотреть вложение 680
https://ru.wikipedia.org/wiki/Maximum_transmission_unit
PS: возможно надо сделать опцию установки MTU (MSS).
Весьма признателен за помощь.:)
 
Но остается вопрос, как на ходу поменять размер MTU (и MSS) в LwIP... Счас оно завязано на уровне до трансляции кода.
То есть менять без гашения сервера? Возможно дожидаться опустошения буфера, а после этого сразу изменять значение, правда тогда этот буфер придётся реализовывать динамически.
 

pvvx

Активный участник сообщества
То есть менять без гашения сервера? Возможно дожидаться опустошения буфера, а после этого сразу изменять значение, правда тогда этот буфер придётся реализовывать динамически.
Там не только сервер, а все коммуникации любых пакетов, если их длина превышает MTU сети. В текущем месте с текущим провайдером пролазят c mss = 1420 (+40 обычно = MTU). Точно не устанавливал. Ставил 1440, транслировал - не работало. В инете масса воплей по данному поводу. Тысячи страниц :) Внятной инфы там и не найти - всё забито "как изменить MTU" и прочей шнягой :)
 
Там не только сервер, а все коммуникации любых пакетов, если их длина превышает MTU сети. В текущем месте с текущим провайдером пролазят c mss = 1420 (+40 обычно = MTU). Точно не устанавливал. Ставил 1440, транслировал - не работало. В инете масса воплей по данному поводу. Тысячи страниц :) Внятной инфы там и не найти - всё забито "как изменить MTU" и прочей шнягой :)
Значит придётся вникать конкретно...
 

pvvx

Активный участник сообщества
Значит придётся вникать конкретно...
Во что вникать? Автонастройка MTU не проходит. GSM всегда через NAT и большинство запросов просто отшибает. Исправлять MTU на каждом телефоне/планшете тоже никто не будет, если даже это связано с ними или хоть с местной настройкой роутеров.
А в чем у вас проблема (?) - если делаете систему для связи через такие каналы, то странслируйте код с размером MSS в 1400 и всё будет работать. 60 байт на скорость сильно не влияют:
https://ru.wikipedia.org/wiki/Maximum_transmission_unit#/media/File:Зависимость_скорости_от_размера_пакета.png
Уменьшать можно до 536 байт.
 
Последнее редактирование:
Во что вникать? Автонастройка MTU не проходит. GSM всегда через NAT и большинство запросов просто отшибает. Исправлять MTU на каждом телефоне/планшете тоже никто не будет, если даже это связано с ними или хоть с местной настройкой роутеров.
А в чем у вас проблема (?) - если делаете систему для связи через такие каналы, то странслируйте код с размером MSS в 1400 и всё будет работать. 60 байт на скорость сильно не влияют:
https://ru.wikipedia.org/wiki/Maximum_transmission_unit#/media/File:Зависимость_скорости_от_размера_пакета.png
Уменьшать можно до 536 байт.
Ну главное совместимость, а скорость действительно не так важна:)
 
Во что вникать? Автонастройка MTU не проходит. GSM всегда через NAT и большинство запросов просто отшибает. Исправлять MTU на каждом телефоне/планшете тоже никто не будет, если даже это связано с ними или хоть с местной настройкой роутеров.
А в чем у вас проблема (?) - если делаете систему для связи через такие каналы, то странслируйте код с размером MSS в 1400 и всё будет работать. 60 байт на скорость сильно не влияют:
https://ru.wikipedia.org/wiki/Maximum_transmission_unit#/media/File:Зависимость_скорости_от_размера_пакета.png
Уменьшать можно до 536 байт.
В общем поставил на 536 байт, вроде работает норм, правда периодически выпадает ошибка -8 по debug log.
 

pvvx

Активный участник сообщества
В общем поставил на 536 байт, вроде работает норм, правда периодически выпадает ошибка -8 по debug log.
-8 "Connection aborted" - это нормально для эксплорреров, т.к. они при переходе на другую страницу или когда запущено постоянное чтение данных закрывают оставшиеся соединения привязанные к прошлой странице посылкой abort и подобное.
 
-8 "Connection aborted" - это нормально для эксплорреров, т.к. они при переходе на другую страницу или когда запущено постоянное чтение данных закрывают оставшиеся соединения привязанные к прошлой странице посылкой abort и подобное.
Ясно, -9 тоже порой бывает.
 

alexsmd

New member
Всем привет, у меня при установке проблема
Код:
10:46:40 **** Build of configuration Default for project Web_Base ****
mingw32-make.exe -f C:/Espressif/examples/esp8266web/Makefile all
mingw32-make[1]: Entering directory 'C:/Espressif/examples/esp8266web/app'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/main'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/main'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/phy'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/phy'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/wpa'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/wpa'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/user'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/user'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/driver'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/driver'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/web'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/web'
mingw32-make[2]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip'
mingw32-make[3]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip/api'
mingw32-make[3]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip/api'
mingw32-make[3]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip/app'
mingw32-make[3]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip/app'
mingw32-make[3]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip/core'
mingw32-make[4]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip/core/ipv4'
mingw32-make[4]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip/core/ipv4'
mingw32-make[3]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip/core'
mingw32-make[3]: Entering directory 'C:/Espressif/examples/esp8266web/app/lwip/netif'
mingw32-make[3]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip/netif'
mingw32-make[2]: Leaving directory 'C:/Espressif/examples/esp8266web/app/lwip'
------------------------------------------------------------------------------
FW ../bin/0x00000.bin + ../bin/0x40000.bin
Traceback (most recent call last):
  File "c:/Espressif/utils/esptool.py", line 22, in <module>
    import serial
ImportError: No module named serial
mingw32-make[1]: *** [.output/eagle/bin/eagle.app.v6.bin] Error 1
../Makefile:127: recipe for target '.output/eagle/bin/eagle.app.v6.bin' failed
mingw32-make[1]: Leaving directory 'C:/Espressif/examples/esp8266web/app'
C:/Espressif/examples/esp8266web/Makefile:171: recipe for target '.subdirs' failed
mingw32-make.exe: *** [.subdirs] Error 2

10:46:43 Build Finished (took 2s.795ms)

Куда копать?
 

alexsmd

New member
Можете подсказать как конкретно? Переустановил UDK та же ошибка. Hello world собирает нормально.
 
Сверху Снизу