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和...
staticvoidprvSetupMPU(void){externuint32_t__privileged_functions_end__;externuint32_t__FLASH_segment_start__;externuint32_t__FLASH_segment_end__;externuint32_t__privileged_data_start__;externuint32_t__privileged_data_end__;/* Check the expected MPU is present. */if(portMPU_TYPE_REG==...
在MPU 开启后,kernel api 处于 privileged section, unprivilege task 会被MPU屏蔽而无权直接访问; FreeRTOS 提供了 wrapper 层,用于间接调用 kernel api,其命名为 MPU_xxx(xxx 是 kernel api 名称)。 为了确保兼容性,减少用户调用的复杂性,FreeRTOS 还通过 mpu_wrapper.h 将 xxx 映射为 MPU_xxx。 系统调用...
FreeRTOS在MCU领域应用非常广泛,今天就给大家讲解一下FreeRTOS调度器中的三种调度算法,以及在瑞萨RZ/T2L MPU中的应用。 1.任务状态和事件的概述 RTOS,即实时操作系统,是一种能够在规定时间内响应外部事件或数据,并控制生产过程或对处理系统做出快速响应的操作系统。RTOS通过调度一切可利用的资源完成实时任务,并控制所...
在使用FreeRTOS-MPU的情况下,使用xTaskCreate()函数可以创建运行在特权模式或用户模式(见下面对函数参数uxPriority的描述)的任务。 当运行在特权模式下,任务可以访问整个内存映射;当处于用户模式下,任务仅能访问自己的堆栈。 无论在何种模式下,MPU都不会自动捕获堆栈溢出,因此标准的FreeRTOS堆栈溢出检测机制仍然会被用到...
针对ARMv7-M的FreeRTOS移植存在两个版本,一个支持MPU,一个不支持。针对ARMv8-M只有一个移植版本,通过编译开关控制是否支持MPU。 FreeRTOS通过将任务分为特权和非特权运行模式和限制对RAM、外设、可执行代码、任务堆栈内存的访问,使得应用更健壮和安全。例如,防止代码从RAM中执行可以获得巨大的好处,因为这样做可以防止...
xTaskCreateRestricted /xTaskCreateRestrictedStatic,主要用于在有或使能MPU单元的芯片中创建任务。这里的MPU是指Memory Protection Unit (MPU),不是微处理器的意思。这两者的区别与上面两个API类似,主要在于其内存分配方式不同,xTaskCreateRestricted是从内核堆动态申请,xTaskCreateRestrictedStatic用户传入。
创建一个使用 MPU 进行限制的任务,相关内存使用动态内存分配 vTaskDelete() 删除一个任务 MPU意思是Memory Protect Unit,即为存储保护单元,它是位于存储器内部的一个可编程的区域,定义了存储器的属性和存储器的访问权限。这里就不再对MPU做深入了解了。
FreeRTOS-MPU 提供了两种不同的内存保护模式:基于任务和基于分区。在基于任务的模式下,每个任务都有自己的内存空间,并且只能访问其分配的内存。在基于分区的模式下,内存被分为多个分区,并且每个任务只能访问其分配的分区。 除了内存保护之外,FreeRTOS-MPU 还提供了其他一些安全性功能,如任务堆栈溢出保护、任务优先级保...
针对ARMv7-M的FreeRTOS移植存在两个版本,一个支持MPU,一个不支持。针对ARMv8-M只有一个移植版本,通过编译开关控制是否支持MPU。 FreeRTOS通过将任务分为特权和非特权运行模式和限制对RAM、外设、可执行代码、任务堆栈内存的访问,使得应用更健壮和安全。例如,防止代码从RAM中执行可以获得巨大的好处,因为这样做可以防止...