CMSIS-RTOS2: Functions

| CMSIS-RTOS2 Version 2.1.3 Real-Time Operating System: API and RTX Reference Implementation

- Main Page
- Usage and Description
- Reference

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Functions
Functions
RTX v5 Specific API

RTX5 functions. More...

## Functions

uint32_t | osRtxErrorNotify (uint32_t code, void *object_id)
| OS Error Callback function. More...
void | osRtxIdleThread (void *argument)
| OS Idle Thread. More...

## Description

## Function Documentation

uint32_t osRtxErrorNotify | ( | uint32_t | code,
|  | void * | object_id
| ) |  |

Parameters

  [in] | code | The code to identify the error condition.
  [in] | object_id | A reference to any RTX object to identify the object that caused the issue, can be NULL.

Some system error conditions can be detected during runtime. If the RTX kernel detects a runtime error, it calls the runtime error function osRtxErrorNotify for an object specified by parameter object_id.

The parameter code passes the actual error code to this function:

Error Code | Description
--- | ---
osRtxErrorStackOverflow | Stack overflow detected for thread (thread_id=object_id)
osRtxErrorISRQueueOverflow | ISR Queue overflow detected when inserting object (object_id)
osRtxErrorTimerQueueOverflow | User Timer Callback Queue overflow detected for timer (timer_id=object_id)
osRtxErrorClibSpace | Standard C/C++ library libspace not available: increase `OS_THREAD_LIBSPACE_NUM`
osRtxErrorClibMutex | Standard C/C++ library mutex initialization failed

The function osRtxErrorNotify must contain an infinite loop to prevent further program execution. You can use an emulator to step over the infinite loop and trace into the code introducing a runtime error. For the overflow errors this means you need to increase the size of the object causing an overflow.

Code Example

#include "rtx_os.h"
uint32_t osRtxErrorNotify (uint32_t code, void *object_id) {
(void)object_id;
switch (code) {
case osRtxErrorStackOverflow:
// Stack overflow detected for thread (thread_id=object_id)
break;
case osRtxErrorISRQueueOverflow:
// ISR Queue overflow detected when inserting object (object_id)
break;
case osRtxErrorTimerQueueOverflow:
// User Timer Callback Queue overflow detected for timer (timer_id=object_id)
break;
case osRtxErrorClibSpace:
// Standard C/C++ library libspace not available: increase OS_THREAD_LIBSPACE_NUM
break;
case osRtxErrorClibMutex:
// Standard C/C++ library mutex initialization failed
break;
default:
break;
}
for (;;) {}
//return 0U;
}

void osRtxIdleThread | ( | void * | argument | ) |

Parameters

  [in] | argument | Unused parameter, always set to NULL.

The function osRtxIdleThread is executed by the RTX kernel when no other threads are ready to run.

By default, this thread is an empty end-less loop that does nothing. It only waits until another task becomes ready to run. You may change the code of the osRtxIdleThread function to put the CPU into a power-saving or idle mode, see Tick-less Low-Power Operation.

The default stack size for this thread is defined in the file RTX_Config.h. Refer to Thread Configuration.

Attention
  The idle thread should never be blocked nor terminated! Do not call
  - blocking functions,
  - osThreadTerminate, or
  - osThreadExit
  and do not return from this function when providing a user defined implementation.

Code Example

#include "rtx_os.h"
__NO_RETURN void osRtxIdleThread (void *argument) {
(void)argument;
for (;;) {}
}