.. _cmsis_rtos_v2:

CMSIS RTOS v2
##########################

Cortex-M Software Interface Standard (CMSIS) RTOS is a vendor-independent
hardware abstraction layer for the ARM Cortex-M processor series and defines
generic tool interfaces. Though it was originally defined for ARM Cortex-M
microcontrollers alone, it could be easily extended to other microcontrollers
making it generic. For more information on CMSIS RTOS v2, please refer to the
`CMSIS-RTOS2 Documentation <http://www.keil.com/pack/doc/CMSIS/RTOS2/html/index.html>`_.

Features not supported in Zephyr implementation
***********************************************

Kernel
   osKernelGetState, osKernelSuspend, osKernelResume, osKernelInitialize
   and osKernelStart are not supported.

Mutex
   osMutexPrioInherit is supported by default and is not configurable,
   you cannot select/unselect this attribute.
   osMutexRecursive is also supported by default. If this attribute is
   not set, an error is thrown when the same thread tries to acquire
   it the second time.
   osMutexRobust is not supported in Zephyr.

Return values not supported in the Zephyr implementation
********************************************************

osKernelUnlock, osKernelLock, osKernelRestoreLock
   osError (Unspecified error) is not supported.

osSemaphoreDelete
   osErrorResource (the semaphore specified by parameter
   semaphore_id is in an invalid semaphore state) is not supported.

osMutexDelete
   osErrorResource (mutex specified by parameter mutex_id
   is in an invalid mutex state) is not supported.

osTimerDelete
   osErrorResource (the timer specified by parameter timer_id
   is in an invalid timer state) is not supported.

osMessageQueueReset
   osErrorResource (the message queue specified by
   parameter msgq_id is in an invalid message queue state)
   is not supported.

osMessageQueueDelete
   osErrorResource (the message queue specified by
   parameter msgq_id is in an invalid message queue state)
   is not supported.

osMemoryPoolFree
   osErrorResource (the memory pool specified by
   parameter mp_id is in an invalid memory pool state) is
   not supported.

osMemoryPoolDelete
   osErrorResource (the memory pool specified by
   parameter mp_id is in an invalid memory pool state) is
   not supported.

osEventFlagsSet, osEventFlagsClear
   osFlagsErrorUnknown (Unspecified error)
   and osFlagsErrorResource (Event flags object specified by
   parameter ef_id is not ready to be used) are not supported.

osEventFlagsDelete
   osErrorParameter (the value of the parameter ef_id is
   incorrect) is not supported.

osThreadFlagsSet
   osFlagsErrorUnknown (Unspecified error) and
   osFlagsErrorResource (Thread specified by parameter
   thread_id is not active to receive flags) are not supported.

osThreadFlagsClear
   osFlagsErrorResource (Running thread is not active to
   receive flags) is not supported.

osDelayUntil
   osParameter (the time cannot be handled) is not supported.
