Можно ли выполнить код во время выполнения, когда он обновляется по воздуху (OTA)?
Я хотел бы создать библиотеку, подобную ArduinoOTA, но без простоев во время выполнения. Для этого мне интересно, можно ли создать простую настройку и циклический код для
- Проверить наличие новых выпусков
- Если у нас есть новый, начните его скачивать
- Поскольку загрузка не завершена, продолжайте использовать текущую версию
- По завершении загрузки замените текущую версию на новую.
- Теперь новый выпуск выполняется в обычном режиме.
Мне очень интересно, можно ли самому сделать что-то подобное.
Я не нашел никаких документов или статей, подобных этой, и я не знаю, является ли это проблемой для области Arduino или C/C++.
Возможно, я говорю что-то странное, но я думал сохранить новую версию во флэш-памяти, указать на нее и удалить старую версию из флэш-памяти.
@marquesm91, 👍2
Обсуждение1 ответ
Лучший ответ:
На многих Arduino процессор стоит всего несколько долларов. Вы просите функцию, которая только начинает появляться на платформах, где процессор стоит на порядок дороже. Кроме того, такие недорогие процессоры обычно выполняют одну программу. Запуск скетча при управлении загрузкой & обновление лучше всего выполнять двумя программами, существующими в операционной системе. Опять же, вероятно, потребуется процессор на порядок дороже.
Вместо этого рассмотрите возможность реализации своего проекта с использованием двух разных плат Arduino. Замена одного на другой после обновления. Горячая замена не может быть тривиальной. Это действительно зависит от того, как ваше приложение взаимодействует с миром. Но, вероятно, это будет намного проще, чем решить проблему разработки вспомогательного программного обеспечения, чтобы сделать обновления скетчей прозрачными для пользователя Arduino.
Честно говоря, это самый простой и в то же время интересный способ реализации. Это не идеальное решение, но определенно может меня сопровождать. Большое спасибо за это!, @marquesm91
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Как постоянно считывать/записывать переменные на Arduino Due (без EEPROM/shield)?
- Arduino EEPROM сохраняет старые данные после прошивки новой программой
- Arduino Nano 33 BLE - использование flash для хранения данных; как расширить фрагмент примера кода
- ESP32: лучший способ встраивания сертификатов
- Как установить начальное значение eeprom при перепрошивке ESP32
- EEPROM.get возвращает неверные данные
- заставить EEPROM.h использовать пользовательский раздел eeprom
На 8-битной Ардуино? Нет. Или, конечно, не без огромного количества работы., @Majenko
чего вы пытаетесь достичь? ...может это можно сделать без перепрошивки программы, @jsotola
@jsotola Я пытаюсь развертывать выпуски по воздуху без простоев в середине этого процесса. То есть я хочу загрузить новую версию из Интернета и продолжать работать со старой, пока не будет загружена новая., @marquesm91
это на самом деле не отвечает на вопрос, это повторение вашего вопроса .... возможно ли, что «обновление» может включать изменение только некоторых параметров, которые можно прочитать с онлайн-сервера, @jsotola
«Обновление», о котором я говорю, — это новая версия текущего скетча, ранее загруженного в Arduino вручную., @marquesm91
но в новом эскизе не все по одному и тому же адресу. как указатель инструкции будет установлен на хороший адрес. и что будет инициализировать новые переменные. сброс необходим, @Juraj
а про какой MCU речь?, @Juraj
@Juraj Хм, есть смысл! У вас есть какая-нибудь бумага, которую вы могли бы прочитать для чего-то подобного? Эти вопросы для моей последней статьи, и я пытаюсь обновить OTA, как мы видим в Интернете или приложениях. Было бы здорово, если бы у нас было то же самое в экосистеме IoT., @marquesm91
MCU будет Arduino или ESP8266. Я читал, что оба используют модифицированную гарвардскую архитектуру и могу поделиться инструкциями и кодом данных. Но вы правы, когда говорите, что MCU не знает, как узнать полный путь к указателю инструкции., @marquesm91
Извини. ESP8266 ESP-01, @marquesm91
esp8266 имеет библиотеку ArduinoOTA, поддерживаемую SDK. для SAMD Arduino имеет OTA, и я сделал такой OTA для ATmega https://github.com/jandrassy/ArduinoOTA, @Juraj