Комментарии 10
И еще (в качестве пожелания) — не увидел в статье есть ли (и если есть, то какая именно и как проявляется) зависимость включенного режима кеширования и применения инструкций эксклюзивного доступа (LDREX/STREX).
Правда, есть некоторые сомнения в том, что на реальных «микроконтроллерных» проектах задействование кеша приведет к настолько сильному увеличению производительности, что перекроет издержки. Впрочем, задачи бываю разные.
Согласен, все зависит от задачи. Я, кстати, хоть и рассказываю про микроконтроллеры ARM, а забыл упомянуть в каких сериях из линейки Cortex-M вообще есть кэш. Восполню это в комментарии. На сайте ARM есть сравнительная таблица «Cortex-M comparison table». Из нее видно, что D-Cache может быть только у Cortex-M7 и Cortex-M55, а у Cortex-M35P только I-Cache. А это же самые старшие процессоры из Cortex-M. У остальных моделей кэшей нет. Так что если кто-то выбирает какой-нибудь Cortex-M7 под свою задачу (а не Cortex-M0 или Cortex-M4), наверное что-то немаленькое запустить хочет, а там уже и кэш подключить можно.
И еще (в качестве пожелания) — не увидел в статье есть ли (и если есть, то какая именно и как проявляется) зависимость включенного режима кеширования и применения инструкций эксклюзивного доступа (LDREX/STREX).
Спасибо, действительно, в статье про это нет. Думаю что либо в комментарии, либо в будущем в статьях постараемся этот вопрос затронуть.
Смотрел осциллографом, а-ля ZX-Spectrum по бордюру.
Но, внутренний шум выше, АЦП начинает врать минимум на 1 бит больше.
Впрочем, признаюсь — у меня Cortex-M закончился на M4. Дальше были уже А-шки. Потому про возможности M7/H7 я мало что знаю. Отчасти потому и удивился и статье и комментарию чуть выше. Впрочем, кто его знает что понадобится завтра… Хотя… Скорее всего там, где мне не будет хватать M4-ого все так же останется A-шка. Мне кажется, что прикладное ПО лучше пишут прикладные программисты. Я слишком испорчен нехваткой ресурсов — в результате все мои прикладные вещи получаются немного странными… Хоть и работающими.
Правда, есть некоторые сомнения в том, что на реальных «микроконтроллерных» проектах задействование кеша приведет к настолько сильному увеличению производительности, что перекроет издержки.
У меня на столе ARM Cortex M7. Можно включить iCache на ядре.
вызвать
void SCB_EnableICache (void)
У меня на частоте ядра 205 MHz
При включенном iCachе суперцикл делает 28156 итераций в сек
При отключенном iCachе суперцикл делает 13680 итераций в сек
28156.0/13680.0 = 2.05818713
Кэш в два раза увеличивает производительность.
В контроллере MPU поддерживается задание регионов памяти. Конкретно в архитектуре ARMV7-M может быть до 16 регионов. Для этих регионов можно независимо устанавливать: стартовый адрес, размер, права доступа (read/write/execute и т.д.), атрибуты — TEX, cacheable, bufferable, shareable, а так же и другие параметры.
Как можно прочитать настройки всех 16-ти регионов MPU, просто анализируя регистры MPU? Там же нет отдельного регистра на каждый регион. Как понять, что настройки в самом деле применились корректно?
Как будет вести себя MPU, если два региона памяти нахлестываются друг на друга (пересекаются)?
Иными словами, стартовый адрес региона памяти должен быть выровнен на его собственный размер. Если у вас, к примеру, регион 16 Кб, то выравнивать нужно на 16 Кб. Если регион памяти 64 Кб, то выравниваем на 64 Кб. И так далее. Если этого не сделать, то MPU может автоматически “обрезать” регион под размер соответствующий его стартовому адресу (проверено на практике).
Благодарю, Вас @alexkalmuk. Это мне помогло завести MPU на ARM Corteх-M7.
О кэшах в микроконтроллерах ARM