Комментарии 11
Отдельная шина для кода и отдельная шина для данных (Гарвардская архитектура).
Так и не понял, как передать управлению коду в RAM именно на таком процессоре (разные физические шины), скажем AVR.
Никак! Вот это:
Однако иной раз надо разместить Си-функцию в RAM памяти. То есть реализовать Принстонскую архитектуру компьютера.
звучит, конечно, не однозначно. Как будто можно аппаратную архитектуру поменять программно, но нет! Если у вас в железе Гарвардская архитектура, реализовать Принстонскую ни как не получится, без замены процессора (микросхемы).
Тема интересная, но статья похожа на студенческую лабу где студент поработал с источниками но так и не понял сам. Как туториал для конкретного ядра - сойдет. Но название явно не соответствует содержанию. В классической гарвардской архитектуре код из ОЗУ выполнить нельзя. И тут автор схитрил и взял ядро cortex-m (как бы случайно) с "модифицированной гарвардской архитектурой". Но об этом нюансе ни слова. В связи с этим было бы интересно увидеть ответ автора на первый комментарий/вопрос - а что вы скажите про авр или пик?
На авр есть SPM. Можно зарезервировать область под программу и выполнять ее оттуда, перед этим записывая ее в память. На МК с MMU все проще, там можно сделать mmap в IRAM.
Об ABI, выполнении программ на МК почитайте мои статьи про хакинг телефона.
Поскольку SPM можно использовать только в адресном пространстве загрузчика, есть хак с джампом как в OptiBoot.
Честно сказать не понял как связана инструкция SPM в AVR с возможностью запуска кода из озу. Понял лишь что если это возможно, то это опять хак, свойственный конкретной платформе.
Статья же вроде как прямо с заголовка определяет применимость подхода ко всем мк. И без всяких ремарок и допущений говорите о том что можно чуть ли не изменить архитектуру парой пасов линкера. Назвали бы что то вроде: Запуск кода из озу мк cortex-m в общем то и вопросов бы не возникло (нет они бы конечно возникли в силу минимального пояснения, но это туториал, подробности можно и загуглить, главное задан вектор).
А потом условная Алиса начинает выдавать "молодым специалистам" что мол архитектура это условности, вот вам несколько строк в линкере и одно превращается в другое.
За предложение ознакомится с вашими статьями спасибо, постараюсь найти время, за одно окунуться в ностальгию, все реже появляется необходимость в BareMetal коде.
Статья же вроде как прямо с заголовка определяет применимость подхода ко всем мк
ну, если ВСЕ МК - ARM Cortex M, то да
Я не автор этой статьи. Я просто рассказал как можно динамически загрузить и выполнить программу на МК с Гарвардской архитектурой если есть возможность записи в флэш :)
SPM вроде как в флеш пишет - соглашусь, что это вариант для динамического изменения кода, но достаточно специализированный (использование в своих целях - скорее хак) и небыстрый (если, скажем, для JIT запользовать). И да, Принстон из Гарварда она не делает - код/данные для обычных инструкций всё равно разделены, просто есть лазейка для копирования.
ARM Cortex-M: Исполнение кода из RAM памяти