嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的EDA研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。

       有两种主要情况使嵌入式开发人员不会在处理器上使用 MPU;一个简单的项目和一个性能关键的项目。第一个很简单;一个非常简单的应用程序可能无法从使用 MPU 所增加的复杂性中受益。无需设置涵盖闪存、RAM 和外围设备的 MPU 区域,你的闪烁演示可能就可以完成。

       如果你需要处理器的每一滴性能,那么使用 MPU 的开销可能会让你大吃一惊。使用 MPU 的 FreeRTOS 端口中的任务上下文切换例程更长,因为每个任务都有多个 MPU 区域需要编程。当新任务被上下文切换时,RTOS 必须对每个任务 MPU 区域进行编程,并执行其通常的职责,例如堆叠使用过的寄存器。此外,由于内核代码和数据受 MPU 保护,因此所有内核函数调用都必须受包装函数保护。

       这个包装函数只是在调用内核函数之前提升处理器的特权级别,然后恢复特权并返回。这不仅会增加运行代码所需的时间,而且可能会增加任务所需的堆栈大小。任务的控制块还必须在其 MPU 区域上存储信息,并且在某些安全关键 RTOS(如 SAFERTOS)的情况下,也将存储此数据的镜像。

       你还应该警惕,使用 MPU 可能很困难,有时甚至令人沮丧。嵌入式开发人员设计应用程序需要更多时间,因为必须为每个任务考虑 MPU 区域。这些区域中的错误,例如不正确的区域长度、权限或未正确链接应用程序的数据,可能会导致调试混乱。