Давно ищу возможность включить бинарные данные в прошивку esp8266. Видел и такое предложение: Код (C++): const char picture[] PROGMEM = R"=====( #include "picture.bmp" )====="; Но не работает.
Да, конечно. Потом перекодировать обратно. Но хочется избежать этой ручной работы - просто положил другой файл, компильнул и всё работает.
Перед преобразованием файла к виду, который понимает компилятор, можно этот файл немножко зажать, если это эффективно. На маленьких bmp скорее всего бесполезно, зажимая ничего не выиграть. На тексте, зажимая скрипты стили и т.п. (тот же джиквери) и преобразуя их в исходный код для компиляции при сборке, можно получить выигрыш. Один раз пишете скрипт, который сканирует директорию data в директории со скетчем, найденные там файлы преобразует. Сохраняете этот скрипт в директорию со скетчем. Для выбранной платформы в обработчике recipe.hooks.sketch.prebuild проверяете есть-ли скрипт в директории со скетчем, если скрипт присутствует, выполняете. Таким образом, добавляя/изменяя файлы для web сервера при выполнении сборки получаете актуальный код. П.С. Прежде хранил файлы для web-а на spiffs, но грузятся они тулзом на этот spiffs безумно долго, и иногда просто забывал после загрузки исполняемого кода загрузить файлы на spiffs. Забросил это, html контент держу в собраноом коде, во время сборки налету преобразую файлы.
Алексей, очень полезно, спасибо за рецепт. С бинарными файлами понятно - вы их преобразуете в массивы HEX значений. А с HTML и CSS что делаете? неужели в строчки String заворачиваете?
всё собираю в массивы байтов типа Код (Text): static const char _bla_bla[] PROGMEM = {...}; для записи этих данных использую sendContent_P Во время сборки инициализирую структуры, описывающие контент - имя ресурса, тип контента, сжатие (если есть), указатель на данные и длину. Серверу остается только найти по имени запрошенного uri соответствующую запись и отгрузить данные установив соответствующие типы. Пример тут. Ган-зип прекрасно с этим справляется, один раз сделал скрипт, и жму налету при сборке. Да ещё входит в состав ОС, ничего доставлять не требуется.
Спасибо большое! Насчет скрипта - это хорошо. Но всё равно это как-то уж слишком по советски - одна программа разворачивает бинарник в текст, чтобы потом 2-я программа вернула этот текст к первоначальному бинарному виду и залила его на устройство... Неужели нет бо-ме простого способа тупо присоединить бинарник к прошивке?!
Почему по-советски? Всегда так было - на каждую линейку процев предоставляется тулчейн с кучей разных утилит - компилятор, линковщик, прошивальщик и пр.
Потому что, чтобы закачать бинарник, надо из него сделать текст и тогда компилятор сделает из него бинарник...
Напиши свой алгоритм извлечения из памяти данных вместе с прошивальщиком. Как пример, ищем на форуме esp8266 файловую помойку для esp8266.
Директива #include указывает компилятору (точнее препроцессору) включить другой исходный файл. Пользовался стандартом ISO/IEC 9899:2018 Information technology — Programming languages — C Раздел 5.1 Conceptual models, параграф 5.1.1.1 Program structure Не нашел про иное использование #include, откуда такая информация про включение бинарных файлов как исходных?