#include "cmsis_os2.h"                          // CMSIS RTOS header file
 
/*----------------------------------------------------------------------------
 *      Mutex creation & usage
 *---------------------------------------------------------------------------*/
 
osMutexId_t mid_Mutex;                          // mutex id
 
osThreadId_t tid_Thread_Mutex;                  // thread id
 
void Thread_Mutex (void *argument);             // thread function
 
int Init_Mutex (void) {
 
  mid_Mutex = osMutexNew(NULL);
  if (mid_Mutex == NULL) {
    ; // Mutex object not created, handle failure
  }
 
  tid_Thread_Mutex = osThreadNew(Thread_Mutex, NULL, NULL);
  if (tid_Thread_Mutex == NULL) {
    return(-1);
  }
 
  return(0);
}
 
void Thread_Mutex (void *argument) {
  osStatus_t status;
 
  while (1) {
    ; // Insert thread code here...
 
    status = osMutexAcquire(mid_Mutex, 0U);
    switch (status) {
      case osOK:
        ; // Use protected code here...
        osMutexRelease(mid_Mutex);
        break;
      case osErrorResource:
        break;
      case osErrorParameter:
        break;
      case osErrorISR:
        break;
      default:
        break;
    }
 
    osThreadYield();                            // suspend thread
  }
}