《为什么RTOS系统要使用MPU?.docx》由会员分享,可在线阅读,更多相关《为什么RTOS系统要使用MPU?.docx(5页珍藏版)》请在优知文库上搜索。
1、先说明一下MPU,HPU有很多含义,我们常见的有:MPU:MemoryProt.ec1.ionUnit,内存保护单元(本文描述的内容):MPU!MicroprocessorUnit,微处理SS:还有,可能有人会与MPU-6050这类模块联系在一起11所以,大家不要把MPU静混了。为什么要使用MpU?如果你开发的嵌入式项目,因内存溢出,或者内存故障等一些原因,造成了至大经济损失,或者造成了更大事故,你就能体会为什么要使用内存保护单元(MPU)了.在嵌入式系统中使用内存保护单元(MPU)可以在开发早期及时发现因内存而导致的Bug,节省更多开发时间.同时,在项目后期修改Bug,或者增加功能,可以减少
2、修改文档和测试所需的时间。也就是说,使用MPU,会避免因为修改一个bug,而引思多个bug的情况(0生1,1生万物)。MPU如何实现内存保护简单来说就是保护与当前执行的代码不相关的所有数据。拿RTOS任务R和B来说:任务A和B不应相互交互数据,但是存在一个错误,任务A可能会意外地写入任务B偶尔使用的某些数据,不会影响任务A的正确操作。但是,当任务B尝试使用损坏的数据时,任务B可能会造外故障.如果没有配置HPU来阻止任务A写入任务B的数据,则该错误可能需要很长的时间供开发人员跟踪.如果错误很小,或者如果任务B很少使用该数据,则将很难解决该bug.但是,如I果使用了HpiI,则该bug就会及早被发
3、现。在某些体系结构上,MPU甚至可以指助你检测NU1.1.指针引用,因为你可以设置MPU区域以防止非特权代码访问内存0x0.应用程序中一组设计良好的MPU区域可以很好的保护重要的内存区域,以防止出现特定的问题。一个很好的例子是通过在MPU区域的末尾放置辍冲区来防止缓冲区溢出,你还可以将任务推栈放置在任何非特权代码郎无法访问的区域.如果这样做,则每个任务必须使用自己的MPU区域之一来设置自己对自己的堆栈的访问权限.使用MPU的好处无论是操作系统,还是裸机系统,如果没有防止恶意访问错误内存的能力,系统将有重大安全问题,以及安全漏洞的雷区。使用的内存保护单元MPU)有很多优势,HPU通常允许你以特权
4、或非特权模式运行,并使用一组“区域”来确定当前正在执行的代码是否具有访问代码和数据的权限。年个区域都是一个连续的内存块,具有该内存的一组权限,特权和非特权访问与非特权代码的子集相比,特权代码往往可以访问大部分(但不是全部)内存:在整个系统运行时中,这些区域不必相同。MPU区域可以根据每个任务进行修改,每个任务可以具有自己独特的区域集,这些区域在任务移至运行状态时进行配置。这使你可以仅对需要代码和数据的任务设汉访问权限,利用MPU的嵌入式操作系统将在每次上下文切换期间管理每个任务的区域和特权级别。比如设置RTOS两个任务不同的内存保护区域:SystemMemoryTask1ViowofMemor
5、yTask2ViewofMemoryF1.ASHRAMG1.oba1.ReadOn1.yRegionTaskExecuteOn1.yRegionG1.oba1.ExecuteOn1.yRegionTaskReadOn1.yRegionG1.oba1.ExecuteOn1.yRegionTaskExecuteOn1.yRegionG1.oba1.RoadOniyRegionTaskRead-Wr1.teRegion上面这张图,大家都能看慌吧?FIaSh和内存区域被分别设置保护.两个全局保护区域:FIaSh开头、RAH开头:在FInSh中,一部分仅限任务1访问,这部分不能被任务访问:同时,在FIa
6、Sh另外区域,仅限任务2访问,不能被任务】访问。如果这两部分区域被对方访问,则会生成生成MPU故隙.在RAM区域,同一部分区域,一个只设被读,一个只能被写入,如果不按约定操作,同样也会生产MPU故障。什么时候不使用MPU?通常有两种情况可以不使用处理器上的MPU功能:一个简总的项目一个对性能至关重要的项目第1个很检单:一个非常简单的应用程序基本上没必要使用MPU.反而增加了系统的复杂性.不设置内存保护,RAM和外围设备的MPU区域,你自己一眼就能找到bug。第2个对性能要求高的项目,在上下文切换时,设置内存保护,堆栈那些操作,有可镇影响系统的实时性,从而导致系统异常.这个需要结合项目实际情况考虑用,还是不J1.1.MPU功能。