Уважаемые посетители сайта esp8266.ru!
Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram
Остается задача ужать код OTA загрузчика до минимума. Т.к. не требуется переписывания загруженного OTA в рабочую область, то объем “свободной” Flash в таком случае будет больше. Но появляется проблема с внешними BT адаптерами – работа с разными характеристиками устройства под одним MAC. Надо...
Набил предварительный код OTA, но ещё ни разу не собиравшийся и не состыкованный с общим. Аналогично к нему уже есть куски и в HTML/js, которые надо немного адаптировать. Пока нет времени на PHY62x2.
Позволяет грузить в любой адрес и кусками. Подпись на любой кусок ставит после успеха.
Код...
В общем приехали с gcc из за структурных программистов (коих точно вытеснит ИИ, т.к. всё их дело - это раздувание размера кода для понимания человеком, что нафиг не нужно машине) - Придется вручную считать размер структур и писать #define size_этой_стркутуры 5 .
И при чем тут массивы?
При составлении массива берутся выровненные адреса для каждого элемента. Это никак не влияет на размер элемента.
Аналогично со структурами в структурах. Всегда начинаются с выровненного адреса, но размер может быть нечетным. Никому это не мешает.
И операция a = b со...
Я не Ардуинщик и не собираюсь составлять из нечетных по размеру структур массивы.
Гнать их всех погаными тряпками.. :)
Правда это уже началось - прогнозируют что ИИ в ближайшие 5 лет вычистит из "программистов" 99% на улицу собирать бутылки... О смерти любимых толпе языков программирования уже...
Так делать не нужно:
struct {
uint8_t sz;
uint32_t val;
} aaa;
нужно так:
struct {
uint32_t val;
uint8_t sz;
} aaa;
И чтобы sizeof(aaa) был = 5.
Остальной маразм в gcc как нибудь обойду.
Где тут не выровнено?
Да пофиг на архитектуру - создавайте сами структуры только с выровненными адресами переменных. Это упрощает работу с ними в других системах. Но вот лишние байты в конце, если структура {uint32 x; uint8 b} тут всё нарушают. И вместо 5 байт выходит 8-мь.
Чем отличается #pragma pack(1) от __attribute__((packed)) ?
При __attribute__((packed)) он uint32_t будет загружать побайтно, не смотря на выровненность адреса.
Почему то для других CPU этого не происходит - определяет что адрес выровнен...
И нафига в gcc sizeoff структуры с одним байтом = 4 байта? Как его угомонить? А то копирует тоже на 3 байта больше...
Если включить упакованную структуру - размер кода сильно увеличивается - он не может нормально читать слова по выровненным адресам?
Или это опять "оптимизаторы" в gcc постарались...
Ещё надо вписать в прошивку:
1 Запись истории замеров в Flash
2 OTA
Для OTA надо менять *.ld.
Выбрал такой вариант - будет базовая прошивка с интерфейсом OTA. После загрузки новой прошивки по OTA по адресам выше, оно и будет запускаться, но базовая останется.
Причина - нету изменения адреса...
У меня другая проблемс - ATC_MiThermometer/GraphAtc1.html на смарте не показывает температуру. На компе всё ok.
В Chrome на смарт нет отладки по F12 и непонятно... похоже не может включить Notify для температуры?
И в репо добавлен web/html - пока не дописан, но что-то уже работает...
+ Теперь...