Почему два вектора таблицы адресов на ARM? - PullRequest
9 голосов
/ 09 февраля 2012

В архитектуре ARM есть один младший векторный адрес 0x0 и высокий векторный адрес 0xFFFF0000. Мне было интересно, зачем нужны два векторных адреса? В микропроцессорах и микроконтроллерах Intel есть один векторный адрес.

Есть ли какая-то конкретная причина иметь 2 векторных адреса?

Ответы [ 2 ]

8 голосов
/ 10 февраля 2012

Некоторые семейства микроконтроллеров имеют от одного до нескольких различных начальных адресов и / или используют один и тот же адрес и переключают декодирование адресов на входе и выходе, основываясь на выводах ремешка, так что вы можете загружаться с одного загрузчика, созданного, например, поставщиком,или загрузчик пользователей или пользовательское приложение.(позволяя вам восстановить то, что обычно было бы кирпичной системой).

Вы можете представить себе то же самое.Подумайте о том, как работают эти микроконтроллеры, выполняя работу вне ядра, чтобы изменить флэш-банк, используемый для загрузки.Используя этот пин-код на ядре, вы можете иметь альтернативный загрузчик по другому адресу, этот загрузчик можно использовать для перезаписи / управления / разработки / восстановления основного приложения.

Вы также можете избежатьrom / ram векторная вещь адреса.скажем, например, вы загружаетесь с флэш-памяти на старшем векторе и имеете значение ram в 0, затем вы можете загрузить программу в ram или, по крайней мере, таблицу векторов, специфичных для времени выполнения, а затем переключить бит (может потребоваться отскочить от батута, чтобы попасть тудаЯ не помню, чтобы мы не использовали старший вектор в нашей микросхеме.

Не говорю, что именно поэтому ARM сделал это, но если ничего другого, это делает простую схему спасения для поставщиков.некоторые схемы спасения поставщиков или альтернативные методы загрузки слишком сложны.Мне бы очень хотелось, чтобы рука и другие имели несколько, по крайней мере, два сигнала, дающих четыре адреса: 0x00000000, 0x40000000, 0x80000000, 0xC0000000, что-то подобное или 0x00000000, 0x80000000, 0xFFFF0000, 0xFFFF8000.Сделайте что-то подобное на нескольких ядрах, особенно на cortex-m, и вы можете увидеть, что производители чипов начнут использовать это вместо своих собственных схем, и это будет меньше проблем при переходе от одного чипа к другому между поставщиками илив рамках одной и той же линейки продуктов поставщиков.

2 голосов
/ 30 марта 2013

Как говорит dwelch , это позволяет избежать аппаратного декодирования адресов.Особенно важен случай загрузки с Flash / ROM и переключения на запуск с RAM .Хотя это наиболее важно без MMU.

Дешевая защита памяти

В ОС реального времени , такой как vxWorks По крайней мере до версии 4 весь код выполнялся на системном уровне и без MMU.Это минимизирует задержку.Однако ваш физический код должен соответствовать либо низкому, либо старшему адресу.Как правило, младший адрес является наиболее удобным и типичным SOC аппаратное обеспечение имеет чип, выбирающий для внешней памяти, позволяющий гибкую компоновку памяти.Однако, если ваша таблица векторов на 0x0 имеет некоторые недостатки.Наиболее очевидным является использование указателя NULL.Некоторое оборудование позволяет только для чтения защита диапазона адресов с помощью SOC функциональных возможностей;генерирует BUS FAULT , когда происходит запись по этим адресам.Если вы настолько неудачливы, что у вас нет этого типа SOC , и у вас нет Архитектура системы защиты памяти ( Глава B5.1 ARM ARM), тогда переназначение таблицы векторов в верхнюю память может быть хорошей вещью;в противном случае одна запись NULL может отключить вашу систему.

Независимость набора инструкций

Также обратите внимание, что ARM ARM говорит, что нет инструкции ARM, которая зависит оттаблица высоких или низких векторов.Это дополнительный регистр сопроцессора, который есть у большинства, если не у всех, ARM.Это, вероятно, не так полезно в современных системах ARM, где мы используем MMU.Даже у ARM есть некоторый багаж;это все еще полезно в случае или глубоко встроенных систем.С активным MMU, вероятно, в этой функции нет необходимости, если только секции (1 МБ) не используются для минимизации давления TLB.

Версии TrustZone

На более новых процессорах ARM с TrustZone контроллеров, на самом деле есть три таблицы векторов.Векторная таблица secure world похожа на традиционную версию памяти high / low . режим монитора и небезопасный мир векторные таблицы устанавливаются через регистр сопроцессора и могут быть размещены в любом месте в памяти.

...