Как стать автором
Поиск
Написать публикацию
Обновить

ARM Cortex-M: Исполнение кода из RAM памяти

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.9K
Всего голосов 14: ↑11 и ↓3+11
Комментарии11

Комментарии 11

Отдельная шина для кода и отдельная шина для данных (Гарвардская архитектура).

Так и не понял, как передать управлению коду в RAM именно на таком процессоре (разные физические шины), скажем AVR.

Никак! Вот это:

Однако иной раз надо разместить Си-функцию в RAM памяти. То есть реализовать Принстонскую архитектуру компьютера.

звучит, конечно, не однозначно. Как будто можно аппаратную архитектуру поменять программно, но нет! Если у вас в железе Гарвардская архитектура, реализовать Принстонскую ни как не получится, без замены процессора (микросхемы).

Это похоже был мягкий намек автору на кривость формулировки. Потому что архитектура процессора она в принципе "в железе", и скрипт линкера ее "реализовать" не поможет.

Тема интересная, но статья похожа на студенческую лабу где студент поработал с источниками но так и не понял сам. Как туториал для конкретного ядра - сойдет. Но название явно не соответствует содержанию. В классической гарвардской архитектуре код из ОЗУ выполнить нельзя. И тут автор схитрил и взял ядро cortex-m (как бы случайно) с "модифицированной гарвардской архитектурой". Но об этом нюансе ни слова. В связи с этим было бы интересно увидеть ответ автора на первый комментарий/вопрос - а что вы скажите про авр или пик?

На авр есть SPM. Можно зарезервировать область под программу и выполнять ее оттуда, перед этим записывая ее в память. На МК с MMU все проще, там можно сделать mmap в IRAM.

Об ABI, выполнении программ на МК почитайте мои статьи про хакинг телефона.

Поскольку SPM можно использовать только в адресном пространстве загрузчика, есть хак с джампом как в OptiBoot.

Честно сказать не понял как связана инструкция SPM в AVR с возможностью запуска кода из озу. Понял лишь что если это возможно, то это опять хак, свойственный конкретной платформе.

Статья же вроде как прямо с заголовка определяет применимость подхода ко всем мк. И без всяких ремарок и допущений говорите о том что можно чуть ли не изменить архитектуру парой пасов линкера. Назвали бы что то вроде: Запуск кода из озу мк cortex-m в общем то и вопросов бы не возникло (нет они бы конечно возникли в силу минимального пояснения, но это туториал, подробности можно и загуглить, главное задан вектор).

А потом условная Алиса начинает выдавать "молодым специалистам" что мол архитектура это условности, вот вам несколько строк в линкере и одно превращается в другое.

За предложение ознакомится с вашими статьями спасибо, постараюсь найти время, за одно окунуться в ностальгию, все реже появляется необходимость в BareMetal коде.

Статья же вроде как прямо с заголовка определяет применимость подхода ко всем мк

ну, если ВСЕ МК - ARM Cortex M, то да

Я не автор этой статьи. Я просто рассказал как можно динамически загрузить и выполнить программу на МК с Гарвардской архитектурой если есть возможность записи в флэш :)

Извините, был не внимателен, не посмотрел на ник.

SPM вроде как в флеш пишет - соглашусь, что это вариант для динамического изменения кода, но достаточно специализированный (использование в своих целях - скорее хак) и небыстрый (если, скажем, для JIT запользовать). И да, Принстон из Гарварда она не делает - код/данные для обычных инструкций всё равно разделены, просто есть лазейка для копирования.

Да я некорректно истолковал комментарий. Я думал что SpLab хочет посмотреть как можно запускать программы на AVR, поэтому ответил без пояснения)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации