
MPU的主要作用是实施存储器的保护,它能够在系统或程序出现异常而非正常地访问不应该访问的存储空间时,通过触发异常中断而达到提高系统可靠性的目的。% r$ ~2 m$ }; s" }2 c9 } 9 Z% R: `7 e* L2 |0 A; N 所谓非正常地访问不应该访问的存储空间,最常见的现象是存储器访问越界,更具体的表现可以是数组溢出、堆栈溢出、动态存储器分配失败等情况;另一种常见的现象是程序跑飞了。 出现存储器访问越界的原因都是因为程序设计的不当所造成,即通常所说的Bug。与具有操作系统的大型程序系统相比,在MCU这种小型系统中出现这种严重的设计不当的比率相对小很多;另一方面,如果在程序的实际运行中真的出现了存储器访问越界的状况,MCU这种小型系统是无法实现在线处理的,而大型系统可以通过隔离出错部分、清除出错任务等手段进行在线补救。 而对于程序跑飞的状况,在MCU中已经有十分有效的看门狗做保障(STM32中还有2个互相独立的看门狗),虽不能覆盖100%的故障源,但实践证明这种技术已经可以应付绝大多数的需求。2 {1 `/ D3 U0 o9 \2 D 5 d/ L- `" Y+ x9 f, K+ E 从硬件的实现角度讲,任何存储器保护或存储器管理单元(MPU or MMU)都是非常耗费芯片面积的,直接结果就是芯片的成本增加。; | U. H, u }; c- q2 E0 { 1 p; c' l# \3 R z 基于上述分析,我认为没有在STM32这种存储器空间较小的、面向MCU应用的芯片中植入MPU功能,是一个非常明智的选择。1 R2 F& _ |, v/ B, m 5 z9 m) x" E0 Y3 D, C 出处:香水城 |