0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS-MPU特性说明

strongerHuang 来源:麦克泰技术 作者:麦克泰技术 2022-06-22 14:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

MPU(Memory Protection Unit,内存保护单元)在 Cortex-M内核中是可选模块,带MPU的微控制器允许内存映射(包括Flash、RAM和外围设备)细分为若干区域,分别给每个区域分配不同的访问权限。

FreeRTOS-MPU是FreeRTOS针对MPU实现的一个安全版本,支持ARMv7-M(Cortex-M3, Cortex-M4 和 Cortex-M7)和ARMv8-M (Cortex-M23和Cortex-M33)内核的微控制器。 针对ARMv7-M的FreeRTOS移植存在两个版本,一个支持MPU,一个不支持。针对ARMv8-M只有一个移植版本,通过编译开关控制是否支持MPU。 FreeRTOS通过将任务分为特权和非特权运行模式和限制对RAM、外设、可执行代码、任务堆栈内存的访问,使得应用更健壮和安全。例如,防止代码从RAM中执行可以获得巨大的好处,因为这样做可以防止许多攻击向量,如缓冲区溢出漏洞或加载到RAM中的恶意代码的执行。 使用MPU必然会使应用程序设计更加复杂,首先必须确定MPU的内存区域限制并向RTOS进行描述,其次MPU限制应用程序任务可以做什么和不能做什么。

MPU的策略

创建一个将每个任务限制在其自己的内存区域的应用程序可能是最安全的,但它也是设计和实现最复杂的。通常最好使用一个MPU来创建一个伪进程和线程模型——允许线程组共享内存空间。例如,创建一个可被可信的第一方代码访问的内存空间,以及一个仅可被不可信的第三方代码访问的内存空间。

FreeRTOS-MPU特性

兼容ARM Cortex-M3和Cortex-M4F标准移植。

可以创建以特权模式或非特权模式运行的任务。非特权任务只能访问它们自己的堆栈和最多三个用户可定义的内存区域(每个任务三个)。用户可定义内存区域是在创建任务时分配给任务的,如果需要,可以在运行时重新配置。

用户可定义的内存区域可以单独参数化。例如,一些区域可能被设置为只读,而另一些区域可能被设置为不可执行(在ARM术语中简称为XN),等等。

非特权任务之间不共享数据内存,但非特权任务可以使用标准队列和信号量机制相互传递消息。可以通过使用用户可定义的内存区域显式地创建共享内存区域,但是不建议这样做。

特权模式任务可以将自己设置为非特权模式,但一旦进入非特权模式,它就不能再将自己设置为特权模式。

FreeRTOS API位于Flash的一个区域,该区域只能在微控制器处于特权模式(调用API函数导致临时切换到特权模式)时访问。

内核维护的数据位于RAM的一个区域,只有在微控制器处于特权模式时才能访问。

系统外设只能在微控制器处于特权模式时访问。任何代码都可以访问标准外设(UART等),但是可以使用可定义的内存区域显式地对其进行保护。

FreeRTOS-MPU可以创建两种类型的任务:

特权任务:特权任务可以访问整个内存映射。特权任务可以使用xTaskCreate()或xTaskCreateRestricted() API函数来创建。

非特权任务:非特权任务只能访问它的堆栈。此外,可以授予它最多三个用户可定义内存区域的访问权限(每个任务三个)。非特权任务只能使用xTaskCreateRestricted()创建。注意,xTaskCreate()不能用于创建非特权任务。

如果一个任务想要使用MPU,那么必须提供以下附加信息:

任务堆栈的地址。

最多三个用户可定义内存区域的开始、大小和访问参数。

因此,创建任务所需的参数总数非常大。为了使创建MPU任务更容易, xTaskCreateRestricted()使用了一个名为xTaskParameters的参数结构体,通常定义为结构常量存储在Flash中,并将该结构地址作为单个参数传递给xTaskCreateRestricted()。

typedef struct xTASK_PARAMTERS{  TaskFunction_t   pvTaskCode;  const signed char *  const pcName;  unsigned short   usStackDepth;  void *       pvParameters;  UBaseType_t    uxPriority;  portSTACK_TYPE * puxStackBuffer;  MemoryRegion_t  xRegions[ portNUM_CONFIGURABLE_REGIONS ];} TaskParameters_t;typedef struct xMEMORY_REGION{  void *pvBaseAddress;      /* 起始地址 */  unsigned long ulLengthInBytes;  /* 长度   */  unsigned long ulParameters;   /* 访问属性 */} MemoryRegion_t;
7d38d546-f1e4-11ec-ba43-dac502259ad0.png

