Остается задача ужать код 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 - пока не дописан, но что-то уже работает...
+ Теперь...