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

vad7

Active member
@pvvx, web_fini() только заполняет переменные, справа может быть только константа.
Это я разгубастился, думал щас, чтобы не писать обработку ini файла с парсингом переменных и не множить почти похожий код, использую web_fs_init.c....
Ну да ладно, доработаем, не впервой. :)
 

ls_serg

New member
Подкажите пожалуйста что не так и как исправить. При сборе прошивки "esp8266web-master" выдает ошибку:

upload_2016-3-23_3-0-46.png
При сборке "Hallo world" все ок, и проишивка проходит без проблем.
 

aloika

Active member

pvvx

Активный участник сообщества
Подкажите пожалуйста что не так и как исправить. При сборе прошивки "esp8266web-master" выдает ошибку:

Посмотреть вложение 1590
При сборке "Hallo world" все ок, и проишивка проходит без проблем.
Импортируйте проект, а не копируйте. В теме UDK описано и дано видео как это сделать.
 

ls_serg

New member
Импортируйте проект, а не копируйте. В теме UDK описано и дано видео как это сделать.
Именно так и делал. Перепробывал все что мог, И напрямую загружал файл с интернета в папку C:\Espressif\examples, и загружал файл esp8266web-0.6.0.tar.gz через File -> Import -> General -> Existing Project into Workspace в строке select arhive file выбирал C:\Espressif\examples\esp8266web-0.6.0.tar.gz и все тоже самое.
Может это чтото значит :
upload_2016-3-24_1-44-14.png
PATH (${MINGW_HOME}\bin;${MSYS_HOME}\bin;C:\Espressif\xtensa-lx106-elf\bin;C:\Python27) выделен желтым.
Поскольку в этом деле могу гордо назвать сябя "чайником" может это чтото значит:
upload_2016-3-24_1-47-10.png
Не пинайте но честно не знаю что с этим делать.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Исправил падение на некоторых функциях WEBFS (WEBFSSeek, WEBFSGetStartAddr)
Лежат здесь:
PowerMeter/webfs.c at master · vad7/PowerMeter · GitHub
PowerMeter/webfs.h at master · vad7/PowerMeter · GitHub
А где были "падения"?
Вы убрали проверку в REWIND перехода по смещению на адрес ниже начала текущего файла. В этом "падение"?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Не пинайте но честно не знаю что с этим делать.
Скачиваете с git https://github.com/pvvx/esp8266web/archive/master.zip
Получаете файл esp8266web-master.zip. Разворачиваете его куда нибудь типа X:\X\esp8266web-master.
Открываете Eclipse. В меню File -> Import...-> General -> Existing Projects into Workspace -> Next -> Select room directory вписываете папку развернутого проекта (X:\X\esp8266web-master), ставите галку "Copy projects into workspace" и жмете "Finish".
Выбираете цель All в окне "Make Target" и проект транслируется.
 

ddv

New member
2pvvx
я вижу вы опять начали коммитить сюда esp8266web/webfs at master · pvvx/esp8266web · GitHub
но там пока только апплоадер. как автоматизировать апплод более менее понятно.

а вот по какому алгоритму собирается образ диска (WEBFS22.exe)? прямое гугление ничего не дало.. Это какой-то свой велосипед?
Наверняка просто в один поток склеиваются файлы через разделитель, ну и какие-то сжимаются...
Не заниматься же реверс-инижинирингом :)

ЗЫЖ если получиться - запушу к вам на гит.
 

pvvx

Активный участник сообщества
2pvvx
я вижу вы опять начали коммитить сюда esp8266web/webfs at master · pvvx/esp8266web · GitHub
но там пока только апплоадер. как автоматизировать апплод более менее понятно.

а вот по какому алгоритму собирается образ диска (WEBFS22.exe)? прямое гугление ничего не дало.. Это какой-то свой велосипед?
Наверняка просто в один поток склеиваются файлы через разделитель, ну и какие-то сжимаются...
Не заниматься же реверс-инижинирингом :)

ЗЫЖ если получиться - запушу к вам на гит.
Исходники программы изначально вложены в проект - esp8266web/WEBFS22.zip at master · pvvx/esp8266web · GitHub
Есть намерение сделать ещё изменения в структуре каталога и описателей файлов... Но пока не успел.
Прототипом является MPFS - была попытка их совмещения - использовал совместно с PIC24... Описание формата так-же дано esp8266web/webfs.c at master · pvvx/esp8266web · GitHub
Хотелось бы сделать сборщик на питоне - если есть желание помочь с этим - напишите в личку.
 
Последнее редактирование:

vad7

Active member
@pvvx, случайно не знаете, dns должна всегда запрос слать, не смотря на наличие в кэше валидного предыдущего запроса или это библиотека не дописана?

Китайцы выложили новую версию Open source LWIP 1.5.2:
Open source LWIP for ESP8266_NONOS_SDK_V1.5.2 - ESP8266 Developer Zone
 
