我需要为ARM Cortex M3 / M4处理器实现一个带MPU的多任务系统。
在该系统中,将有一个内核管理特权模式下的资源和Unprivilege模式下的用户应用程序。我想从其余部分和系统资源中分离User Application。
因此,当我切换到新任务时,我将发布用户应用程序的Stack and Global Memory区域。 使用ARM Cortex MPU寄存器可以轻松完成。
但问题在于,当发生上下文切换时,我还需要使用内核的一些全局变量。
例如,我在上下文切换期间调用一个函数来在PendSV Handler中获取下一个TCB,但是任务池超出用户应用程序区域并且它受到用户应用程序的保护。
所以,似乎应该有平衡,对吗?什么是安全有效的记忆保护策略?
在调用Yield函数时,可以在上下文切换之前提高Privilieged模式,但这似乎不是一个好的解决方案。
该问题的一般策略是什么?
答案 0 :(得分:2)
也许您可以查看现有的开源实现,看看在那里做出了哪些设计决策。例如FreeRTOS具有Cortex-M MPU支持here;它可能无法直接回答您的确切问题,您可能需要检查源代码以获取完整的详细信息。
可能将数据存储器划分为三个区域 - 用户,内核和共享。