分配给任务的内存区域可以使用vTaskAllocateMPURegions()来更改。

预定义区域和用户可定义区域

区域0~4被内核配置为可用的运行环境,其中:

运行状态的任务可以访问它自己的栈,但是所有其他的RAM只有当运行在特权模式时才可以访问。

只有当在特权模式下运行时,才能访问内核和系统外设所在的Flash内存区域。

Flash内存(除了内核所在的内存)和所有非系统外设(例如UART和模拟输入)都可以被特权和用户模式任务访问。

内核在每次上下文切换期间都会重新配置MPU,因此每个任务可以不同地定义其余三个区域。

区域起始地址和大小限制

MPU硬件强加了两个规则,区域起始地址和大小定义必须遵守:

1、区域大小必须是32字节到4G(包括)之间的二进制的2次方。例如,32字节、64字节、128字节、256字节等等都是有效的区域大小。

2、起始地址必须是区域大小的倍数。例如,一个配置为65536字节长的区域必须从能被65536整除的地址开始。

FreeRTOS-MPUAPI

1、xTaskCreateRestricted()xTaskCreate()的扩展版本,用于创建执行权限受限或者内存访问权限受限的任务。

xTaskCreateRestricted()需要xTaskCreate()使用的所有参数,加上四个额外的参数来定义三个任务特定的MPU区域和一个堆栈缓冲区。如果在普通函数参数列表中使用这个数量的参数会很麻烦,而且可能会大量使用堆栈空间。xTaskCreateRestricted()将一个指向xTaskParameters结构的指针作为其两个参数之一,第二个参数用于向创建的任务传递句柄,与xTaskCreate()参数相同。如果不需要任务句柄, pxCreatedTask可以设置为NULL。

portBASE_TYPE xTaskCreateRestricted( xTaskParameters *pxTaskDefinition,

xTaskHandle *pxCreatedTask );

2、vTaskAllocateMPURegions()定义一组内存保护单元(MPU)区域,供受MPU限制的任务使用。如果创建任务时没有分配MPU区域,可以在运行时使用vTaskAllocateMPURegions()函数重新分配。

void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,

const MemoryRegion_t * const xRegions );

3、特权模式任务可以调用portSWITCH_TO_USER_MODE()将自己设置为非特权模式。在非特权模式下运行的任务不能设置为特权模式。

原文标题:FreeRTOS MPU使系统更健壮!

文章出处:【微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    49

    文章

    8890

    浏览量

    165844
  • MPU
    MPU
    +关注

    关注

    0

    文章

    463

    浏览量

    51588
  • FreeRTOS
    +关注

    关注

    14

    文章

    499

    浏览量

    67281
  • Cortex-M3
    +关注

    关注

    9

    文章

    276

    浏览量

    61842

