CMSIS-FreeRTOS  Version 9.1.0
CMSIS-RTOS2 compliant FreeRTOS Implementation
 All Functions Groups Pages
Create a FreeRTOS project

You can basically choose between two option when creating a FreeRTOS project:

  1. Create a native FreeRTOS project using the FreeRTOS API and kernel.
  2. Create a CMSIS-FreeRTOS project using the CMSIS-RTOS2 API with an underlying FreeRTOS kernel.

Create a native FreeRTOS project

The steps to create a microcontroller application using FreeRTOS are:

  • Create a new project and select a microcontroller device.
  • In the Manage Run-Time Environment window, select ::Device:Startup, ::RTOS:CORE and ::RTOS:Config in the FreeRTOS variant and an applicable ::RTOS:Heap scheme (for more information on the heap schemes, visit the FreeRTOS documentation):

    manage_rte_freertos_native.png


  • If the Validation Output requires other components to be present, try to use the Resolve button.
  • Click OK. In the Project window, you will see the files that have been automatically added to you project, such as FreeRTOSConfig.h, the source code files, as well as the system and startup files:

    project_window_freertos_native.png

Configure FreeRTOS

When you have created the native FreeRTOS project, you can configure the real-time operating system using the FreeRTOSConfig.h file. Please refer to the FreeRTOS documentation for more information on the specific settings.

freertos_config_h_native.png

Add Event Recorder Visibility

  • To use the Event Recorder together with FreeRTOS, add the software components ::Compiler:Event Recorder and ::RTOS:Event Groups to your project.
  • Add this include: #include "EventRecorder.h"
  • Call EventRecorderInitialize(EventRecordAll, 1); in your application code (ideally in main()).
  • If you are using simulation mode, add an initialization file with the following content:
    MAP 0xE0001000, 0xE0001007 READ WRITE
    signal void DWT_CYCCNT (void) {
    while (1) {
    rwatch(0xE0001004);
    _WWORD(0xE0001004, states);
    }
    }
    DWT_CYCCNT()
  • Build the application code and download it to the debug hardware or run it in simulation.

Once the target application generates event information, it can be viewed in the µVision debugger using the Event Recorder.

Create a CMSIS-FreeRTOS project

The steps to create a microcontroller application using CMSIS-FreeRTOS are:

  • Create a new project and select a microcontroller device.
  • In the Manage Run-Time Environment window, select ::Device:Startup, ::CMSIS::RTOS2 (API)::FreeRTOS, ::RTOS:CORE in the FreeRTOS variant, ::RTOS:Config in the CMSIS RTOS2 variant, ::RTOS:Timers, ::RTOS:Event Groups, and an applicable ::RTOS:Heap scheme (for more information on the heap schemes, visit the FreeRTOS documentation):

    manage_rte_freertos_rtos2.png


  • If the Validation Output requires other components to be present, try to use the Resolve button.
  • Click OK. In the Project window, you will see the files that have been automatically added to you project, such as FreeRTOSConfig.h, the source code files, as well as the system and startup files:

    project_window_freertos_rtos2.png

Configure CMSIS-FreeRTOS

When you have created the CMSIS-FreeRTOS project, you can configure the real-time operating system using the FreeRTOSConfig.h file. It can be opened using the Configuration Wizard view:

freertos_config_h_cmsis_rtos.png

The following settings are available:

Name #define Description
Minimal stack size [words] configMINIMAL_STACK_SIZE Stack for idle task and default task stack in words.
Total heap size [bytes] configTOTAL_HEAP_SIZE Heap memory size in bytes.
Kernel tick frequency [Hz] configTICK_RATE_HZ Kernel tick rate in Hz.
Timer task stack depth [words] configTIMER_TASK_STACK_DEPTH Stack for timer task in words.
Timer task priority configTIMER_TASK_PRIORITY Timer task priority.
Timer queue length configTIMER_QUEUE_LENGTH Timer command queue length.
Use time slicing configUSE_TIME_SLICING Enable setting to use time slicing.
Idle should yield configIDLE_SHOULD_YIELD Control Yield behavior of the idle task.
Check for stack overflow configCHECK_FOR_STACK_OVERFLOW Enable or disable stack overflow checking.
Use idle hook configUSE_IDLE_HOOK Enable callback function call on each idle task iteration.
Use tick hook configUSE_TICK_HOOK Enable callback function call during each tick interrupt.
Use daemon task startup hook configUSE_DAEMON_TASK_STARTUP_HOOK Enable callback function call when timer service starts.
Use malloc failed hook configUSE_MALLOC_FAILED_HOOK Enable callback function call when out of dynamic memory.

Add Event Recorder Visibility

  • To use the Event Recorder together with FreeRTOS, add the software component ::Compiler:Event Recorder to your project.
  • Add this include: #include "EventRecorder.h"
  • Call EventRecorderInitialize(EventRecordAll, 1); in your application code (ideally in main()).
  • If you are using simulation mode, add an initialization file with the following content:
    MAP 0xE0001000, 0xE0001007 READ WRITE
    signal void DWT_CYCCNT (void) {
    while (1) {
    rwatch(0xE0001004);
    _WWORD(0xE0001004, states);
    }
    }
    DWT_CYCCNT()
  • Build the application code and download it to the debug hardware or run it in simulation.

Once the target application generates event information, it can be viewed in the µVision debugger using the Event Recorder.