我需要为 ARM Cortex M3/M4 处理器实现一个带有 MPU 的多任务系统。
在该系统中,将有一个内核在特权模式下管理资源,在非特权模式下管理用户应用程序。我想将用户应用程序与其余部分和系统资源分开。
因此,当我切换到新任务时,我正在释放用户应用程序的堆栈和全局内存区域。它可以使用 ARM Cortex MPU 寄存器轻松完成。
但问题是,当发生上下文切换时,我还需要使用内核的一些全局变量。
例如,我在上下文切换期间调用一个函数来获取 PendSV 处理程序中的下一个 TCB,但任务池不在用户应用程序区域,并且它受到用户应用程序的保护。
所以,看起来应该是平衡的,对吧?有哪些安全有效的内存保护策略?
当调用 Yield 函数时,可以在上下文切换之前提升特权模式,但这似乎不是一个好的解决方案。
关于这个问题的一般策略是什么?