• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Virtual

New member
а не пробовали "дифнуть" с lwip-2* там в этом месте очень сильно переработано.
 

relink

New member
2006 год... круто...
Это не ошибка программиста, стек универсален и действительно хорош. Это связано с архитектурой процессора при обращении к памяти, и на других процессорах корректировка программы может и не потребоваться. Это надо учитывать при разработке программ, как пишет автор обнаруживший это под нынешние (ARM, MIPS & like cores), чтобы не было неожиданности. Как например, придя обнаружить ворота гаража открытыми, потому что esp на миг сошел с ума, к чему мы все тут так или иначе стремимся, чтобы все было по уму.
 
Последнее редактирование:

Urbas81

Member
Такой вопрос: хочу в проект добавить блок переменных для сохранения, в файле flash_eep.h есть строки:
#define ID_CFG_WIFI 0x6977 // id для сохранения установок WiFi (wificonfig)
#define ID_CFG_UART1 0x3175 // id для сохранения установок UART1
#define ID_CFG_UART0 0x3075 // id для сохранения установок UART0
#define ID_CFG_SYS 0x7373 // id для сохранения ситемной конфигурации (syscfg)
#define ID_CFG_UURL 0x5552 // id для сохранения строки tcp_client_url
#define ID_CFG_KVDD 0x564B // id для сохранения калибровочных констант (делитель для VDD)
что обозначают числа после определений, и как мне вставить свой блок данных и какое число присвоить, чтоб не нарушить нормальную работу, проект esp8266web-0.6.2, желательно объяснить как для "чайника":)
 

vad7

Active member
Похоже подстройка частоты [112] в каком-то виде нужна.
При -30 модуль отвалился с концами.
 

pvvx

Активный участник сообщества
что обозначают числа после определений, и как мне вставить свой блок данных и какое число присвоить, чтоб не нарушить нормальную работу, проект esp8266web-0.6.2, желательно объяснить как для "чайника":)
Используйте любое число, не совпадающее с имеющимися. Это ID номер, по которому ищется блок в записях.
Это не ошибка программиста, стек универсален и действительно хорош. Это связано с архитектурой процессора при обращении к памяти, и на других процессорах корректировка программы может и не потребоваться. Это надо учитывать при разработке программ, как пишет автор обнаруживший это под нынешние (ARM, MIPS & like cores), чтобы не было неожиданности.
Операнд там байтовый и с данным процессором там не должно быть проблем - тип памяти, где находится блок позволяет байтовое обращение, что для ARM, что для L106...
Похоже подстройка частоты [112] в каком-то виде нужна.
При -30 модуль отвалился с концами.
При включенной подстройке модуль отваливается и при +25. Достаточно рядом включиться другому устройству c WiFi...
Нет исходников для возможности исправить ситуацию - все вопросы к Espressif.
 
Последнее редактирование:

Urbas81

Member
В принципе данный ID и размер блока является полным идентификатором сохраненного объекта...
Не знаю с чем связано, чекбокс по сбросу параметров по пину убираю при настройке, но уже второй раз с утра слетают настройки, точнее не понятно или настройки или программа, приходится перепрошивать и настраивать пароли и все настройки wi-fi, есть ли возможность выгрузить из esp блок с уже настроенными параметрами и потом загрузить отдельно?
 

pvvx

Активный участник сообщества
Не знаю, правильно-ли я понимаю из исправления эту ситуацию. Обращение производится к 16 битным данным. И если первый пакет был нечетным, то возникает отказ выравнивания (исключение доступа к памяти). В моем случае возвращался вдвое меньший буфер.
Если "(исключение доступа к памяти)" то это перезагрука модуля.
Бегло прочитав про данную правку - вроде это связанно с расчетом контрольной суммы или ещё чего-то. Т.е. исправляется не в данном месте.
 

Urbas81

Member
@Urbas81, сохранение/восстановление настроек у меня тут сделано: WirelessCO2_esp8266/web_srv.c at master · vad7/WirelessCO2_esp8266 · GitHub

Добавляется в htm такое: WirelessCO2_esp8266/setmeter.htm at master · vad7/WirelessCO2_esp8266 · GitHub
Все добавил, но что-то у меня не сохраняет, и загрузка успешная, а на деле ничего не меняется. При сохранении настроек создался файл 4 Mb, правда перед этим я его добавил, переименовав один из существующих bin файлов, так и должно быть, или я где-то накосячил?
 

vad7

Active member
Последнее редактирование:

relink

