Updated Jun 2025
Customization
FreeRTOS is customized using a configuration file called FreeRTOSConfig.h. Every FreeRTOS application must have a FreeRTOSConfig.h header file in its pre-processor include path. FreeRTOSConfig.h tailors the RTOS kernel to the application being built. It is therefore specific to the application, not the RTOS, and should be located in an application directory, not in one of the RTOS kernel source code directories.
Each demo application included in the RTOS source code download has its own FreeRTOSConfig.h file. Some of the demos are quite old and do not contain all the available configuration options. Configuration options that are omitted are set to a default value within an RTOS source file.
Here is a typical FreeRTOSConfig.h definition, followed by an explanation of each parameter:
1#ifndef FREERTOS_CONFIG_H2#define FREERTOS_CONFIG_H34/* Here is a good place to include header files that are required across5 your application. */6#include "something.h"73536/* Memory allocation related definitions. */4243/* Hook function related definitions. */5051/* Run time and task stats gathering related definitions. */5556/* Co-routine related definitions. */5960/* Software timer related definitions. */6566/* Interrupt nesting behaviour configuration. */7071/* Define to trap errors during development. */7374/* FreeRTOS MPU specific definitions. */8283/* ARMv8-M secure side port related definitions. */8586/* Optional functions - most linkers will remove unused functions anyway. */103104/* A header file that defines trace macro can be included here. */105106#endif /* FREERTOS_CONFIG_H */107
'config' Parameters
configUSE_PREEMPTION
Set to 1 to use the preemptive RTOS scheduler, or 0 to use the cooperative RTOS scheduler.
configUSE_PORT_OPTIMISED_TASK_SELECTION
Some FreeRTOS ports have two methods of selecting the next task to execute - a generic method, and a method that is specific to that port.
The Generic method:
- Is used when is set to 0, or when a port specific method is not implemented.configUSE_PORT_OPTIMISED_TASK_SELECTION
- Can be used with all FreeRTOS ports.
- Is completely written in C, making it less efficient than a port specific method.
- Does not impose a limit on the maximum number of available priorities.
A port specific method:
- Is not available for all ports.
- Is used when is set to 1.configUSE_PORT_OPTIMISED_TASK_SELECTION
- Relies on one or more architecture specific assembly instructions (typically a Count Leading Zeros [CLZ] or equivalent instruction) so can only be used with the architecture for which it was specifically written.
- Is more efficient than the generic method.
- Typically imposes a limit of 32 on the maximum number of available priorities.
configUSE_TICKLESS_IDLE
Set
configUSE_TICKLESS_IDLE
configUSE_IDLE_HOOK
Set to 1 if you wish to use an idle hook, or 0 to omit an idle hook.
configUSE_MALLOC_FAILED_HOOK
The kernel uses a call to
pvPortMalloc()
configUSE_MALLOC_FAILED_HOOK
The
malloc()
pvPortMalloc()
If
configUSE_MALLOC_FAILED_HOOK
malloc()
configUSE_MALLOC_FAILED_HOOK
malloc()
malloc()
1void vApplicationMallocFailedHook( void );
configUSE_DAEMON_TASK_STARTUP_HOOK
If
configUSE_TIMERS
configUSE_DAEMON_TASK_STARTUP_HOOK
1void void vApplicationDaemonTaskStartupHook( void );
configUSE_SB_COMPLETED_CALLBACK
Setting
configUSE_SB_COMPLETED_CALLBACK()
xStreamBufferCreateWithCallback()
xStreamBufferCreateStaticWithCallback()
xStreamBufferCreate()
xStreamBufferCreateStatic()
sbSEND_COMPLETED()
sbRECEVE_COMPLETED()
configUSE_SB_COMPLETED_CALLBACK
configUSE_TICK_HOOK
Set to 1 if you wish to use an tick hook, or 0 to omit an tick hook.
configCPU_CLOCK_HZ
Enter the frequency in Hz at which the internal clock that drives the peripheral used to generate the tick interrupt will be executing - this is normally the same clock that drives the internal CPU clock. This value is required in order to correctly configure timer peripherals.
configSYSTICK_CLOCK_HZ
Optional parameter for ARM Cortex-M ports only.
By default ARM Cortex-M ports generate the RTOS tick interrupt from the Cortex-M SysTick timer. Most Cortex-M MCUs run the SysTick timer at the same frequency as the MCU itself - when that is the case
configSYSTICK_CLOCK_HZ
configCPU_CLOCK_HZ
configSYSTICK_CLOCK_HZ
configTICK_RATE_HZ
The frequency of the RTOS tick interrupt.
The tick interrupt is used to measure time. Therefore a higher tick frequency means time can be measured to a higher resolution. However, a high tick frequency also means that the RTOS kernel will use more CPU time so be less efficient. The RTOS demo applications all use a tick rate of 1000Hz. This is used to test the RTOS kernel and is higher than would normally be required.
More than one task can share the same priority. The RTOS scheduler will share processor time between tasks of the same priority by switching between the tasks during each RTOS tick. A high tick rate frequency will therefore also have the effect of reducing the 'time slice' given to each task.
configMAX_PRIORITIES
The number of priorities available to the application tasks. Any number of tasks can share the same priority. Co-routines are prioritised separately - see
configMAX_CO_ROUTINE_PRIORITIES
Each available priority consumes a little RAM within the RTOS kernel so this value should not be set any higher than actually required by your application.
The maximum permissible value will be capped if configUSE_PORT_OPTIMISED_TASK_SELECTION is set to 1.
configMINIMAL_STACK_SIZE
The size of the stack used by the idle task. Generally this should not be reduced from the value set in the FreeRTOSConfig.h file provided with the demo application for the port you are using.
Like the stack size parameter to the xTaskCreate() and xTaskCreateStatic() functions, the stack size is specified in words, not bytes. If each item placed on the stack is 32-bits, then a stack size of 100 means 400 bytes (each 32-bit stack item consuming 4 bytes).
configMAX_TASK_NAME_LEN
The maximum permissible length of the descriptive name given to a task when the task is created. The length is specified in the number of characters including the NULL termination byte.
configUSE_TRACE_FACILITY
Set to 1 if you wish to include additional structure members and functions to assist with execution visualisation and tracing.
configUSE_STATS_FORMATTING_FUNCTIONS
Set
configUSE_TRACE_FACILITY
configUSE_STATS_FORMATTING_FUNCTIONS
vTaskList()
vTaskGetRunTimeStates()
configUSE_16_BIT_TICKS
Time is measured in 'ticks' - which is the number of times the tick interrupt has executed since the RTOS kernel was started. The tick count is held in a variable of type
TickType_t
Defining
configUSE_16_BIT_TICKS
TickType_t
configUSE_16_BIT_TICKS
TickType_t
Using a 16 bit type will greatly improve performance on 8 and 16 bit architectures, but limits the maximum specifiable time period to 65535 'ticks'. Therefore, assuming a tick frequency of 250Hz, the maximum time a task can delay or block when a 16bit counter is used is 262 seconds, compared to 17179869 seconds when using a 32bit counter.
configIDLE_SHOULD_YIELD
This parameter controls the behaviour of tasks at the idle priority. It only has an effect if:
- The preemptive scheduler is being used.
- The application creates tasks that run at the idle priority.
If
configUSE_TIME_SLICING
When tasks share the idle priority the behaviour can be slightly different. If
configIDLE_SHOULD_YIELD

