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

Vit

New member
Для скорости придется стирать страницами по 64k.
Для read-only ФС один раз при заливке стерпеть можно. Я беспокоюсь о записи пользовательских данных и о вариантах с конкурентным доступом (например, логгер по событию начал лить тренд неизвестного размера в файл, ну а со стороны сети прилетают подарки). И любые варианты чтения-модификации-записи тоже требуют времени и памяти на хотя бы сектор. Опять же время для стека - расход памяти на набивающиеся данные.
 

pvvx

Активный участник сообщества
Для read-only ФС один раз при заливке стерпеть можно. Я беспокоюсь о записи пользовательских данных и о вариантах с конкурентным доступом (например, логгер по событию начал лить тренд неизвестного размера в файл, ну а со стороны сети прилетают подарки). И любые варианты чтения-модификации-записи тоже требуют времени и памяти на хотя бы сектор. Опять же время для стека - расход памяти на набивающиеся данные.
У логгеров проблем нет. У них всё фиксировано и делать дырки в flash они не должны. У flash мало итераций стирания до дырки... И логгерам не положено иметь файловую систему. Их сохраненные данные должны обрабатываются находу в файл специальными процедурами. Т.е. запись логгеров имеет специальную структуру, адаптированную только под них.
Если логгер серьезный - то для набора статистики и т.д. надо ставить внешнюю FRAM. Они не сверх дороги... тупикал минимал Endurance Over operating temperature 10E14 Cycles, скорость записи - сколько SPI даст.
 
Последнее редактирование:

Vit

New member
делать дырки в flash они не должны
Я не об износе. Меня беспокоят времена ожидания и расход ОЗУ.
Ещё посмотрел, что в spi_flash_write передаётся uint32 *, к которому по тексту не стесняясь приводят uint8 * и прочая, зато длина в байтах, да ещё никто снаружи эту длину на кратность 4-м не проверяет. Интересно, это Xtensa не боится всяких обращений по нечетным адресам или это вместе просто такой отважный стиль?
 

pvvx

Активный участник сообщества
Я не об износе. Меня беспокоят времена ожидания и расход ОЗУ.
Ещё посмотрел, что в spi_flash_write передаётся uint32 *, к которому по тексту не стесняясь приводят uint8 * и прочая, зато длина в байтах, да ещё никто снаружи эту длину на кратность 4-м не проверяет. Интересно, это Xtensa не боится всяких обращений по нечетным адресам или это вместе просто такой отважный стиль?
Переписано же и сказано - "протект" при кривых адресах у процедур работы с flash... или возвращают кривые данные - байты перепутаны местами. :)
Не смотрите на Espressif - у них всё горбатое. Проверяйте перед использованием.
Из-за кривого SDK пока не существует ни одного работающего приложения на ESP8266.
Я и занят в основном разбором глюков SDK, а не приложением. Пока все глюки неизвестны - не выбрать алгоритм реализации приложения. По этому одни тесты пока и текущий код не является тем, что должно быть - это задней ногой писано исключительно для проверки, что данный алго может работать. Как только что-то отрабатывается, то код полностью переписываю для этой части.
В итоге пока не собрать нормальный вариант. Но просвет уже близок :)
 
Последнее редактирование:

Vit

New member
Если логгер серьезный
Для серьёзного внешний интерфейс (в данном случае WiFi) - это лишь опция. А FRAM конечно хороша (использую эти FM25H20 по работе, и даже камни MSP430FR5969 с FRAM-памятью программ/данных), но всё-таки они дороговаты. По ESP - имею только типа 07 с фактически одним как-бы не занятым GPIO. ESP-12 пока даже не заказывал. Потому ориентируюсь на то, что есть.
Просто пытаюсь понять предполагаемую дисциплину использования ФС/FLASH в проекте, а не в тестах и/или при начальной заливке
 

Vit

New member
Не смотрите на Espressif - у них всё горбатое. Проверяйте перед использованием.
К сожалению не могу не смотреть. Если нужно использовать flash - посмотрел на spi_flash_wr_16m, зацепился за spi_flash_write, а дальше - ожидаемо - сорцов нет. Но я ж не знаю даже что где из каких либ выдрано, насколько глючно и вааще используется ли на выходе (мапа не вижу - может плохо искал). Кстати, что там насчет os_printf ? его выхлоп на GPIO2 смотреть?
eagle.rom.addr.v6.ld это гораздо лучше, чем ничего. только я даже не понимаю, насколько этим добром можно пользоваться. ээх ещё бы реальный хедер:)
 
Последнее редактирование:

Alex

