53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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
 | 
						|
  }
 | 
						|
}
 |