2016-07-08 14 views
0

На процессорах Cortex-M с MPU (давайте использовать Cortex-M4, чтобы быть конкретным, но я уверен, что ответ такой же, например, для M3), в каком режиме привилегий выполняется стекирование аппаратного исключения в w.r.t MPU?Являются ли исключения сложными аппаратными средствами Cortex-M в режиме потока или обработчика?

Предположим, что я работаю в режиме непривилегированного потока, используя стек процесса (PSP), при этом MPU настроен на прием записей только в пределах определенной области (например, процесс пользовательского режима). Когда возникает исключение, до выполнения обработчиком (в режиме обработчика), аппаратные стеки регистрируют r0-r3, lr, pc и т. Д. На PSP. Это также происходит в режиме непривилегированного потока?

В частности, предположим, что процесс устанавливает его в какую-либо произвольную точку в памяти, которую не следует разрешать для записи, приведет ли к сбою исключения в ошибке памяти?

+0

Некоторое уточнение: бит MSTKERR в статусе неисправности MemManage Регистрация (MMFSR) указывает, произошла ли ошибка доступа к памяти во время стекирования для записи исключения. Таким образом, ясно, что во время записи исключений может произойти сбой памяти, но я в основном спрашиваю, обрабатывает ли он обращения к памяти, как если бы он находился в привилегированном или непривилегированном режиме (например, если бит PRIVDEFENA в регистре управления MPU равен 1) – exobrain

ответ

0

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

Итак, если в непривилегированном режиме происходит прерывание, аппаратное обеспечение будет стекать регистры на PSP с использованием существующих настроек MPU, как если бы непривилегированный код выполнял стекирование. Если стекирование нарушит правила MPU, произойдет сбой MemManage, и будет установлено поле MSTKERR регистра состояния MemManage Fault (стр. 4-25 руководства пользователя Cortex-M4)