Исключения складываются аппаратным обеспечением Cortex-M в потоковом режиме или в режиме обработчика?

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

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

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


person comradelion    schedule 08.07.2016    source источник
comment
Некоторое пояснение: бит MSTKERR регистра состояния сбоя MemManage (MMFSR) указывает, произошла ли ошибка доступа к памяти во время стекирования для записи об исключении. Итак, ясно, что во время записи исключения может произойти сбой памяти, но я в основном спрашиваю, обрабатывает ли он доступ к памяти, как если бы он был в привилегированном или непривилегированном режиме (например, предполагая, что бит PRIVDEFENA в регистре управления MPU равен 1)   -  person comradelion    schedule 08.07.2016


Ответы (2)


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

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

person comradelion    schedule 11.06.2017

О нарушении правил MPU и MSTKERR / MUNSKERR, когда исключение возникает в непривилегированном ПО и MPU включен:

  • В записи об исключении, если базовый адрес выделенной памяти стека для непривилегированного программного обеспечения НЕ выровнен по размеру его стека, тогда Cortex-M4 генерирует ошибку MemManage и устанавливается поле MSTKERR.

  • При возврате исключения, аналогично, если базовый адрес выделенной памяти стека НЕ ​​выровнен по размеру его стека, тогда Cortex-M4 генерирует ошибку MemManage и устанавливается поле MUNSKERR.

Например, MPU_RASR.SIZE = 0x7 означает, что область MPU для стека имеет размер 2^(7+1) = 256 bytes, тогда MPU_RBAR.ADDR должен быть похож на 0x00000100, 0x00000200 ... и т. Д., В противном случае Cortex-M4 генерирует соответствующую ошибку MemManage сразу при входе / возврате исключения.

Для получения дополнительной информации прочтите раздел 4.5.4 Регистр базового адреса региона MPU в DUI0553 - Общее руководство пользователя устройств Cortex ™ -M4.

person Han    schedule 14.05.2019