0

我需要为 ARM Cortex M3/M4 处理器实现一个带有 MPU 的多任务系统。

在该系统中,将有一个内核在特权模式下管理资源,在非特权模式下管理用户应用程序。我想将用户应用程序与其余部分和系统资源分开。

因此,当我切换到新任务时,我正在释放用户应用程序的堆栈和全局内存区域。它可以使用 ARM Cortex MPU 寄存器轻松完成。

但问题是,当发生上下文切换时,我还需要使用内核的一些全局变量。

例如,我在上下文切换期间调用一个函数来获取 PendSV 处理程序中的下一个 TCB,但任务池不在用户应用程序区域,并且它受到用户应用程序的保护。

所以,看起来应该是平衡的,对吧?有哪些安全有效的内存保护策略?

当调用 Yield 函数时,可以在上下文切换之前提升特权模式,但这似乎不是一个好的解决方案。

关于这个问题的一般策略是什么?

4

1 回答 1

2

也许您可能会看一下现有的开源实现,看看那里做出了哪些设计决策。例如 FreeRTOS 在这里有 Cortex-M MPU 支持;它可能无法直接回答您的确切问题,您可能必须检查源代码才能获得完整的详细信息。

可能将数据内存划分为三个区域 - 用户、内核和共享。

于 2016-10-22T07:35:19.360 回答