Последнее редактирование:

pvvx

Активный участник сообщества
@pvvx, случайно не знаете, dns должна всегда запрос слать, не смотря на наличие в кэше валидного предыдущего запроса или это библиотека не дописана?
DNS_TABLE_SIZE = 4 (кэш четыре записи).
Китайцы выложили новую версию Open source LWIP 1.5.2:
Open source LWIP for ESP8266_NONOS_SDK_V1.5.2 - ESP8266 Developer Zone
Изменения от SDK 1.4.0:
1) в использовании phy_get_rand() для назначения порта в tcp.c
2) перемещении pcb->nrtx = 0; в tcp_process() tcp_in.c
3) путаница с if/else в udp_input() udp.c
Остальное - возня с espconn.
 
  • Like
Реакции: vad7

vad7

Active member
DNS_TABLE_SIZE = 4 (кэш четыре записи).
Ну да, только оно его не использует, каждый раз по новой запрос идет. Вот думал может так и надо.
Дописал проверку.

Я вот думаю, стоит ли беспокоиться о переполнении буфера в web_int_callback?
tcp_puts() не проверяет переполнение, она конечно в web_int_callback() понемногу вставляет, но все же.
 

pvvx

Активный участник сообщества
Ну да, только оно его не использует, каждый раз по новой запрос идет. Вот думал может так и надо.
Дописал проверку.

Я вот думаю, стоит ли беспокоиться о переполнении буфера в web_int_callback?
tcp_puts() не проверяет переполнение, она конечно в web_int_callback() понемногу вставляет, но все же.
А стоит ли беспокоиться о перегрузке по производительности? Это примерно то-же самое и выбирается середина.
У вас были или наблюдаются переполнения буфера ответа по TCP? В местах, где это возможно, стоят проверки. И вывод больших сообщений осуществляется поблочно по другому, уже встроенному алгоритму... main_loop() не работает :)
 
Последнее редактирование:

vad7

Active member
У вас были или наблюдаются переполнения буфера ответа по TCP?
Да это относительно легко достичь - вывод html страницы больше размера буфера (сколько он там, 2-3 кило?) и где-то на этой границе вывод переменных. Причем у вас это может вообще не проявиться, если переменные на этой границе не используются, а у кого-то через раз глючить будет.
 

pvvx

Активный участник сообщества
Да это относительно легко достичь - вывод html страницы больше размера буфера (сколько он там, 2-3 кило?) и где-то на этой границе вывод переменных. Причем у вас это может вообще не проявиться, если переменные на этой границе не используются, а у кого-то через раз глючить будет.
Вы что-то путаете из-за подхода main_loop() - в сотый раз - такого здесь не применяется - никто не льет в буфер сразу весь файл или весь выходной поток, если он более 128 бaйт. Минимальный буфер всего 128 байт (проверяется при передаче запроса на разбор переменной) и всё справляется. :) Вывод может идти хоть итерациями по 1 байту (минимальная единица информации в данном деле). Для организации блочного вывода там существуют calback-и... Когда буфер наберется под оптимум передачи пакета TCP он и отправляется. Так-же на вход обработки по началу выделяется не 128 байт, а гораздо больше и этот размер доступен для процедуры обработки чтобы заполнить весь буфер за раз, но в процессе циклического исполнения поблочного вывода наличие свободных 128 байт в буфере передачи указывает всего на возможность повтора заданной итерации вывода, до прерывания этого цикла освобождением буфера с помощью передачи по TCP с подтверждением возможности отсылки следующей порции информации и опять циклического исполнения calback вывода в буфер............ И так пока calback не снимется, указав что отработал вывод своих 100500 байт.
 
Последнее редактирование:

vad7

Active member
@pvvx, а, вот нашел:
while((web_conn->msgbufsize - web_conn->msgbuflen >= SCB_SEND_SIZE)
Значит нужно убедиться, чтобы web_int_callback() не писал больше SCB_SEND_SIZE.
Это уже проще.
Ну вот разобрались, и дело не в маин лупе, а в хреновом описании, точнее в его отсутствии :)
Добавлю ремарку к функции....
 

pvvx

Активный участник сообщества
@pvvx, а, вот нашел:
while((web_conn->msgbufsize - web_conn->msgbuflen >= SCB_SEND_SIZE)
Значит нужно убедиться, чтобы web_int_callback() не писал больше SCB_SEND_SIZE.
Это уже проще.
Ну вот разобрались, и дело не в маин лупе, а в хреновом описании, точнее в его отсутствии :)
Добавлю ремарку к функции....
А это что? while((web_conn->msgbufsize - web_conn->msgbuflen >= SCB_SEND_SIZE) - это и есть самая подробная документация. :)
Просто надо научиться читать. А опечатки там наверняка есть. Но пока не проявлялись.
Нужен редактор, а его нет. :)
 
Сверху Снизу