You can migrate your project to FreeRTOS 202210.01 LTS or subscribe to the FreeRTOS Extended Maintenance Plan. See the blog post.
FreeRTOS website now available in Simplified Chinese
Search and browse content in your preferred language. See the blog post.
New FreeRTOS Long Term Support version now available.
Receive security patches and critical bug fixes on FreeRTOS libraries for two years. See the blog post.
Upgrading From FreeRTOS V10.5.1 to V10.6.0
FreeRTOS V10.6.0 is a drop-in replacement for FreeRTOS V10.5.1 for all ports other than the ports with Memory Protection Unit (MPU) support.
Follow the instructions below to upgrade an application using FreeRTOS MPU support from FreeRTOS V10.5.1 to V10.6.0.
Porting an Existing Application
FreeRTOS V10.6.0 introduces a new MPU wrapper. If you have an application which uses FreeRTOS MPU support, you have the following 2 options-
1. Update to the new enhanced MPU wrapper [Recommended]
Compile the following additional files in your project –
portable/Common/mpu_wrappers_v2.c.
mpu_wrappers_v2_asm.c or mpu_wrappers_v2_asm.S file in your
portable/[Compiler]/[Architecture] directory.
Define configUSE_MPU_WRAPPERS_V1 to 0 in your FreeRTOSConfig.h file or leave it undefined.
Define configPROTECTED_KERNEL_OBJECT_POOL_SIZE to the total number of kernel objects (tasks, queues, semaphores, mutexes, timers,
event groups, message buffers and stream buffers) in your application. The application will not be able to have more than
configPROTECTED_KERNEL_OBJECT_POOL_SIZE kernel objects at any point of time.
Define configSYSTEM_CALL_STACK_SIZE to the size of the system call stack in words. Each task has a statically allocated memory buffer of
this size which is used as stack to execute system calls. For example, if configSYSTEM_CALL_STACK_SIZE is defined to 128 and there are
10 tasks in the application, the total amount of memory used for system call stacks is 128 * 10 = 1280 words.
2. Continue using the old MPU wrapper
Define configUSE_MPU_WRAPPERS_V1 to 1 in your FreeRTOSConfig.h file.
Troubleshooting
I'm using the enhanced MPU wrapper and running out of memory.
You can try to tune the system call stack size using configSYSTEM_CALL_STACK_SIZE.
You can also try to reduce each task's stack size as the task context is no longer saved on the task stack.
I'm using the old MPU wrapper and running out of memory.
You can try to reduce each task's stack size as the task context is no longer saved on the task stack.
I'm getting a memory protection fault because the application uses a system call which is no longer available in the enhanced MPU wrapper.
(See Changes in FreeRTOS version 10.6.0 on the
Memory Protection Unit (MPU) Support page.)
Most of the removed system calls are for creation and deletion of the kernel objects. You can consider creating all the kernel
objects before starting the scheduler and never deleting them.
If that's not possible, you can consider making the tasks involved in kernel object creation and deletion privileged.
If that doesn't work either, you can switch back to the old MPU wrapper by following the instructions under
"2. Continue using the old MPU wrapper" above.
If you created a kernel object using the static creation API and used the static buffer's address as the object handle instead of the value
returned from the API, it will no longer work. Example:
uint32_t valueToSend = 10; /* It is incorrect to use &xQueueBuffer as the queue handle. */
xQueueSend( &xQueueBuffer, &( valueToSend ), pdMS_TO_TICKS( 10 ) );
uint32_t valueToSend = 10; /* Use the value returned from xQueueSend as the queue handle. */
xQueueSend( xQueueHandle, &( valueToSend ), pdMS_TO_TICKS( 10 ) );
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.