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
FreeRTOS 任务驱动程序支持为每个任务分配 n 个内存区域。内存区域及其访问权限可能因任务而异。
在 FreeRTOS 环境中,MPU 区域可分为任务特定区域和公共区域。任务特定区域在每次任务切换时配置。公共区域在调度器初始化时配置。
前四个区域和最后一个区域(区域 0-3 和 n-1)在调度器启动时配置,为所有任务均为公共区域。这包括闪存、RAM 和外设内存。其他区域特定于任务,可在任务创建期间配置。任务栈有专用的 MPU 区域。
表 3-1 列出了器件系列及其 MPU 区域数量,以及它们如何划分为公共区域和任务特定区域。
| 器件系列 | MPU 区域数 | 公共区域 | 任务特定区域 |
|---|---|---|---|
| TMS570LS31x RM48x TMS570LS12x RM46x | 12 | 区域 0:非特权闪存区域 区域 1:特权闪存区域 区域 2:特权 RAM 区域 区域 3:外设区域 区域 11:特权系统区域 | 区域 4:任务栈 区域 5-10:用户定义 |
| TMS570LS04x RM42x | 8 | 区域 0:非特权闪存区域 区域 1:特权闪存区域 区域 2:特权 RAM 区域 区域 3:外设区域 区域 7:特权系统区域 | 区域 4:任务栈 区域 5、6:用户定义 |
| TMS570LC43x RM57x | 16 | 区域 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 创建任务:
有关如何创建受限和非受限任务的更多详细信息,请参阅 HALCoGen 示例。