Пример скетча с самопрограммированием и записью во FLASH из основной программы
- Войдите на сайт для отправки комментариев
Сб, 06/06/2020 - 08:35
https://github.com/majekw/optiboot/tree/supermaster/optiboot/examples/flash_program
Суть и как это возможно.
Суть в том что теперь можно просто из скетча писать djaktim и даже менять программе саму себя.
Это возможно благодяря вызову функции находящейсф в загрузчике, optiboot (модифицированном)
Штука интересная, но не совсем ясно как менять программе саму себя. Насколько я понимаю - МК пошагово читает с Progmem Space инструкции, выполняя их.
Т.е. надо иметь функцию "обновлятор", которая будет в каждой новой прошивке находится строго по одному и тому же адресу, чтобы обновлятор не записал поверх себя что-то, запускающее котел на Марс.
Данный пример больше показывает как хранить данные во FLASH экономя EEPROM .
Но концепция интересна еще и тем что код загрузчика для программ может быть не мертвым вовремя исполнения, а полезным. Его можно применять и в основной программе, вот это очень интересно с точки зрения оптимального программирования.
И отсюда.... Загрузчики можно и нужно писать максимально полезными и они будут не мертвым грузом во FLASH памяти.
Окей, область памяти есть - как gcc из IDE скомандовать - функцию "обновлятор" всегда размещай в конце прошивки, по одному и тому же адресу? И что делать, если необходимо обновить обновлятор?
Я это к тому, что гораздо более простым решением видится модификация бутлодера (раз уж до этого дошло дело), который будет с внешней EEPROM или SPI flash шить на старте МК. А во внешнее хранилище обновленную прошивку уже и скетчем совать, без каких-либо плясок святого Витта.
Данный пример больше показывает как хранить данные во FLASH экономя EEPROM .
Согласен. Но тут мы вступаем на скользкий путь - ведь Arduino, концептуально, обеспечивает единый подход к программированию разных МК. Получается, что данный трик уже начинает ограничивать переносимость. Для конкретной задачи - ОК, для концепта - Fail.
Я рассматривяю платформу как инструмент,а не как среду с ограниченными возможностями и условностями. Стараться угодить всем и объять необъятное, в данном случае не имеет никакого смысла.
Там некоторые потуги поддержки разных МК наблюдаются.
Похоже основное требование - Optiboot. Если есть то работает.
В любом загрузчике есть подобные участки кода, просто надо знать точку входа.
Это возможно благодяря вызову функции находящейсф в загрузчике, optiboot (модифицированном)
Погоди-ка... в соседней теме ты сняв каску и разбрызгивая слюнями на публику радостно кричал: -"товарищи, я знаю как записать из флеша фсю флешь в любом месте флеша, всё дело во фьюзах!!!!!!!"
А теперь ты переобулся в лапти и вещщащъ, шо это не совсем так... это не так и вааще невозможно.... но есть "якобы хитрый способ" нырнуть в область бута и вынырнуть во флеши. Приплёл таблицы с фюзами, накой???
НУ ДА, это ВОЗМОЖНО было уже когда ты под стол пешком ходил и об этом я тебе уже писал.
Теоритическиможно просто программы сделать так что часть куда будет находится в той половине где разрешена работа команды SPM, биты размера загрузчика не влияют на работу этой операции, она будет работать в любом месте входящем в максимальный размер, разрешенный для загрузчиков в МК ну тоесть бутлоанед 512байт и размер загрузочной секции 512 байт выставлен предохранителями но SPM команду можно разместить и в 4Кб верхнем блоке памяти atmega328
здаёцца мне, шо трусы ты под дождём сушишь а стираешь их сухими.
Кароче, праграмист-ниипаццо , пейши паэкт в протеусе, я посмотрю как это всё работает а там видно буит кто прав а кто нет!!!
здаёцца мне, шо трусы ты под дождём сушишь а стираешь их сухими.
Не обижай Серёжу. Он же из лучших побуждений "открывает Америку" и пытается донести это в массы.)