Когда-то находил загрузчик программ с SD картридера. Но там, на память, использовалась некая сильно упрощенная ФС, и подгружать он мог только всю программу целиком и обязательно файл программы должен был быть первым в корневом каталоге, что требовало отдельной карты на каждую программу. Иначе не хватало загрузочного куска флеш для системы "поумнее".
Собственно, это та самая причина (кроме любопытства что может Атмел Мега2560 по максиуму?) из-за которой в свое время и начал ваять свою плату и блок расширенного SRAM. Оптимально (дешево, но больше 64кб) получилось на микросхемах в 512кбайт. Тут в проектах, где-то есть тема, в которой описан процесс расширения SRAM и что и как надо модифицировать в работе ИДЕ (в основном новый файл линковки) чтобы использовать всю память напрямую из программ, в т.ч. и в виде массивов.
В процессе разработки и отладки сего чуда, пришел к пониманию, что вполне можно сделать свою небольшую ОС, которая будет сидеть частично в конце программного блока флеш и занимать блок "загрузчика" с тем, чтобы решить вопрос "оверлейного загрузчика программ с SD картридера. При этом, вполне можно перенести массив векторов прерываний в "верхнюю флеш" (Атмел - позволяет) и реализовать доступ к работе с устройствами "типовыми драйверами ОС", при необходимости с подключением блоков обработки прерываний из программ, по типу "софтовая реализация функции".
А реализовав такую ОС, в приложении к имеющейся у меня библиотеке "автоматного программирования", в совокупности с реализацией "канального взаимодействия" а-ля АДА, Go .. вопрос диспетчера задач и реализации горутин становился "никчемным" или сильно упрощался. Но .. применять 0-таймер для служб ОС - посчитал слишком накладным, т.к. только он в совокупности с таймером 1, способен управлять 13-м пином одновременно, позволяя программировать "пакеты импульсов"...
В общем, подгружать куски ПО во флеш, так же как это делает загрузчик - вполне реально, "хоть откуда". Флеш стирается блоками по 256байт, так что "тереть" рабочие участки в общем-то нет никакой необходимости. Но, для этого требуется переработка файла линковки, чтобы он при сборке компилированного куска (оверлея) настраивал его во-первых с адреса, кратного 256, а во вторых фиксировал его размер кратно размеру страницы флеш.
Технически, это ничего сложного из себя не представляет, а поскольку SD читается блоками по 512байт (сектор), то даже родного ОЗУ для такой работы у Мега2560 вполне достаточно. Вопрос только в том, "кто бы это все сделал", который как обычно упирается в другой: "а зачем?"
P.S.
Вопрос загрузки программ в SRAM "целиком" и их исполнения не стоит совсем, т.к. этой самой "срам" кот наплакал, а во-вторых Гарвардская архитектура не позволит исполнять из срама ничего от слова совсем, только если не делать некий интерпретатор (а-ля JS) со своим "байт-кодом".
Только опять же: "нафига козе баян?"