1# Overview {#mainpage} 2 3Modern embedded applications often need to concurrently execute multiple activities such as sensor readings, connectivity, machine-learning algorithms, graphics display and others. A real-time operating system (RTOS) equips users with necessary mechanisms that simplify implementation of complex programs and ensure their reliable operation with deterministic timing. 4 5**CMSIS-RTOS2** specifies a generic RTOS interface over real-time OS kernels running on Arm® Cortex® processor-based devices. Applications and middleware components can \ref usingOS2 "use CMSIS_RTOS2 API" for better code reuse and simpler integration in various software ecosystems. 6 7CMSIS-RTOS2 also specifies a standard \ref CMSIS_RTOS_TickAPI "OS Tick interface" for use by RTOS kernels. It provides several OS tick implementations for simple kernel porting to different Cortex-M and Cortex-A processors. 8 9 10 11## Benefits {#rtos2_benefits} 12 13CMSIS-RTOS2 provides great benefits to the embedded developers and software vendors: 14 15 - The CMSIS-RTOS2 API covers all common services expected from a modern RTOS kernel for efficient thread management, inter-thread communication, timing control and others. See \ref rtos2_functionalities for details. 16 - The unified API increases developers' productivity and reduces learning efforts. It makes the software components reusable across different software stacks. 17 - The API enables use of advanced CPU features by RTOS and application, such as secure/non-secure execution with TrustZone, multi-core operation, access protection with MPU, and others. 18 - The C interface is binary compliant with the [Application Binary Interface (ABI) for Arm architecture](https://github.com/ARM-software/abi-aa/) and enables inter-operation between various toolchains. 19 - \ref rtosValidation "RTOS Validation Suite" provides a set of tests to verify compatibility to CMSIS-RTOS2 API definitions. 20 - CMSIS-RTOS2 is well adopted by the industry, has many years of continuous improvements and commitment for future developments. 21 22> **Note** 23> - The CMSIS-RTOS2 defines a minimum feature set. It's architecture allows to use advanced vendor-specific features directly as well. 24 25## Supported RTOS kernels {#rtos2_kernels} 26 27Many popular RTOS kernels include support for CMSIS-RTOS2 API: 28 29**CMSIS-RTX** (or Keil RTX5): provides most complete support for CMSIS-RTOS2 API and uses it as native interface. For more information see: 30 31 - [CMSIS-RTX GitHub repository](https://github.com/ARM-software/CMSIS-RTX) 32 - [CMSIS-RTX documentation](https://arm-software.github.io/CMSIS-RTX/) 33 - [CMSIS-RTX pack](https://www.keil.arm.com/packs/cmsis-rtx-arm/versions/) 34 35**FreeRTOS** : this popular RTOS kernel is enabled with CMSIS-RTOS2 API in the *CMSIS-FreeRTOS* variant. To learn more see: 36 37 - [CMSIS-FreeRTOS GitHub repository](https://github.com/ARM-software/CMSIS-FreeRTOS) 38 - [CMSIS-FreeRTOS documentation](https://arm-software.github.io/CMSIS-FreeRTOS/) 39 - [CMSIS-FreeRTOS pack](https://www.keil.arm.com/packs/cmsis-freertos-arm/versions/) 40 41**Zephyr RTOS**: is developed under governance of Linux Foundation and includes CMSIS-RTOS2 API support. See more at: 42 43 - [Zephyr GitHub repository](https://github.com/zephyrproject-rtos/zephyr), see folder *subsys/portability/cmsis_rtos_v2/* 44 - [Zephyr documentation about CMSIS-RTOS2 support](https://docs.zephyrproject.org/latest/services/portability/cmsis_rtos_v2.html) 45 46**embOS**: is a preemptive RTOS designed by Segger, and provides support for CMSIS-RTOS2 API. 47 48 - [Using embOS in CMSIS-Pack projects](https://wiki.segger.com/Using_embOS_in_CMSIS-Pack_projects) 49 - [CMSIS-embOS pack](https://www.keil.arm.com/packs/cmsis-embos-segger/versions/) 50 51**Azure ThreadX RTOS for STM32**: is an integration of Azure RTOS into STM32 middleware provided by STMicroelectronics. 52 53 - [CMSIS-RTOS API support in ThreadX for STM32](https://wiki.st.com/stm32mcu/wiki/Introduction_to_THREADX#CMSIS-RTOS_API_Support) 54 55**Micrium OS** is developed and maintained by Silicon Labs. 56 57 - [Micrium OS overview and comparison](https://www.silabs.com/developers/rtos) 58 59## Access to CMSIS-RTOS2 {#rtos2_access} 60 61CMSIS-RTOS2 and OS Tick intefaces are actively maintained in the [**CMSIS 6 GitHub repository**](https://github.com/ARM-software/CMSIS_6) and provided as part of the [**CMSIS Software Pack**](../General/cmsis_pack.html). 62 63The following files and directories relevant to CMSIS-RTOS2 are present in the **ARM::CMSIS** Pack: 64 65File/Directory | Content 66:-------------------------------------|:---------------------------------------------------- 67 CMSIS | CMSIS Base software components folder 68 ┣ Documentation/html/RTOS2 | A local copy of this CMSIS-RTOS2 documentation 69 ┗ RTOS2 | CMSIS-RTOS2 API header files and OS tick implementations 70  ┣ Include | API header files 71   ┣ cmsis_os2.h | \ref cmsis_os2_h 72   ┗ os_tick.h | \ref CMSIS_RTOS_TickAPI header file 73  ┗ Source | OS tick implementations 74   ┣ os_systick.c | OS tick implementation using Cortex-M SysTick timer 75   ┣ os_tick_gtim.c | OS tick implementation using Cortex-A Generic Timer 76   ┗ os_tick_ptim.c | OS tick implementation using Cortex-A Private Timer 77