2.3.3. Режимы работы ЦПУ
Несмотря на то, что процессор Cortex разрабатывался как быстродействующее, простое в использовании и с малым числом логических элементов микроконтроллерное ядро, в нем была учтена поддержка ОСРВ. Процессор Cortex поддерживает два режима работы: режим Thread (или потоковый режим) и режим Handler (или режим обработчика). ЦПУ запускается в режиме Thread при непрерываемом, фоновом выполнении инструкций и переключается в режим Handler при обработке исключительных ситуаций. Кроме того, ЦПУ Cortex может выполнять код программы в привилегированном или непривилегированном режиме. В привилегированном режиме, ЦПУ имеет доступ ко всему набору инструкций, а в непривилегированном режиме некоторые инструкции отключаются (например, инструкции MRS и MSR, осуществляющие доступ к регистру xPSR и его битовым группам). В этом режиме также отключается доступ к большинству регистров управления системными ресурсами процессора Cortex. Также можно сконфигурировать использование стека. Основной стек (R13) может использоваться в обоих режимах Thread и Handler. Альтернативно, режим Handler можно настроить на использование стека процесса (банковый регистр R13).
Процессор Cortex-M3 может использоваться в обычном режиме ('flat'), а также поддерживает операционные системы реального времени. У него предусмотрены режимы Handler и Thread с возможностями выбора используемого стека (основной стек или стек процесса) и привилегированного доступа к регистрам управления системными ресурсами Cortex
|
Операции (после сброса - привилегированные) |
Стек (после сброса - основной стек) |
Режимы (Thread) |
Handler - обработка исключительных ситуаций |
Привилегированное исполнение Полное управление |
Основной стек используется ОС и при обработке исключительных ситуаций |
Thread - исключительные ситуации не обрабатываются - обычное выполнение кода |
Привилегированные/ непривилегированные |
Основной стек или стек процесса |
Сразу после сброса процессор Cortex запускается в конфигурации 'flat'. В обоих режимах, Thread и Handler, инструкции выполняются в привилегированном режиме, т.о. какие-либо ограничения на доступ к процессорным ресурсам отсутствуют. В режимах Thread и Handler используется основной стек. Чтобы начать выполнение инструкций, достаточно указать процессору вектор сброса и стартовый адрес стека, после чего можно выполнять Си-код программы. Однако, если используется ОСРВ или выполняется разработка критичного к безопасности приложения, процессор может использоваться в более изощренной конфигурации: режим Handler (используется при обработке исключительных ситуаций и операционными системами реального времени) с привилегированными операциями и использованием основного стека и режим Thread при исполнении прикладного кода с непривилегированным доступом и использованием стека процесса. При таком подходе, весь код программы разделяется на системный и прикладной и, поэтому, ошибки в прикладном коде не вызывают сбоев ОСРВ.
|