autosar MPU实现内存分区的底层原理

        MPU(memmory protection uint)内存保护单元。不同mcu的mpu单元的实现和配置大同小异。mpu 一般包含多组region 配置寄存器,每组region 寄存器,可以配置起始地址,结束地址以及访问权限。芯片的用户模式有supervisor 和 user两种模式,以它们为基础,加上读、写、执行等操作,可以组成UR UW UX SR SW SX等访问权限(U user,S supervisor,R read,W write,X excute)。假设region0 定义起始地址为addr0 结束地址为addr1,访问权限为UR SR SW 。在mpu使能之后,如果某时mcu运行在user模式下,可以读取地址在addr0 到 addr1 之间region0 上的数据,但是不可以写入,也不能执行在region0 对应的代码;如果某时运行supervisor模式下,则可以读取、写入region0上的数据,但不可以执行该区域上面的代码。一旦region0 在user 模式下被写入,被执行或在supervisor 模式被执行等情况发生,mpu能够检出程序的操作超出了它当前模式对应的权限,从而触发mpu的异常。

         那么在autosar 中,内存分区是如何通过芯片mpu实现的呢?在autosar 中,内存的分区是根据application 来划分的,一般情况下,有几个application 就有几个内存分区。

        首先,我们以最简单的两个application 为例,如下所示,该程序分为成了trusted 和 untrusted 两个application。trusted 程序在supervisor 模式下执行,该区域权限是SR SX,untrusted 程序在user 模式下执行,对应的访问权限就是UR UX。我们需要将这两个application 对应的首末地址和访问权限配置到MPU的两组region 寄存器中,然后使能MPU。就是可以实现两个applicaiton rom空间的相互隔离。比如在trusted application 程序执行时,如果非法越界访问了untrusted 的程序,就会引起MPU异常,反之亦然。

Application trustedSR SX
Application untrustedUR UX

        然而,如果我们autosar 程序如果applicaiton 数量大于两个呢?如下所示,四个applicaiton 分别是trusted ,和untrusted application 1~3。如果仅仅靠user mode 和 supervisor mode无法将它们隔离开来。

Application trusted
Application 1
Application 2
Application 3

        这里我们就需要动态的MPU配置。什么意思呢,就是我们的MPU不是一成不变的,对于不同的application,会有不同的MPU的配置参数,同一个region,在不同的application下,可能会有不同的访问权限。OS会在OS Application切换时对MPU相关寄存器进行重新初始化,并设置为即将切换到的OS Application权限。

Application mpu configMPU config 1MPU config2MPU config3
Application trustedSR SX SR SXSR SX
Application 1UR UX  
Application 2 UR UX 
Application 3  UR UX

        以上表为例,我们MPU 分出4组region 分别记录四个application 对应的代码的范围和访问权限。根据需要,表中列出了,三种MPU的配置参数,分别时MPU config1~3。tusted application 一般运行在supervisor mode下,可以使用上表中MPU 任意一个MPU 配置。对于untrusted application 1~3  则分别对应着MPU config 1~3,即这三个application 对应的MPU不一样,需要在application 切换时,动态调整,重新配置。例如MPU config1 表示,application 1 对application 1 这个范围内的程序,有读和执行的权限,而对于application 2 和 3 范围内的程序则没有这方面的权限。当applicaiton 1切换到application2时,会提前将application2 对应的MPU 配置参数MPU config2 写入到mpu 相关的配置寄存器。切换到application2后,application2 对应分region 变成了UR UX,原来的applicaiton1 对应的region 的权限少了UR 和 UX,因此当前程序只能访问application2 对应区域,访问其他application 对应的区域就会导致MPU产生异常。

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AUTOSAR是一套用于汽车电子系统开发的标准架构。其中的MPU(Memory Protection Unit,内存保护单元)模块是用于对汽车电子控制单元(ECU)中的内存进行保护的重要组成部分。 MPU的主要原理可以概括为以下几点: 1. 内存划分:MPU通过将内存划分为不同的区域来实现保护。每个区域可以配置为只读、读写或禁止访问。这样可以确保不同的软件模块只能访问其允许的内存区域,而不会越界访问其他模块的内存。 2. 访问权限:MPU允许根据需要为每个内存区域分配不同的访问权限。例如,可以为某些内存区域配置只读权限,以防止其中的数据被意外修改。这有助于提高软件的可靠性和安全性。 3. 中断处理:MPU还可以配置用于中断处理的内存区域。这些区域可以配置为只读或读写,以确保中断处理程序只能访问其允许的数据,从而提高系统的可靠性。 4. 错误处理:MPU还具有内存错误检测和处理的功能。如果发生内存错误,MPU可以检测到并采取相应的行动,例如触发中断或执行容错操作。这有助于维护系统的稳定性和可靠性。 总之,AUTOSAR MPU的原理在于通过内存划分、访问权限控制、中断处理和错误处理等机制,保护汽车电子系统中的内存,提高系统的可靠性、安全性和容错性。这样可以确保不同的软件模块之间的互相隔离和保护,从而提高整个系统的性能和可信度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值