• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 собирает нормально.
 
Сверху Снизу