The diagram above shows the execution pattern of four tasks that are all running at the idle priority. Tasks A, B and C are application tasks. Task I is the idle task. A context switch occurs with regular period at times T0, T1, ..., T6. When the idle task yields task A starts to execute - but the idle task has already consumed some of the current time slice. This results in task I and task A effectively sharing the same time slice. The application tasks B and C therefore get more processing time than the application task A.
This situation can be avoided by:
- If appropriate, using an idle hook in place of separate tasks at the idle priority.
- Creating all application tasks at a priority greater than the idle priority.
- Setting to 0.configIDLE_SHOULD_YIELD
Setting
configIDLE_SHOULD_YIELD
configUSE_TASK_NOTIFICATIONS
Setting
configUSE_TASK_NOTIFICATIONS
configUSE_TASK_NOTIFICATIONS
Setting
configUSE_TASK_NOTIFICATIONS
Each task consumes 8 additional bytes of RAM when direct to task notifications are included in the build.
configTASK_NOTIFICATION_ARRAY_ENTRIES
Each RTOS task has an array of task notifications.
configTASK_NOTIFICATION_ARRAY_ENTRIES
Prior to FreeRTOS V10.4.0 tasks only had a single notification value, not an array of values, so for backward compatibility
configTASK_NOTIFICATION_ARRAY_ENTRIES
configUSE_MUTEXES
Set to 1 to include mutex functionality in the build, or 0 to omit mutex functionality from the build. Readers should familiarise themselves with the differences between mutexes and binary semaphores in relation to the FreeRTOS functionality.
configUSE_RECURSIVE_MUTEXES
Set to 1 to include recursive mutex functionality in the build, or 0 to omit recursive mutex functionality from the build.
configUSE_COUNTING_SEMAPHORES
Set to 1 to include counting semaphore functionality in the build, or 0 to omit counting semaphore functionality from the build.
configUSE_ALTERNATIVE_API
Set to 1 to include the 'alternative' queue functions in the build, or 0 to omit the 'alternative' queue functions from the build. The alternative API is described within the queue.h header file. The alternative API is deprecated and should not be used in new designs.
configCHECK_FOR_STACK_OVERFLOW
The stack overflow detection page describes the use of this parameter.
configQUEUE_REGISTRY_SIZE
The queue registry has two purposes, both of which are associated with RTOS kernel aware debugging:
- It allows a textual name to be associated with a queue for easy queue identification within a debugging GUI.
- It contains the information required by a debugger to locate each registered queue and semaphore.
The queue registry has no purpose unless you are using a RTOS kernel aware debugger.
configQUEUE_REGISTRY_SIZE
configUSE_QUEUE_SETS
Set to 1 to include queue set functionality (the ability to block, or pend, on multiple queues and semaphores), or 0 to omit queue set functionality.
configUSE_TIME_SLICING
By default (if
configUSE_TIME_SLICING
configUSE_TIME_SLICING
configUSE_TIME_SLICING
configUSE_NEWLIB_REENTRANT
If
configUSE_NEWLIB_REENTRANT
Note Newlib support has been included by popular demand, but is not used by the FreeRTOS maintainers themselves. FreeRTOS is not responsible for resulting newlib operation. User must be familiar with newlib and must provide system-wide implementations of the necessary stubs. Be warned that (at the time of writing) the current newlib design implements a system-wide
malloc()
configENABLE_BACKWARD_COMPATIBILITY
The FreeRTOS.h header file includes a set of #define macros that map the names of data types used in versions of FreeRTOS prior to version 8.0.0 to the names used in FreeRTOS version 8.0.0. The macros allow application code to update the version of FreeRTOS they are built against from a pre 8.0.0 version to a post 8.0.0 version without modification. Setting
configENABLE_BACKWARD_COMPATIBILITY
configNUM_THREAD_LOCAL_STORAGE_POINTERS
Sets the number of indexes in each task's thread local storage array.
configUSE_MINI_LIST_ITEM
MiniListItem_t
ListItem_t
configUSE_MINI_LIST_ITEM
MiniListItem_t
ListItem_t
configUSE_MINI_LIST_ITEM
MiniListItem_t
ListItem_t
configUSE_MINI_LIST_ITEM
configSTACK_DEPTH_TYPE
Sets the type used to specify the stack depth in calls to xTaskCreate(), and various other places stack sizes are used (for example, when returning the stack high water mark).
Older versions of FreeRTOS specified stack sizes using variables of type
UBaseType_t
configSTACK_DEPTH_TYPE
configMESSAGE_BUFFER_LENGTH_TYPE
FreeRTOS Message buffers use variables of type
configMESSAGE_BUFFER_LENGTH_TYPE
configMESSAGE_BUFFER_LENGTH_TYPE
size_t
configMESSAGE_BUFFER_LENGTH_TYPE
uint8_t
configMESSAGE_BUFFER_LENGTH_TYPE
uint16_t
configSUPPORT_STATIC_ALLOCATION
If
configSUPPORT_STATIC_ALLOCATION
If
configSUPPORT_STATIC_ALLOCATION
If
configSUPPORT_STATIC_ALLOCATION
If
configSUPPORT_STATIC_ALLOCATION
vApplicationGetIdleTaskMemory()
configUSE_TIMERS
vApplicationGetTimerTaskMemory()
1/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an2 implementation of vApplicationGetIdleTaskMemory() to provide the memory that is3 used by the Idle task. */4void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,5 StackType_t **ppxIdleTaskStackBuffer,6 uint32_t *pulIdleTaskStackSize )7{8 /* If the buffers to be provided to the Idle task are declared inside this9 function then they must be declared static - otherwise they will be allocated on10 the stack and so not exists after this function exits. */11 static StaticTask_t xIdleTaskTCB;12 static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];1314 /* Pass out a pointer to the StaticTask_t structure in which the Idle task's15 state will be stored. */16 *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;1718 /* Pass out the array that will be used as the Idle task's stack. */19 *ppxIdleTaskStackBuffer = uxIdleTaskStack;2021 /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.22 Note that, as the array is necessarily of type StackType_t,23 configMINIMAL_STACK_SIZE is specified in words, not bytes. */24 *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;25}2627/*-----------------------------------------------------------*/2829/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the30 application must provide an implementation of vApplicationGetTimerTaskMemory()31 to provide the memory that is used by the Timer service task. */32void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,33 StackType_t **ppxTimerTaskStackBuffer,34 uint32_t *pulTimerTaskStackSize )35{36 /* If the buffers to be provided to the Timer task are declared inside this37 function then they must be declared static - otherwise they will be allocated on38 the stack and so not exists after this function exits. */39 static StaticTask_t xTimerTaskTCB;40 static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];4142 /* Pass out a pointer to the StaticTask_t structure in which the Timer43 task's state will be stored. */44 *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;4546 /* Pass out the array that will be used as the Timer task's stack. */47 *ppxTimerTaskStackBuffer = uxTimerTaskStack;4849 /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.50 Note that, as the array is necessarily of type StackType_t,51 configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */52 *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;53}
Examples of the callback functions that must be provided by the application to supply the RAM used by the Idle and Timer Service tasks if
configSUPPORT_STATIC_ALLOCATION
See the Static Vs Dynamic Memory Allocation page for more information.
configSUPPORT_DYNAMIC_ALLOCATION
If
configSUPPORT_DYNAMIC_ALLOCATION
If
configSUPPORT_DYNAMIC_ALLOCATION
If
configSUPPORT_DYNAMIC_ALLOCATION
See the Static Vs Dynamic Memory Allocation page for more information.
configTOTAL_HEAP_SIZE
The total amount of RAM available in the FreeRTOS heap.
This value will only be used if configSUPPORT_DYNAMIC_ALLOCATION is set to 1 and the application makes use of one of the sample memory allocation schemes provided in the FreeRTOS source code download. See the memory configuration section for further details.
configAPPLICATION_ALLOCATED_HEAP
By default the FreeRTOS heap is declared by FreeRTOS and placed in memory by the linker. Setting
configAPPLICATION_ALLOCATED_HEAP
If heap_1.c, heap_2.c or heap_4.c is used, and
configAPPLICATION_ALLOCATED_HEAP
uint8_t
1uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
configSTACK_ALLOCATION_FROM_SEPARATE_HEAP
If
configSTACK_ALLOCATION_FROM_SEPARATE_HEAP
pvPortMallocStack
vPortFreeStack
pvPortMallocStack
vPortFreeStack
If
configSTACK_ALLOCATION_FROM_SEPARATE_HEAP
Example implementation of
pvPortMallocStack
vPortFreeStack
1void * pvPortMallocStack( size_t xWantedSize )2{3 /* Allocate a memory block of size xWantedSize. The function used for4 * allocating memory must be thread safe. */5 return MyThreadSafeMalloc( xWantedSize );6}78void vPortFreeStack( void * pv )9{10 /* Free the memory previously allocated using pvPortMallocStack. The11 * function used for freeing the memory must be thread safe. */12 MyThreadSafeFree( pv );13}
Example implementation of
pvPortMallocStack
vPortFreeStack
configGENERATE_RUN_TIME_STATS
The Run Time Stats page describes the use of this parameter.
configUSE_CO_ROUTINES
Set to 1 to include co-routine functionality in the build, or 0 to omit co-routine functionality from the build. To include co-routines croutine.c must be included in the project.
configMAX_CO_ROUTINE_PRIORITIES
The number of priorities available to the application co-routines. Any number of co-routines can share the same priority. Tasks are prioritised separately - see
configMAX_PRIORITIES
configUSE_TIMERS
Set to 1 to include software timer functionality, or 0 to omit software timer functionality. See the FreeRTOS software timers page for a full description.
configTIMER_TASK_PRIORITY
Sets the priority of the software timer service/daemon task. See the FreeRTOS software timers page for a full description.
configTIMER_QUEUE_LENGTH
Sets the length of the software timer command queue. See the FreeRTOS software timers page for a full description.
configTIMER_TASK_STACK_DEPTH
Sets the stack depth allocated to the software timer service/daemon task. See the FreeRTOS software timers page for a full description.
configKERNEL_INTERRUPT_PRIORITY configMAX_SYSCALL_INTERRUPT_PRIORITY and configMAX_API_CALL_INTERRUPT_PRIORITY
Ports that contain a
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
ARM Cortex-M3 and ARM Cortex-M4 users please take heed of the special note at the end of this section!
configMAX_API_CALL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY
Note in the following discussion that only API functions that end in "FromISR" can be called from within an interrupt service routine.
For ports that only implement
configKERNEL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY
For ports that implement both
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
A full interrupt nesting model is achieved by setting
configMAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY
Interrupts that do not call API functions can execute at priorities above
configMAX_SYSCALL_INTERRUPT_PRIORITY
For example, imagine a hypothetical microcontroller that has 8 interrupt priority levels - 0 being the lowest and 7 being the highest (see the special note for ARM Cortex-M3 users at the end of this section). The picture below describes what can and cannot be done at each priority level should the two configuration constants be set to 4 and 0 as shown:
Example interrupt priority configuration
These configuration parameters allow very flexible interrupt handling:
-
Interrupt handling 'tasks' can be written and prioritised as per any other task in the system. These are tasks that are woken by an interrupt. The interrupt service routine (ISR) itself should be written to be as short as it possibly can be - it just grabs the data then wakes the high priority handler task. The ISR then returns directly into the woken handler task - so interrupt processing is contiguous in time just as if it were all done in the ISR itself. The benefit of this is that all interrupts remain enabled while the handler task executes.
-
Ports that implement
take this further - permitting a fully nested model where interrupts between the RTOS kernel interrupt priority andconfigMAX_SYSCALL_INTERRUPT_PRIORITYcan nest and make applicable API calls. Interrupts with priority aboveconfigMAX_SYSCALL_INTERRUPT_PRIORITYare never delayed by the RTOS kernel activity.configMAX_SYSCALL_INTERRUPT_PRIORITY -
ISR's running above the maximum syscall priority are never masked out by the RTOS kernel itself, so their responsiveness is not effected by the RTOS kernel functionality.
This is ideal for interrupts that require very high temporal accuracy - for example interrupts that perform motor commutation. However, such ISR's cannot use the FreeRTOS API functions.
To utilize this scheme your application design must adhere to the following rule: Any interrupt that
uses the FreeRTOS API must be set to the same priority as the RTOS kernel (as configured by the
A special note for ARM Cortex-M3 and ARM Cortex-M4 users: Please read the page dedicated to interrupt priority settings on ARM Cortex-M devices. As a minimum, remember that ARM Cortex-M3 cores use numerically low priority numbers to represent HIGH priority interrupts, which can seem counter-intuitive and is easy to forget! If you wish to assign an interrupt a low priority do NOT assign it a priority of 0 (or other low numeric value) as this can result in the interrupt actually having the highest priority in the system - and therefore potentially make your system crash if this priority is above
configMAX_SYSCALL_INTERRUPT_PRIORITY
The lowest priority on a ARM Cortex-M3 core is in fact 255 - however different ARM Cortex-M3 vendors implement a different number of priority bits and supply library functions that expect priorities to be specified in different ways. For example, on the STM32 the lowest priority you can specify in an ST driver library call is in fact 15 - and the highest priority you can specify is 0.
configASSERT
The semantics of the
configASSERT()
assert()
configASSERT()
configASSERT()
configASSERT()
The example definition (shown at the top of the file and replicated below) calls
vAssertCalled()
configASSERT()
vAssertCalled()
configASSERT()
It is normal to define
configASSERT()
Note defining
configASSERT()
configASSERT()
1/* Define configASSERT() to call vAssertCalled() if the assertion fails. The assertion2 has failed if the value of the parameter passed into configASSERT() equals zero. */3#define configASSERT ( x ) if( ( x ) == 0 ) vAssertCalled( __FILE__, __LINE__ )
If running FreeRTOS under the control of a debugger, then
configASSERT()
1/* Define configASSERT() to disable interrupts and sit in a loop. */2#define configASSERT ( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS
configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS
If
configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS
Functions implemented in "application_defined_privileged_functions.h" must save and restore the processor's privilege state using the
prvRaisePrivilege()
portRESET_PRIVILEGE()
1void MPU_debug_printf( const char *pcMessage )2{3 /* State the privilege level of the processor when the function was called. */4 BaseType_t xRunningPrivileged = prvRaisePrivilege();56 /* Call the library function, which now has access to all RAM. */7 debug_printf( pcMessage );89 /* Reset the processor privilege level to its original value. */10 portRESET_PRIVILEGE( xRunningPrivileged );11}
This technique should only be use during development, and not deployment, as it circumvents the memory protection.
configTOTAL_MPU_REGIONS
FreeRTOS MPU (Memory Protection Unit) ports for ARM Cortex-M4 microcontrollers support devices with 16 MPU regions. Set
configTOTAL_MPU_REGIONS
configTEX_S_C_B_FLASH
The TEX, Shareable (S), Cacheable (C) and Bufferable (B) bits define the memory type, and where necessary the cacheable and shareable properties of an MPU region.
configTEX_S_C_B_FLASH
configTEX_S_C_B_SRAM
The TEX, Shareable (S), Cacheable (C) and Bufferable (B) bits define the memory type, and where necessary the cacheable and shareable properties of an MPU region.
configTEX_S_C_B_SRAM
configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
configENFORCE_SYSTEM_CALLS_FROM_KERNEL_ONLY
__syscalls_flash_start__
__syscalls_flash_end__
configALLOW_UNPRIVILEGED_CRITICAL_SECTIONS
ARMv7-M MPU ports only (ARM Cortex-M3/4/7).
Set to 0 to prevent unprivileged application tasks from using the
taskENTER_CRITICAL()
configENABLE_ERRATA_837070_WORKAROUND
Cortex-M4 MPU ports only.
When using Cortex-M4 MPU ports on a Cortex-M7 r0p0/r0p1 core, set
configENABLE_ERRATA_837070_WORKAROUND
configHEAP_CLEAR_MEMORY_ON_FREE
If set to 1, then blocks of memory allocated using
pvPortMalloc()
vPortFree()
configHEAP_CLEAR_MEMORY_ON_FREE
configHEAP_CLEAR_MEMORY_ON_FREE
secureconfigMAX_SECURE_CONTEXTS
ARMv8-M secure side ports only.
Tasks that call secure functions from the non-secure side of an ARMv8-M MCU (ARM Cortex-M23, Cortex-M33 and Cortex-M55) have two contexts – one on the non-secure side and one on the secure-side. Before FreeRTOS v10.4.5, ARMv8-M secure-side ports allocated the structures that reference secure-side contexts at run time. From FreeRTOS V10.4.5 the structures are allocated statically at compile time.
secureconfigMAX_SECURE_CONTEXTS
secureconfigMAX_SECURE_CONTEXTS
INCLUDE Parameters
The macros starting 'INCLUDE' allow those components of the real time kernel not utilized by your application to be excluded from your build. This ensures the RTOS does not use any more ROM or RAM than necessary for your particular embedded application.
Each macro takes the form ...
1INCLUDE_FunctionName ...
where FunctionName indicates the API function (or set of functions) that can optionally be excluded. To include the API function set the macro to 1, to exclude the function set the macro to 0. For example, to include the
vTaskDelete()
1#define INCLUDE_vTaskDelete 1
To exclude
vTaskDelete()
1#define INCLUDE_vTaskDelete 0