Какой должна быть стратегия защиты памяти для процессора ARM Cortex?
Мне нужно реализовать многозадачную систему с MPU для процессоров ARM Cortex M3/M4.
В этой системе будет ядро, которое управляет ресурсами в привилегированном режиме и пользовательскими приложениями в непривилегированном режиме. И я хочу отделить User Application от остального и системных ресурсов.
Поэтому, когда я переключаюсь на новую задачу, я освобождаю область стека и глобальной памяти пользовательского приложения. Это легко сделать с помощью регистров ARM Cortex MPU.
Но проблема в том, что, когда происходит переключение контекста, мне нужно использовать также некоторые глобальные переменные ядра.
Например, я вызываю функцию для получения следующего TCB в PendSV Handler во время переключения контекста, но пул задач находится вне области пользовательского приложения и защищен от пользовательского приложения.
Так что, похоже, должен быть баланс, верно? Каковы безопасные и эффективные стратегии защиты памяти?
Привилегированный режим может быть активирован перед переключением контекста при вызове функции Yield, но это не кажется хорошим решением.
Каковы общие стратегии по этому вопросу?
1 ответ
Возможно, вы могли бы взглянуть на существующую реализацию с открытым исходным кодом и посмотреть, какие проектные решения были приняты там. FreeRTOS, например, имеет поддержку Cortex-M MPU здесь; он может не ответить на ваш точный вопрос напрямую, и вам, возможно, придется проверить исходный код, чтобы получить полную информацию.
Возможно разделить память данных на три области - пользовательскую, ядерную и общую.