New member
Если "(исключение доступа к памяти)" то это перезагрука модуля. Бегло прочитав про данную правку - вроде это связанно с расчетом контрольной суммы или ещё чего-то.
Ошибка не фатальная, и проявляется только возвратом неверного значения snd_buf. Меня тоже эта конструкция обескуражила pcb->snd_buf += ((pcb->acked+1) & ~0x1), зачем приводить к четности, словно выравнивая по 16 битному слову, ведь это даже не указатель. Проверял и на других проектах с LwIP в UDK. Проблема неочевидна, и при определенных размерах пакета может и не обнаружиться, но время от времени snd_buf урезался ровно на один разряд без очевидных на то причин. С исправлением все работает как часы, без отладчика трудно понять почему так происходит. Ведь глядя на исправление, все вообще должно было порушиться, но это не так!
Кто нибудь с отладчиком может прояснить почему так происходит.
 

Urbas81

Member
@Urbas81, лучше полностью upload_boundary() перенести, в ней еще изменения есть.
Также файл settings.bin нужен и еще в web_int_callbacks.c :
WirelessCO2_esp8266/web_int_callbacks.c at master · vad7/WirelessCO2_esp8266 · GitHub

Еще во flash_epp.c функция current_cfg_length().
А вообще, там много доработок...
Ясно спасибо, надо скачать наверное весь проект.
 

pvvx

Активный участник сообщества
Ошибка не фатальная, и проявляется только возвратом неверного значения snd_buf. Меня тоже эта конструкция обескуражила pcb->snd_buf += ((pcb->acked+1) & ~0x1), зачем приводить к четности, словно выравнивая по 16 битному слову, ведь это даже не указатель. Проверял и на других проектах с LwIP в UDK. Проблема неочевидна, и при определенных размерах пакета может и не обнаружиться, но время от времени snd_buf урезался ровно на один разряд без очевидных на то причин. С исправлением все работает как часы, без отладчика трудно понять почему так происходит. Ведь глядя на исправление, все вообще должно было порушиться, но это не так!
Кто нибудь с отладчиком может прояснить почему так происходит.
Надо глядеть как работает распределитель памяти pbuf.c, memp.c, .. и связанное с ними. Может там стоит коррекция на aligned (т.е. там её толпа). Распределение памяти в LwIP имеет много опций...
История с вашим приращением ещё старее:
RE: [lwip-users] Bug in snd_buf calculation
lwip-users-tcp-ip - RE: [lwip-users] Bug in snd_buf calculation - msg#00009 - Programming Mailing Lists
lwIP - A Lightweight TCP/IP stack - Bugs: bug #2679, Data packet split on odd... [Savannah]
Но у нас этих проблем нет, что в ESP8266, что в ARM RTL871x. У них у всех байтный доступ к областям памяти, где находятся буфера данных.

"Ошибка не фатальная, и проявляется только возвратом неверного значения snd_buf." - это может быть из-за нарушения атомартности. Не стоит лезть в дела LwIP из любого прерывания :) Для этого есть семафоры-светофоры и RTOS. ;)
 
Последнее редактирование:

Urbas81

Member
@Urbas81, лучше полностью upload_boundary() перенести, в ней еще изменения есть.
Также файл settings.bin нужен и еще в web_int_callbacks.c :
WirelessCO2_esp8266/web_int_callbacks.c at master · vad7/WirelessCO2_esp8266 · GitHub

Еще во flash_epp.c функция current_cfg_length().
А вообще, там много доработок...
Добавил все недостающие функции, проект компилируется, в железо еще не грузил.

Ушла ошибка ovls, менял labels.ld, сначала были ошибки, теперь вернул свой все компилируется, спасибо за помощь. Теперь вопрос: в связи с изменением и добавлением вашего кода в части сохранения настроек, другой функционал не пострадает?
Как формируется labels.ld, были ошибки указывающие на него, удалил, смотрю он не создался заново, скопировал с резервной копии, заработало.
 
Последнее редактирование:

vad7

Active member
@pvvx, есть ли возможность определить нажали ли reset или это первая подача питания?
Там в памяти что-нить осталось или какие внутренние регистры по другому инициализированы?
 

pvvx

Активный участник сообщества
@pvvx, есть ли возможность определить нажали ли reset или это первая подача питания?
Там в памяти что-нить осталось или какие внутренние регистры по другому инициализированы?
Ну есть же всё и даже на странице web-сервера dsleep.htm показывает...
 

vad7

Active member
@pvvx, да в том то и дело, что строчка вставленная в app_main.c:
os_printf("Reset reason: %u, %u\n", system_get_rst_info()->reason, rtc_get_reset_reason());
выдает "Reset reason: 6, 2", как в случае включения, так и после нажатия на reset.
Модуль - NodeMCU v3 LoLin.
 
Сверху Снизу