Member
Что за "образ"? Файлы диска, на больших flash, закатываются за начальной областью занятой ПО и SDK - за первыми 512кб. За 1Mb и "кеширование" flash у установок SDK "кешам" прекращается...
Как экспериментировать с даташитом?
Разве "образ диска" и "диск" в нашем случае не одно и тоже?
Я про это имел ввиду - "Исправил. Вышли все 16 Мегабайт. Закинул на диск web-а PDFв 1.34Megдля тестов…" Понял уже что это возможно только в правленой Вами SDK где диск грузиться выше 512 kb. К тому что для того чтобы добавить или убрать файлы на сервере для "download" надо будет пользоваться утилитой для формирования диска.

Про это писал где- то на форуме ранее.... Рабочий пример "DNS" дан и вложен в исходники. (Только не DNS - DHCP уже есть в системе, а netbios - для доступа по имени.) WPAD и PAC файл вкладывается в сервер... "Бывает у провайдера интернета" - При наличии подключения к инету с другой дырки будет бардак.
Т.е. это не относится к библиотеке HTTP сервера - реализуется пользователем, путем управления сборкой и вложения необходимых файлов в диск сервера.
Не провайдер, не интернет отношения к вопросу не имеют. WPAD и PAC наверное не то. Задача чтобы случайный пользователь ESP_WiFi_AP ( при естественно открытой сети WiFi) при попытке просмотреть любой домен попал на страницу WiFi сервера. DHCP может выполнять функции DNS, но вроде не все браузеры это поддерживают.
 

webself

New member
кстати интересная идея. чтобы по любому имени хоста модуль отзывался. должна быть реализуемой
путем модификации днса встроенного
 

pvvx

Активный участник сообщества
Не провайдер, не интернет отношения к вопросу не имеют. WPAD и PAC наверное не то. Задача чтобы случайный пользователь ESP_WiFi_AP ( при естественно открытой сети WiFi) при попытке просмотреть любой домен попал на страницу WiFi сервера. DHCP может выполнять функции DNS, но вроде не все браузеры это поддерживают.
WPAD именно то. Если эксплорер не запрашивает имени (или в него прописан глобальный DNS (8.8.8.8,8.8.4.4,...)), а лезет по IP ( к примеру из кеша), то какой нафиг DNS ? А WPAD переадресует всё.
В SDK есть переключение WiFi на прем всего (всех пакетов по эфиру) - организуйте перехват всех баз WiFi в округе и отсыл на свой сервер :)
------------
Кинул новую версию бардака исходников по старому адресу.
В следующих вариантах будет дополняться:
1) запись flash с эксплорера
2) сохранение установок во flash
3) объединение переменных в единый блок обработки (можно будет задать файл в котором описать специальные установки WiFi и т.д. - почти скрипт).
 
Последнее редактирование:

pvvx

Активный участник сообщества
Имею проблемы с FT2232 и программами терминалов TCP и COM портов – они ВСЕ виснут, переполняются, не могут выдать потока на 3Mbit, не дают менять настроек таймаутов межсимвольной передачи и т.д. В итоге поток с FT2232 идет 1 символ в 1 ms!
Основная беда у прог терминалов - не могут одновременно пересылать и принимать разные файлы - просто ужас какой-то - всё надо делать самому... :(

Кстати, что там насчет os_printf ? его выхлоп на GPIO2 смотреть?
Отключается в SDK system_set_os_print(on/off), в тестовом порту UDP P1? P0?, все сообщения web-а выключатся в user_config.h: #define DEBUGSOO 0
eagle.rom.addr.v6.ld это гораздо лучше, чем ничего. только я даже не понимаю, насколько этим добром можно пользоваться. ээх ещё бы реальный хедер:)
http://esp8266.ru/forum/threads/ne-objavlennye-funkcii-sdk.20/#post-511
 
Последнее редактирование:

Alex

Member
В SDK есть переключение WiFi на прем всего (всех пакетов по эфиру) - организуйте перехват всех баз WiFi в округе и отсыл на свой сервер :)
Да не, пакость более мелкая. Внедряешь платку на ESP_WiFi в часы или светильник или еще какую девайсину с постоянным питанием. в платку сервачек с прайсом, адресом, ссылкам, телефонами. И дарим эту радость конкурентам. Или в соседний общепит.
 

pvvx

