ZHDA362A April   2018  – October 2026 RM41L232 , RM42L432 , RM44L520 , RM44L920 , RM46L430 , RM46L440 , RM46L450 , RM46L830 , RM46L840 , RM46L850 , RM46L852 , RM48L530 , RM48L540 , RM48L730 , RM48L740 , RM48L940 , RM48L950 , RM48L952 , RM57L843 , TMS570LC4357 , TMS570LC4357-EP , TMS570LC4357-SEP , TMS570LS0232 , TMS570LS0332 , TMS570LS0432 , TMS570LS0714 , TMS570LS0714-S , TMS570LS0914 , TMS570LS1114 , TMS570LS1115 , TMS570LS1224 , TMS570LS1225 , TMS570LS1227 , TMS570LS2124 , TMS570LS2125 , TMS570LS2134 , TMS570LS2135 , TMS570LS3134 , TMS570LS3135 , TMS570LS3137

 

  1.   1
  2.   Hercules 器件上的 FreeRTOS
  3.   商标
  4. 1FreeRTOS 源文件
  5. 2HALCoGen 中的 FreeRTOS 支持
  6. 3作为安全使用场景附加项的 MPU 设置
    1. 3.1 MPU 包装器函数
    2. 3.2 任务的 MPU 区域
  7. 4将 FreeRTOS 移植到不同器件型号
  8. 5修订历史记录

任务的 MPU 区域

FreeRTOS 任务驱动程序支持为每个任务分配 n 个内存区域。内存区域及其访问权限可能因任务而异。

在 FreeRTOS 环境中,MPU 区域可分为任务特定区域和公共区域。任务特定区域在每次任务切换时配置。公共区域在调度器初始化时配置。

前四个区域和最后一个区域(区域 0-3 和 n-1)在调度器启动时配置,为所有任务均为公共区域。这包括闪存、RAM 和外设内存。其他区域特定于任务,可在任务创建期间配置。任务栈有专用的 MPU 区域。

表 3-1 列出了器件系列及其 MPU 区域数量,以及它们如何划分为公共区域和任务特定区域。

表 3-1 器件系列
器件系列MPU 区域数公共区域任务特定区域
TMS570LS31x RM48x
TMS570LS12x RM46x
12

区域 0:非特权闪存区域

区域 1:特权闪存区域

区域 2:特权 RAM 区域

区域 3:外设区域

区域 11:特权系统区域

区域 4:任务栈

区域 5-10:用户定义

TMS570LS04x RM42x8

区域 0:非特权闪存区域

区域 1:特权闪存区域

区域 2:特权 RAM 区域

区域 3:外设区域

区域 7:特权系统区域

区域 4:任务栈

区域 5、6:用户定义

TMS570LC43x RM57x16

区域 0:非特权闪存区域

区域 1:特权闪存区域

区域 2:特权 RAM 区域

区域 3:外设区域

区域 15:特权系统区域

可在 HALCoGen GUI 中更改任务可配置区域的数量。默认值 = 3

区域 11:任务栈

区域 12-14:用户定义

其余区域可在 HALCoGen GUI 中配置,对所有任务均为公共区域。

备注:

特权闪存和 RAM 区域包括内核使用的特权代码和数据段。

通过 HALCoGen GUI 完成的所有 MPU 配置会在调度器初始化时复位。对于 TMS570LC43x 和 RM57x 器件,可选择一个选项来设置 FreeRTOS 使用的区域数量。FreeRTOS 未使用的区域可通过 HALCoGen GUI 配置。这些区域不会被 FreeRTOS 代码复位。

要修改 FreeRTOS 设置的默认 MPU 区域,请修改 os_port.c 文件中的 prvSetupDefaultMPU 函数。

可使用两个 FreeRTOS API 创建任务:

  • xTaskCreate — 禁用所有用户定义的任务特定区域,并允许访问整个 RAM 区域,将其作为任务栈区域的一部分。使用此 API 创建的任务称为非受限任务,因为它可以访问整个 RAM 区域。
  • xTaskCreateRestricted — 允许用户定义其需要访问的区域。任务栈区域按实际栈大小设置。使用此 API 创建的任务称为受限任务,因为它除自己的栈之外不能访问任何其他 RAM 区域(除非明确提及)。

有关如何创建受限和非受限任务的更多详细信息,请参阅 HALCoGen 示例。