原文标题:FreeRTOS MPU使系统更健壮!

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    恩智浦MPU/MCU产品屡获殊荣

    在边缘智能时代,新一代MPU和MCU是驱动前沿应用开发的核“芯”引擎。恩智浦根植于深厚的专业积淀,通过持续创新,不断推出具有前瞻性的MPU / MCU产品,并完善开发技术生态,得到了工程师开发社区的广泛认可,并在系列行业评选中屡获殊荣!
    的头像 发表于 04-29 09:49 609次阅读

    探秘MPU/MDU200系列AC - DC电源:特性、参数与应用指南

    探秘MPU/MDU200系列AC - DC电源:特性、参数与应用指南 近期在电源设计与应用领域,MPU/MDU200系列AC - DC电源产品凭借其出色的性能和广泛的适用性,吸引了众多电子工程师
    的头像 发表于 04-05 13:55 675次阅读

    Renesas RZ/T2M:高性能MPU的技术剖析与应用指南

    基于Arm架构的高端32 64位MPU,凭借其丰富的功能和卓越的性能,在工业控制、自动化等领域展现出巨大的应用潜力。本文将对RZ/T2M的关键特性、电气特性以及使用过程中的注意事项进行详细剖析,为电子
    的头像 发表于 04-01 13:50 256次阅读

    RZ/G2UL Group:32&64位MPU的硬件设计与特性详解

    RZ/G2UL Group:3264位MPU的硬件设计与特性详解 在硬件设计领域,RZ/G2UL Group的32 64位MPUs(微处理器单元)凭借其卓越的性能和丰富的功能,成为了众多电子工程师
    的头像 发表于 04-01 13:50 202次阅读

    RZ/N2L Group:高性能MPU的技术剖析与应用潜力

    基于Arm架构的高端32 64位MPU,具备诸多卓越特性,为电子工程师们带来了新的设计思路和应用可能。 文件下载: rzn2l.pdf 一、产品概述 RZ/N2L Group MPU集成了Arm
    的头像 发表于 04-01 11:45 208次阅读

    RZ/G3S Group:一款功能强大的MPU芯片全面解析

    系列MPU芯片。这款芯片在设计上融合了多种先进技术,具备广泛的应用前景,下面让我们一起详细了解它的特点和性能。 文件下载: rzg3s.pdf 1. 芯片总体特性概述 RZ/G3S Group 拥有
    的头像 发表于 04-01 11:40 228次阅读

    RZ/T2ME Group:高端32 & 64位MPU的技术剖析

    出色特性,今天咱们就来深入剖析一番。 文件下载: rzt2me.pdf 一、概述 RZ/T2ME MPU是一款高性能的ASSP,集成了双Arm Cortex® - R52处理器,还配备了浮点运算单元
    的头像 发表于 04-01 11:30 187次阅读

    DR1 系列评估板 PS 端裸机与 FreeRTOS 开发案例手册

    本文为创龙科技DR1 系列评估板 PS 端裸机与 FreeRTOS 开发指南,涵盖三大核心案例与双开发模式实现。核心内容包括 LED 定时闪烁、按键控制 LED 亮灭、串口数据回显功能,详细说明工程
    的头像 发表于 01-19 17:12 324次阅读
    DR1 系列评估板 PS 端裸机与 <b class='flag-5'>FreeRTOS</b> 开发案例手册

    RZ/T2M MPU:工业控制与自动化应用的理想之选

    MPU凭借其卓越的性能、丰富的功能和广泛的应用场景,成为了众多工程师的首选。本文将深入剖析RZ/T2M MPU特性、功能以及应用,为电子工程师们提供全面的参考。 文件下载: Renesas
    的头像 发表于 12-29 16:30 554次阅读

    ucos与freertos哪个好?

    FreeRTOS是一个不错的选择。 如果项目需要更高级的特性和组件,或者愿意为使用RTOS支付费用以获得更丰富的功能和更强大的可扩展性,uCOS可能更适合。 最终的选择应基于项目的具体需求和资源限制进行评估。
    发表于 12-05 07:13

    FreeRTOS 空闲任务

    FreeRTOS 中很多人会注意到为什么有一个叫IDLE task的任务占用了CPU百分之九十多的使用权,但是这个任务并没有自己手动创建。原因就是这个空闲任务是系统自己创建的,每当系统没有其他任务要运行时
    发表于 12-04 07:35

    FreeRTOS和uC/OS-II的功能特性

    。 多核支持 (FreeRTOS SMP): 有官方对称多处理 (SMP) 版本,支持多核处理器。 MPU 支持: 支持内存保护单元 (MPU),用于任务隔离和提升可靠性/安全性。 POSIX 兼容层
    发表于 11-17 08:17

    边聊安全 | 功能安全开发之MPU

    上海磐时PANSHI“磐时,做汽车企业的安全智库”功能安全开发之MPU写在前面:在与从事功能安全开发行业的同事以及SASETECH社区的成员讨论时,笔者经常被问及有关芯片内存保护单元(MPU
    的头像 发表于 09-05 16:21 2776次阅读
    边聊安全 | 功能安全开发之<b class='flag-5'>MPU</b>

    详解FreeRTOS与SAFERTOS的区别

    开源免费的FreeRTOS由Richard Barry在WHIS工作时创建,WHIS基于FreeRTOS的功能模型,通过完整的HAZOP分析,确定了功能模型和API中的所有的弱点,减轻所有薄弱环节,并采用IEC 61508 SIL 3的开发生命周期,重新设计实现了SAFE
    的头像 发表于 06-04 16:58 1153次阅读
    详解<b class='flag-5'>FreeRTOS</b>与SAFERTOS的区别

    瑞萨RZ/A3M HMI MPU介绍

    对于高质量图形显示的应用要求,用户通常采用功能强大及搭载DDR高速接口的MPU来实现更多功能和更流畅的画面。但在开发过程会遇到DDR高速总线设计的难题,同时Linux系统难以实现类似MCU的快速启动性能。瑞萨新推出的RZ/A3M HMI MPU帮助客户解决这些问题。
    的头像 发表于 05-27 16:14 1285次阅读
    瑞萨RZ/A3M HMI <b class='flag-5'>MPU</b>介绍