Активный участник сообщества
Починил передачу на UART при малых скоростях (свалка исходников перезалита). Не теми значениями таймер заряжал :) Но это всё равно для демки, что метод работает, т.к. надо менять алго c таймерами и прерываниями UART полностью :(.
 

Andrey

New member
Имею проблемы с FT2232 и программами терминалов TCP и COM портов – они ВСЕ виснут, переполняются, не могут выдать потока на 3Mbit, не дают менять настроек таймаутов межсимвольной передачи и т.д. В итоге поток с FT2232 идет 1 символ в 1 ms!
Не хочу показаться банальным. Вы выставили в настройках COM порта в виндовс задержку 1? По умолчанию там стоит 16. Свойства компорта, там где обычно стоит скорость 9600, есть кнопка дополнительно. Её нажимаете и в дополнительных настройках на задержку ставите 1. Там ещё размер FIFO настраивается. Скриншот сделать пока не могу- нет FTDI. Это особенность FTDI драйверов.
 

Perfer

New member
Дико извиняюсь еще раз, но может проект на github выложить и работать только через pull-requestы. Один фиг все на yandex диске уже лежит а кооректный git-репозиторий (с разумными коммитами) приведет все в порядок и видно будет хронологию развития + всякие там bugreport можно писать и иные "плюшки"
 

pvvx

Активный участник сообщества
Обновил пакетик хламу. Теперь там нормальная программа для создания диска - руки дотянулись вырезать лейбы Микрочипа :). Ну и файлы работы с диском переписаны и везде другие имена - долой MPFS ! :)
Дико извиняюсь еще раз, но может проект на github выложить и работать только через pull-requestы. Один фиг все на yandex диске уже лежит а кооректный git-репозиторий (с разумными коммитами) приведет все в порядок и видно будет хронологию развития + всякие там bugreport можно писать и иные "плюшки"
Как видите - я там махаю метлой по полной. Иногда по 30% файлов и переменных заменяю... github - упадет. :) И у меня всего 100Mb инет, а не 1Gb... Будет версия постабильнее - тогда можно.
Не хочу показаться банальным. Вы выставили в настройках COM порта в виндовс задержку 1? По умолчанию там стоит 16. Свойства компорта, там где обычно стоит скорость 9600, есть кнопка дополнительно. Её нажимаете и в дополнительных настройках на задержку ставите 1. Там ещё размер FIFO настраивается. Скриншот сделать пока не могу- нет FTDI. Это особенность FTDI драйверов.
pCOM6.gifFT2232C.gif pCOM6_COM14.gif ? Любыми программами...
Проблема в том, что данный модуль cFT2232, а их много у меня, уже сделан вставляемым в единую отладочную систему с разъемами для ESP8266 и логгеров...
Я уж давно плюнул, что большинство терминалов работает пачками с любыми COMпортами, но эта межсивольная 1 мс меня убивает…

Вот так пашет хваленый https://sites.google.com/site/terminalbpp/
term.gif :)
 
Последнее редактирование:

Andrey

New member
Первый скриншот "время ожидания" стоит 16. Поставьте 1 и будет вам счастье :) И не ищите здесь логику или совпадение по микросекундам. Просто поставьте. Хотя бы один раз для эксперимента. :) У вас после этого задержка даже на 115200 пропадёт.
 

pvvx

Активный участник сообщества
Первый скриншот "время ожидания" стоит 16. Поставьте 1 и будет вам счастье :) И не ищите здесь логику или совпадение по микросекундам. Просто поставьте. Хотя бы один раз для эксперимента. :) У вас после этого задержка даже на 115200 пропадёт.
Пробовал любые цифири - эта 1 ms остается на всех более менее программах терминалов (видимо они бояться ставить нуль и тусуют 1) . На глючных - там вообще бардак.

Проблемка локализована.
Написал сам вывод в COMпорт – всё OK.
До этого, за час проверил с десяток COMтерминалов. Всё смешные и ни один не работает правильно. Горе писаки – ещё денег просят. А из sourceforge – там вооще:
К примеру этот - RealTerm: Serial/TCPTerminalhttp://sourceforge.net/projects/realterm/ вдает пачками по 0,69ms с паузами по 47ms… :) :) Это же специально так надо научиться писать :)
 

Andrey

New member
Понял. Просто мы использовали вывод в COM без терминалов. И если не стояла эта единица, то получали задержки между байтами. Я сразу не понял что терминал может вносить свою задержку.
 

pvvx

Активный участник сообщества
Для теста надо организовать непрерывный поток от 300 до 10 000 000 Baud и дуплексный, с проверкой что там крутится. А ни одна из прог в инете этого не может. Если есть передача файла, то запихнув туда файл в дцать мегобайт они виснут наглухо или прерывают поток. Запустить при этом ещё одновременно прием в файл – это вообще непосильная у них задача. В большинстве прог скорости более 115200 вообще нет… Ну а детские проги просто лепят задержки понравившиеся на вид цифр и аналогичные размеры буферов... :)
 

Perfer

New member
Хороший терминал надо через потоки делать, что тянет за собой асинхронный обмен между ними, не каждый будет заморачиваться. Да и еще при конфигурировании порта (при написании терминала непосредственно) можно даже не заглядывать в настройки windows так как общение обычно идет с драйвером порта напрямую, которому пофиг как там в ОСи настроено - как ему (драйверу) скажешь так и будет.
Мораль: быстрый/хитрый терминал надо писать самостоятельно
 
Сверху Снизу