Скрыть объявление
Управляйте вашими ESP8266 и другими устройствами прямо с телефона из любой точки мира, где есть интернет!
Подробности и обсуждение IoT Manager в этой теме
Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "SDK и создание собственных прошивок", создана пользователем pvvx, 3 янв 2015.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Разработка ‘библиотеки’ малого Webсервера на ESP8266.

    Исходники https://github.com/pvvx/esp8266web

    Компилятор тут Unofficial Development Kit for Espressif ESP8266 (c) by CHERTS.
    Инструкция по пользованию Eclipse. В данной теме такие вопросы не разбираются (!), тут не школа для обучения азам программирования.

    * При прошивке всегда ставим размер Flash 512 Кбайт (4Mbit)! Реальный размер определяется автоматически самой прошивкой.
    * Если Flash на модуле более 512 Кбайт, то после подключения к AP "ESP8266" требуется заливка диска программой WEBFS22.exe или эксплорером набрав http://192.168.4.1/fsupload. Можно записать WEBFiles.bin и программатором по адресу 0x80000.


    В новых версиях esptool.py берется из директории проекта. Для MakeFile путь к ней автоматически задается в Eclipse с помощью "переменной среды" "CWD". Так-же возможна трансляция и без MakeFile, с автоматической генерацией и заданием всех параметров в самой Eclipse. Для этого необходимо переключить в иконке "Manage configurations for the current progects" на AutoMake и пользоваться иконкой или другими кнопками в Eclipse (иконка с молотком или "Project->Build Project", "Project->Clean"). В этом режиме все установки проекта, вплоть до специальных к каждому файлу, доступны в меню "Project->Properties" при выборе объекта (или всего проекта) в окне "Project Explorer". Прошить flash в этом режиме возможно выбрав в меню "Run->External Tools->FlashProg" или в панели иконок, а так-же изменив режим на "Default(Use Makefile)" и выбрав действие в окне "Make Target".

    Страница будет обновляться, по мере доработки web сервера.

    Внимание: у модулей ESP-01 нога RTS закорочена на GND проводником под чипом(!) - обязательно отключите FlowControl у TCP2UART - иначе чип сильно греется и глючит.

    Конкретные проекты, использующие данный Web-сервер за основу, обсуждаются в отельных темах:
    Проект переходника TCP2UART.

    Основные цели данной "свалки":

    1) Управление конфигурацией WiFi модуля и приложений на ESP8266 с помощью любого устройства с интернет браузером не ниже версии HTTP/1.0.
    2) Предусмотреть возможность подключения программных модулей для работы с разной периферией.
    3) Использование минимальных затрат web сервером "heap" памяти и других ресурсов ESP8266.

    Что уже сделано в текущей версии webсервера:

    1) Обслуживание запросов GET/POST/websocket и их разбор.
    2) Разбор параметров передаваемых в URI, cookie, контексте HTTP запроса и multipart/form-data в POST.
    3) Прием разбитых на множественные tcp пакеты HTTP запросов (общая длина HTTP заголовка ограничена в web_srv_int.h на 3070 байт).
    4) Отдача фалов со встроенного диска на flash и обслуживание TCP потока более 600 килобайт/сек.
    5) Обработка в отдаваемых сервером файлов с атрибутом "парсить" вставок обрамленных '~'. (К примеру: ~inc:имя файла~ вызывает вставку указанного файла, ~wifi_ap_ip~ вставляет в поток IP ...)
    6) Поддержка более десятка одновременно открытых соединений до ограничения памяти.
    7) Управление всеми известными параметрами WiFi модуля на ESP8266ex.

    Что не будет:

    1) Обслуживания пакетных запросов при “Connection: keep-alive” (связано с ограничением памяти у ESP8266 и их негде собирать и хранить для каждого соединения).

    Чего нет или “зависло”:

    1) Дизайн HTML основных страниц webсервера. Просто некогда этим заниматься. Имеющиеся – это тестовые или предоставленные другими. Приветствуется предоставление дизайна от “сообщества” :) Никакие претензии и указания ошибок в имеющихся не принимаются. Только при предоставлении полной альтернативы и дизайна всех страниц для всех.

    Приложенная программа генерации image диска (WEBFS22.exe):
    WEBFS.gif
    Требует установленного .NET Framework 2.0
    Записывает файловую систему в модуль по инет с нуля при наличии только прошивки самого кода и установке соединения с модулем по WiFi. При смене настроек WiFi укажите их в меню настроек соединения. В меню "Advanced Settings" программа позволяет изменять список расширений ваших исходных файлов использующих переменные dynamic files и какие файлы не сжимать GZIP (Do not Compress). Исходные тексты программы приложены и являются модификацией программы MPFS2.1 от Microchip.
    На стандартной flash (512к) максимальный размер файловой системы (WEBFiles.bin) составляет около 256 килобайт. Он находится сразу после всех программных кодов и заканчивается до 0x79000. В последних версиях этот стартовый адрес равен 0x39000 (см. уточнения в bin\readme.txt).
    При использовании большей Flash, более чем 512к, адрес записи диска всегда начинается с 0x80000 (512к) и диск использует область до конца flash (на W25Q128 это= 16252928 bytes или 15,5 Mbytes).
    Загрузка диска (WEBFiles.bin) во flash при его отсутствии (или наличию) в експлорере можно произвести набрав: http://192.168.4.1/fsupload (где 192.168.4.1 – текущий или по умолчанию IP адрес модуля).

    Файлы, вызываемые с диска, при обработке запросов HTTP на ошибки:
    400 Bad Request - сервер обнаружил в запросе клиента синтаксическую ошибку.
    401 Unauthorized - для доступа к запрашиваемому ресурсу требуется аутентификация.
    404 Not found - Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI.
    411 Length Required - для указанного ресурса клиент должен указать Content-Length в заголовке запроса.
    414 Request-URI Too Long - сервер не может обработать запрос из-за слишком длинного указанного URL.
    418 I'm a teapot - http://en.wikipedia.org/wiki/Hyper_Text_Coffee_Pot_Control_Protocol
    501 Not Implemented - сервер не понимает указанный в запросе метод.
    Имя файлов ошибок строится как "(HTTP номер ошибки).htm". Пример, при ошибке 400, ищется файл с именем "400.htm". Если такого файла на диске нет, то вставляется стандартный внутренний ответ.

    Кол-во файлов на диске ограничено до 250.

    Изменить настройки WiFi или что-то ещё без наличия загруженного диска во flash, можно подав запрос http://192.168.4.1/ или http://192.168.4.1/web.cgi и передав необходимые переменные в строке URL (?name=value&name=value...), или cookie, или контексте POST форматом multipart/form-data. Пример: посмотреть дамп памяти http://192.168.4.1/web.cgi?hexdmpb0x40200000=1024

    При запросе файла с сервера, содержащем в названии 'protect' (каталога или имени) используется авторизация с именем и паролем от AP станции.

    При первом старте, после прошивки программы, имеем:
    Name: ESP8266
    Password: 0123456789
    Режим доступа AP по умолчанию 'OPEN'.
    Имя AP и её пароль является именем и паролем для входа на "защищенные" страницы сервера и используется для записи диска по http://192.168.4.1/fsupload.

    Область сохранения настроек на текущем тесте назначена на 3 сектора в области адресов Flash c 0x79000 по 0x7C000. Их можно очистить, записав туда blank.bin по 3-м адресам: 0x79000, 0x7a000, 0x7b000 в FLASH_DOWNLOAD_TOOLS или в среде Eclipse опцией 'FlashClearSetings'.

    Для ускорения загрузки и использования 48 килобайт IRAM вместо 32 проект использует специальный дополнительный загрузчик "RapidLoader". График загрузки с RapidLoaderV2.

    Измеренные ТТХ по питанию модуля:
    Потребление при передаче на скорости к 1 мегабайт в секунду - пример два графика в конце
    Потребление модулем в разных режимах WiFi-sleep модуля и стартовые примеры
    Потребление по питанию часов (по ноге RTC_VDD)
    Потребление при прошивке модуля с помощью esptool.py
    Закорачивание I/O выхода вызывает увеличение тока на 50 мА: http://esp8266.ru/forum/attachments/esp-01-gpio15-out-gif.885/
    Потребление с фирменной фичей в режиме ST, при поиске внешней AP.
    Скорость реакции ножки RESET по просыпанию от ноги GPIO16 (deep-sleep).
    Время от старта модуля до исполнения кода из flash при использовании специального загрузчика = 30 ms.
    Запись диска на 16 Мегабайтной Flash из эксплорера происходит примерно за 90 секунд (flash постранично стирается и пишется примерно в 160..180 килобайт в сек).
     
    Последнее редактирование: 6 фев 2016
    ivy, edgi, codavr и 16 другим нравится это.
  2. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Продолжение описания, т.к. в первое сообщение уже не лезет:

    Отличия проекта Modbus TCP RTU RS-485 от Web/TCP2UART всего в файле include\user_config.h, файлах web-диска (папка WEBFiles) и WebVars.xlsx.
    И в общем виде Web-свалка на сегодня поддерживает:

    Набор встроенных скриптовых переменных обеспечивает управление всеми режимами WiFi, UART, GPIO, ADC, переменных modbus и управление другими уже встроенными сервисами...
    Поддержка передачи переменных в GET, POST, Куки и Мулти-Дата формате, формирование вывода переменных в XML, обработка переменных через websocket.
    GET, POST, Куки наборы переменных ограничены несколькими килобайтами за раз. Кол-во переменных в Мулти-Дата формате не ограничено (ограничено форматом передачи длины общего сообщения в 32 бита - 4294967296 байт - 4 Гигабайта). В websocket ограничений вообще нет.

    Про загружаемые форматы 'multipart/form-data'. Пример:
    Код (HTML5):
    1. <form method='post' action='http://aesp8266/fsupload' enctype='multipart/form-data' class="content">
    2.     <h2 class="title">Overlay Upload</h2>
    3.     <p class="center">
    4.     Select Overlay file...<br><br>
    5.     <input type='file' name='overlay'><br><br>
    6.     <input type='submit' value='Upload' class="button">
    7.     </p>
    8. </form>
    Используемые имена 'file':
    <input type='file' name='file'> - загрузка и прошивка в flash Web-диска;
    <input type='file' name='overlay'> - загрузка Оверлея;
    <input type='file' name='sysconst'> - загрузка и прошивка в flash esp_init_data_default.bin;
    <input type='file' name='fsec_nnn'> - загрузка и прошивка в flash сектора с номером nnn, номер сектора в формате hex или dec.

    Сделана возможность перезагрузки при уровне ноль на GPIO2.

    Ещё ссылки:
    Комменты об RapidLoader
    Кол-во и скорость открытия множественных Web соединений (JMeter)
    'Мигает светодиод на модуле'
    Скорость опроса датчика INA219 через WebSocket
     
    Последнее редактирование: 19 апр 2016
    codavr, THK, AlexeyGR и 3 другим нравится это.
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Продолжение:

    Оверлеи/драйверы загружаются по HTTP или web-командой из web-диска в IRAM память ESP8266.

    Для работы с оверлеями web имеет такие команды:
    ovl=имя_файла_на_web_диске - загрузка оверлея с web-диска
    ovl$=N, где N - число. 0 - close, 1 - инициализация. Другие значения - передача опций для оверлея и специфичны. Параметр передается функции int ovl_init(int flg), как flg.
    ovl@=строка или список параметров - пока не задействована ни в одном примере.
    Аналогично ~ovl:имя_файла_на_web_диске~, ~ovl$N~, ~ovl@строка~. В этих случаях в поток TCP передается номер кода возврата (ошибки).

    Параметры инициализации и ответы для всех оверлеев обычно находятся в modbus таблице и имеют доступ к ним с любых интерфейсов web-сервера (см. описание переменных web-сервера).

    Web-сервер поддерживает один активный оверлей. Оверлеи можно загружать по очереди, по мере необходимости. При загрузке нового оверлея вызывается команда закрытия текущего оверлея ovl_init(0). Инициализация оверлея ovl_init(1) производится по закрытию Web-HTTP соединения для возможности передачи настроек инициализации в любом порядке, а в случае запроса из websocket – сразу после загрузки.

    Текущие ограничения по размеру кода оверлея около 8 килобайт, но если включить опцию IRAM=48к, то 16+8 килобайт. Для rodata/bss используется буфер в области памяти ROM-BIOS до 1 кило (остальные переменные, кратные 4 байт, размешаем в IRAM).

    Описания готовых оверлеев даны в их папках проекта.
     
    Последнее редактирование: 11 мар 2016
  4. Alex

    Alex Читатель

    Сообщения:
    72
    Симпатии:
    5
    Прошился и готовой прошивкой и с исходников. В режиме AP все вроде работает, а в режиме AP+STATION через домашний роутер тормозить стало сильно. Переключился в режим STATION "тормоза" пропали.
    Тема очень интересная для меня пополнить знания. С "С" я пока на Вы. Немного под AVR и STM8 писал. Начинал на "асме" под PICи. С WEB вообще никак. Подскажите в чем HTML XML CGI редактировать?
    PS: Все с HTML разобрался. Вопрос отпал.
     
    Последнее редактирование: 5 янв 2015
  5. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    442
    Симпатии:
    98
    Выйду после праздников на работу попробую написать кросс-платформенную программу создания образа flash диска с файлами, я так понимаю используется mpfs от microchip? а может использовать другую реализацию fs, например из того же esphttpd, там уже есть почти кросс-платформенная утилита создания образа, её нужно допилить под windows, я даже выкладывал проект под visual studio для америкосов тут
     
  6. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Да. Была под рукой и немного изменил, что успел. Она есть и на java... https://yadi.sk/d/EyE2DOlDdoUjS
    Она не использует GZIP и в ней тоже много лишнего (другой паковщик)...
    Прямо в Eclipse (сборке от CHERTS).
    У меня доустановлено http://www.nodeclipse.org/updates/ там много полезного....
     
    Последнее редактирование: 6 янв 2015
  7. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Для информации, из местной личной переписки, чтобы не повторять:

    Во время разговора проверил, до какой скорости устанавливается и работает UART.

    При UART на 80 000 000 bits/s (<clk_div_reg>00000001</clk_div_reg>) не успевает сам вход/выход порта.
    При 20Mbits/s – успевает: https://yadi.sk/i/Hn4-aUAMdnczQ 100ns/500mV клетка.
    Показан какой-то из разрозненных ‘аски’ символов (разрозненные, т.к. скорость вывода превышает загрузку в буфер передачи FIFO UART)
    <uart1>
    <baud>20000000</baud>
    <int_raw_reg>00000002</int_raw_reg>
    <int_st_reg>00000000</int_st_reg>
    <int_ena_reg>00000001</int_ena_reg>
    <int_clr_reg>00000000</int_clr_reg>
    <clk_div_reg>00000004</clk_div_reg>
    <autobaud_reg>00001000</autobaud_reg>
    <status_reg>00000000</status_reg>
    <config0_reg>0000000c</config0_reg>
    <config1_reg>00000001</config1_reg>
    <data_reg>00062000</data_reg>
    <id_reg>00000500</id_reg>
    </uart1>
    При 80Mbits - не хватает тактирования ножки порта I/O … https://yadi.sk/i/8lRDjNttdnd3x (на осциллографе и анализаторе выводит импульсы от символов когда пару бит в нуле - биты 1010101... уже не прокачивает -> порт стробируется...)

    Досконально проверять какая максимальная скорость без искажений фронтов (внутренними стробами чипа) пока лень.
    К ESP8266 у меня подключена FR2232, у неё 2RS с пределом 3Mbits:
    300000Baud.gif
    На 3Mbits всё стабильно...
     
    Последнее редактирование: 6 янв 2015
  8. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    В той версии неправильно использовал unrecved в Lwip. Оказалось, что если у соединения Lwip-а не обнулен счетчик вычета размера окна TCP, то он закрывает соединение командой abort (передачей tcp пакета с [RST, ACK]) не дожидаясь передач буферов...
    При переключении в режим STATION возникают непонятные тормоза из-за кэщей у роутеров, эксплорера и самой винды. И что-то ещё, связанное с номерами каналов WiFi ESP8266 и WiFi роутеров. Потом, спустя паузу, пробивается. Причину ещё не локализовал.
    ----------
    Переключение настроек WiFi в текущих версиях не полное. Перезагрузки ESP8266 там нет.
    Но не всегда при изменении настроек WiFi требуется перезагрузка модуля.
    Кому и где это решать - пока не созрело. Перезагрузку модуля можно вызывать командой ~sys.restart~ в текcте thm или передачей в параметрах к HTTP запроcу, а можно в самом запросе HTTP. Т.е. реализуется в файлах HTML сервера или на java или в кодах обработки установок WiFi - ещё не решил.
    При настройке часто требуется знать, какой будет новый IP адрес модуля для редиректа с паузой. Пока добавил как ~sys.ip~ - будет выдавать IP в соответствии с заходом пользователя со стороны AP или STATION. Адреса то разные...
    Короче - не всё ещё продумано с этим и в стадии разработки/доработки...
    Сейчас основная задача доделать и доработать алго загрузки файлов на саму ESP8266. В опубликованных это не работает, т.к. ещё не доделано в связи со множеством вариантов реализации и множеству вариантов форматов передачи у разных эксплореров...


    Стандартная передача параметров в HTTP:

    Для GET в URI:
    http://192.168.4.1/[файл]?команда=значение&команда=значение

    Для POST, в заголовке запроса HTTP:
    POST /[файл] HTTP/1.1\r\n
    Content-Length: x\r\n\r\n
    команда=значение&...&команда=значение


    Или через cookie в теле заголовка запроса HTTP:
    Cookie: команда=значение;...;команда=значение\r\n

    Всё это повязано ещё с проверкой на авторизацию и имя файла. По ним вычисляется что и когда принимать к исполнению...
     
    Последнее редактирование: 6 янв 2015
  9. Vit

    Vit Новичок

    Сообщения:
    30
    Симпатии:
    1
    Правильно ли понимаю, что нужно заливать blank.bin, esp_init_data_default.bin, 00000_eagle.app.v6.bin, 40000_eagle.app.v6.bin, и WEBFiles.bin?
     
  10. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    Припаял на старый модуль flash побольше W25Q128FVSG.
    BIOS ESP8266 и SDK говорит:
    FlashID: 0x001640ef
    Chip size: 524288 :)
    Block size: 65536
    Sector size: 4096
    Page size: 256
    Status mask: 0x0000ffff
    Исправил. Вышли все 16 Мегабайт. Закинул на диск web-а PDFв 1.34Megдля тестов…
    Всё работает:

    Кино дети снимать мешали. По тому так дергано и муторно :) Fifo UART (3Мбита в сек) с таким кол-вом отладочной инфы переполняется, а pritf-ы тормозят поток - пока они там создадут строку... У мониторов COM портов тоже переполняются буфера и тормозят, да пропускают символы, через размер буфера :mad:
    Как исправлять и что, и связанные с Flash приколы в SDK пока замну. Большие flash теперь поддерживаются в данном Web-сервере! :p (Запись/чтение проверил на всю 16Мег)
    Много переписал. Загрузку файлов сделал. Готовить новый пакет для демы лень...o_O Буду ждать кто даст программу для создания диска (желательно на питоне – там вроде это проще, впрочем можно на любом языке с исходниками - мне всё равно какой язык, лиш-бы транслятор был :) )... Заодно препроверю всё и допишу ещё всякого :)
    Да. Но там ещё всё кривое.
     
    Последнее редактирование: 6 янв 2015
  11. CHERTS

    CHERTS Moderator Команда форума

    Сообщения:
    442
    Симпатии:
    98
    Круто, но ценник в 100 р. на aliexpress за W25Q128FVSG не гуманный, учитывая, что сама плата с ESP стоит 170 р. :( Да и куда такие объемы... хотя если долго долго очень долго собирать показания в оффлайне, а потом скопом все отправлять.

    Питон не знаю, поэтому буду писать на си, хотя и в нем я не силен, но на delphi будет не кросс-платформенно это уж точно.
     
  12. Vit

    Vit Новичок

    Сообщения:
    30
    Симпатии:
    1
    Жаль. Собралось и уже "закомбайнилось":)
    Не понял зачем терминатор (если есть размер файла) и где он
    Как насчет использования хэша Пирсона (если слаб, можно двойной пробег с разными таблицами)?
     
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    @Vit
    Прислали с aliexpress за 64 рупь штучка...
    Обычно сервер набивается документацией. Печатная стоит дороже и её всегда теряют.
    Существует масса датчиков и методик, когда устройство ждет в ждущем режиме, а по событию снимает поток в несколько мегабайт… Да и к примеру карты для навигации и всякое другое для информации пользователя о местоположении объекта нормальным русским языком, а не пару строчками цифр, которые пользователь не знает куда засунуть. Треки GPS тоже не малые….
    Ресурсов то ещё много - сервер только временно на прием/обработку/передачу пакетов тратит память (RAM) до 6 кило, а статики там и на кило не наберется при 10 пользователях, если вырубить отладку. Так что память heap вся за минусом кило. Остальное отжирает китай-SDK :mad:. До включения Web-а всего два указателя в памяти = 8 байт. :) Это же не Lua портированная с помойки, а "самиздат" для конкретного чипа...
     
    Последнее редактирование: 6 янв 2015
  14. Vit

    Vit Новичок

    Сообщения:
    30
    Симпатии:
    1
    Я боюсь промазать с порядком заливки и потому сделал combine во frame_test.
     
  15. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    3.130
    Симпатии:
    589
    //Polynomial: x^16 + x^12 + x^5 + 1 (0x8408)
    // Initial value: 0xffff
    // Для 16-ти битных MCU
    unsigned int CalkCRC16_8408(unsigned char * blk, unsigned int dLen)
    {
    unsigned int crc = 0xFFFF; // CRC-CCITT (Kermit) =0
    do
    {
    crc ^= *blk++;
    crc = (crc >> 8) | (crc << 8);
    crc ^= (crc & 0xff00) << 4;
    crc ^= crc >> 12;
    crc ^= (crc & 0xff00) >> 5;
    }while(--dLen);
    return crc;
    }
    // Для 8-ми битных MCU, полином 0x8408
    typedef union
    {
    struct {
    unsigned char l;
    unsigned char h;
    } ch;
    unsigned int w;
    } ucrc;
    ucrc crc;
    void UpdateCRC(unsigned char c)
    {
    c ^= crc.ch.l;
    crc.ch.l = crc.ch.h;
    crc.ch.h = c;
    crc.ch.h ^= crc.ch.h << 4;
    c = crc.ch.h >> 4;
    crc.ch.l ^= c;
    crc.ch.l ^= crc.ch.h << 3;
    crc.ch.h ^= c >> 1;
    }
    В MPFS2 ещё проще -
    // Calculate the name hash to speed up searching
    for(nameHash = 0, ptr = cFile; *ptr != '\0'; ptr++)
    {
    nameHash += *ptr;
    nameHash <<= 1;
    }
    :)
    Нам требуется отличить десяток имен файлов, а совпадение затормаживает на пару микросекунд, пока по QSPI шине скачается десяток байт на 40x4MHz...
    Актуальность ХЕШа только в энергопотреблении системы.
    Тут даже если у чипа есть своё устройство подсчета разных полиномов, его дольше заряжать на задачу... Тем более доступен ассемблер - можно оптимизировать какой 32-х битный полиномчик под данный проц на десяток команд... Нам с МикроСофтом и Lua совместимость тут не нужна.
    Имя файла в среднем 10..16 байт. Проц 32-х битный – 4 сравнения :) Можно просто сложить в один DWORD. Дольше разбираться в длине имени побайтно....
     
    Последнее редактирование: 6 янв 2015
  16. Vit

    Vit Новичок

    Сообщения:
    30
    Симпатии:
    1
    Хеш Пирсона 8 бит
    // This assumes that name always ends with NULL character (\0).
    unsigned char phash_wikipedia(const char *name) {
    char *key = name;
    unsigned char hash = 0;
    for (char c = *key++; c; c = *key++)
    {
    hash = T[hash ^ c];
    }
    return hash;
    }
    // T table for Pearson hashing from RFC3074, хотя не думаю, что это принципиально:)
    unsigned char T[256] = {
    251, 175, 119, 215, 81, 14, 79, 191, 103, 49, 181, 143, 186, 157, 0,
    232, 31, 32, 55, 60, 152, 58, 17, 237, 174, 70, 160, 144, 220, 90, 57,
    223, 59, 3, 18, 140, 111, 166, 203, 196, 134, 243, 124, 95, 222, 179,
    197, 65, 180, 48, 36, 15, 107, 46, 233, 130, 165, 30, 123, 161, 209, 23,
    97, 16, 40, 91, 219, 61, 100, 10, 210, 109, 250, 127, 22, 138, 29, 108,
    244, 67, 207, 9, 178, 204, 74, 98, 126, 249, 167, 116, 34, 77, 193,
    200, 121, 5, 20, 113, 71, 35, 128, 13, 182, 94, 25, 226, 227, 199, 75,
    27, 41, 245, 230, 224, 43, 225, 177, 26, 155, 150, 212, 142, 218, 115,
    241, 73, 88, 105, 39, 114, 62, 255, 192, 201, 145, 214, 168, 158, 221,
    148, 154, 122, 12, 84, 82, 163, 44, 139, 228, 236, 205, 242, 217, 11,
    187, 146, 159, 64, 86, 239, 195, 42, 106, 198, 118, 112, 184, 172, 87,
    2, 173, 117, 176, 229, 247, 253, 137, 185, 99, 164, 102, 147, 45, 66,
    231, 52, 141, 211, 194, 206, 246, 238, 56, 110, 78, 248, 63, 240, 189,
    93, 92, 51, 53, 183, 19, 171, 72, 50, 33, 104, 101, 69, 8, 252, 83, 120,
    76, 135, 85, 54, 202, 125, 188, 213, 96, 235, 136, 208, 162, 129, 190,
    132, 156, 38, 47, 1, 7, 254, 24, 4, 216, 131, 89, 21, 28, 133, 37, 153,
    149, 80, 170, 68, 6, 169, 234, 151
    };
    Как по мне, по быстродействию вполне сравнимо с MPFS2

    Из 32-х-битных припоминается простой Adler-32, но там длина строки всё-равно нужна
     
  17. goodwin

    goodwin Читатель

    Сообщения:
    46
    Симпатии:
    11
    Бояться не стОит ;) Эта утилитка (FLASH DOWNLOAD TOOLS) корректно шьет все *.bin файлы проекта , при условии отсутствия русских имен в путях. К тому же модифицирует их в зависимости от установленных галочек. Например, можно заюзать флэш в режиме SPI.
     
  18. Vit

    Vit Новичок

    Сообщения:
    30
    Симпатии:
    1
    Я не уверен. Причем эта неуверенность появилась после того, как combine при разной последовательности включения файлов дало неполный размер выходного bin - что-то вроде 506 с копейками вместо 520 с копейками
     
  19. A_D

    A_D Читатель

    Сообщения:
    59
    Симпатии:
    10
    pvvx, Спасибо за Ваши труды, очень интересный проект Вы делаете. Посмотрел видео и залил тестовую прошивку из первого поста - посмотрел чего это за зверь получился. Пока не писал ни разу под данный камень код, но как выйдет первый релиз - точно начну с Вашего проекта :) т.к. уже есть пару идей, куда можно было бы попробовать применить данный чип, сначала пытался на стоковой прошивке сделать что то наподобие веб морды с управлением, управляющим МК - был атмега, но итоговый вариант выходил больно громоздким, глюченным (тут еще добавляло прилично глюченности сама стоковая прошивка ESP) и уж больно медленным... в итоге забросил это дело.
    И по поводу компилятора - а этот вариант под Win x64 подойдед для того, что бы начать или посоветуете что то другое? И последний вопрос - а когда ждать альфа релиза исходников прошивки ? :)
     
  20. goodwin

    goodwin Читатель

    Сообщения:
    46
    Симпатии:
    11
    Я ни разу такого не замечал. Всегда 508 КБ (520 192 байт)
     

Поделиться этой страницей

Загрузка...