当前位置: 首页 > 网络应用技术

MPU:Hongmeng Light内核的任务堆叠的溢出

时间:2023-03-08 18:28:11 网络应用技术

  摘要:MPU(内存保护单元,内存保护单元)映射内存映射到一系列内存区域,定义了维多利亚,大小,访问权限和记忆熟悉的记忆区域的信息。

  MPU(内存保护单元,内存保护单元)将内存映射到一系列内存区域,定义维多利亚,尺寸,访问权限和这些内存区域的知名信息。MPU支持独立的属性设置到每个内存区域,从而允许内存要重量的区域,并且可以导出内存属性。对于MPU的详细信息,您可以参考官方数据站点。例如,Cortex-M3的文档位置是:https://developer.arm.com/documentation/dui0552/acortex-m3-memary-protection-initesce-

  在Hongmeng Light内核中,MPU用于溢出任务堆栈。本文主要分析了Hongmeng Light内核MPU模块的源代码。本文中涉及的源代码以OpenHarmonyLiteos-M为例。所有这些都可以在开源网站https://gitee.com/openharmony/kernel_liteos_m.mm.m.hong light内核支持MPU的ARM Cortex-M芯片架构中获得。代码是相同的。以kernelcharmcortex-m4gcclos_mpu.c为例。

  在文件kernelchincludelos_mpu.h.h.⑴中定义MPU相关结构,定义MPU内存区域的访问权限。相关的访问权限可以访问官方网站https://developer.arm.com/documentation/dui0552/a/cortex-m3- exipherals/emore protection-access-access-access-access-permission-permission-permission-torsributes,尤其是表表4.47。AP编码知道更多。的定义MPU是否可以执行枚举,并定义MPU内存区域是否可以共享属性枚举,并定义内存区域的类型属性。

  MPU外围设备的一些宏定义由HalDrivers(例如Cortex-M4)定义,该定义位于driverscmsiscludecore_cm4.h.MPU结构上的定义如下。有关MPU寄存器的详细信息,您可以访问https://developer.arm.com/documentation/dui0552/a/cortex- exipherals/optional-protection-mit以查看表4.3888888888888。MPU寄存器摘要。MPU的以下寄存器将参与说明代码。

  此外,MPU支持8个内存区域,KernelCharmCortex-M4GCCLOS_MPU.C文件的定义如下:

  MPU常用的操作功能包括MPUHALMPUENABLE,MPUHALMPUDISABLE,设置指定的内存区域属性HALMPUSETRIGION,由残疾存储器区域指定的HALMPUDISAINE,并获得未使用的存储区域编号。

  Halmpuenable此函数启用MPU函数。在MPU控制寄存器MPU控制寄存器的末尾,通过分配与寄存器相关的位来启用MPU。详细阅读寄存器的寄存器https://developer.arm.arm.com/documentation/duii05552/a/cortex-m3-外围设备/可选保护mpu-control-register.e代码以使记忆伪造abnormal。和其他手臂指示。

  Halmpudisable代码非常简单,并且将MPU控制寄存器分配给0以禁用MPU函数。

  在执行Halmpudisableregion函数之后,不再在指定的内存区域执行MPU保护,并且未执行学校测试参数的合法参数。U不能同时禁用未使用的MPU存储区域。(((3)获取MPU的类型,您可以访问https://developer.arm.com/documentation/dui0552/a/cortex-m3- exipherals/optional-protection-protection-mpu-type-register。

  当MPU数据存储区域的数量(MPU DatareGions)不是空的时,代码更新MPU存储器区号寄存器(MPU区域编号寄存器)的执行是指定的内存区号。有关详细信息,请参阅https://developer.com/documentation/dui0552/a/cortex-m3- outipherals/optional-memory-protection-unit/mpu- region-region-region-number-registerthen执行代代码以更新代代码MPU内存区域属性和尺寸寄存器(MPU区域属性和size寄存器),请参阅https://developer.arm.com/documentation/duii0552/a/cortex-periphery-periphery-mphery-mphery-mpherotection-mpherotection-mputhection-mpu-mpu-unit/mpu-region-unit/mpu-region-attribute-unit-unit-AD-SIZE-REGISTER。全局变量阵列中指定的区号设置为未使用0。

  HALMPUSETRIGION函数设置指定内存区域的属性。执行参数的合法性验证。.h呼叫函数halmpuencodesize根据内存区域的实际尺寸值获得编码大小。该值将分配给MPU属性和大小寄存器的大小位。域判断存储区域的内存区域要与内存区域的大小对齐,否则将返回LOS_NOK。

  计算相关基础地址寄存器(MPU区域基础地址Register)的基础地址寄存器的数据,您可以访问https://developer.arm.com/documentation/dui0552/a/cortex-perpherals/mememerly-prontonitit/mpu-region-base-address-register了解更多。大计算属性和大小寄存器的值。如果使用指定的内存区域,请直接返回los_nok。相关设置MPU相关寄存器并标记内存区域。以下:

  HALMPUENCODESIZE函数根据内存区域的实际尺寸获得大小属性值。相应的计算公式为:(在字节中大小)= 2^(size+1)。有关详细信息,您可以访问表4.44。MPU属性和大小寄存器的示例大小。Field值。32Bytes对应于4,1kb对应5,...,4GB对应31。

  ⑴表示存储区域的大小不能大于4GB,然后确定内存是否相对于32个字节。右侧2点2,然后整个周期,然后执行一个 - 一个 - 右循环,并且大小属性的大小增加1。

  HALMPUGETRASR计算大小属性和配置参数的值以及寄存器的值。ectureconfifutions accepts clastirsions op AP(访问权限),然后计算属性和大小寄存器的值,然后最终执行分配给登记册。

  本文分享了自华为云社区以来的作者:Zhushy。