Mutual Exclusion Semaphores
Table C-11 shows the difference in API for mutual exclusion semaphore management.
µC/OS-II (os_mutex.c) |
µC/OS-III (os_mutex.c) |
Note |
BOOLEAN OSMutexAccept( OS_EVENT *pevent, INT8U *perr); |
|
(1) |
OS_EVENT * OSMutexCreate( INT8U prio, INT8U *perr); |
void OSMutexCreate( OS_MUTEX *p_mutex, CPU_CHAR *p_name, OS_ERR *p_err); |
(2) |
OS_EVENT * OSMutexDel( OS_EVENT *pevent, INT8U opt, INT8U *perr); |
void OSMutexDel( OS_MUTEX *p_mutex, OS_OPT opt, OS_ERR *p_err); |
|
void OSMutexPend( OS_EVENT *pevent, INT32U timeout, INT8U *perr); |
void OSMutexPend( OS_MUTEX *p_mutex, OS_TICK timeout, OS_OPT opt, CPU_TS *p_ts, OS_ERR *p_err); |
(3) |
|
OS_OBJ_QTY OSMutexPendAbort( OS_MUTEX *p_mutex, OS_OPT opt, OS_ERR *p_err); |
|
INT8U OSMutexPost( OS_EVENT *pevent); |
void OSMutexPost( OS_MUTEX *p_mutex, OS_OPT opt, OS_ERR *p_err); |
|
INT8U OSMutexQuery( OS_EVENT *pevent, OS_MUTEX_DATA *p_mutex_data); |
|
(4) |
-
- Mutual Exclusion Semaphore Management API
- In µC/OS-III, there is no “accept” API, since this feature is built into the OSMutexPend() by specifying the OS_OPT_PEND_NON_BLOCKING option.
- In µC/OS-II, OSMutexCreate() returns the address of an OS_EVENT, which is used as the “handle” to the message mailbox. In µC/OS-III, the application must allocate storage for an OS_MUTEX, which serves the same purpose as the OS_EVENT. The benefit in µC/OS-III is that it is not necessary to predetermine the number of mutual-exclusion semaphores at compile time.
- µC/OS-III returns additional information when a mutex is released. The releaser takes a snapshot of the current time stamp and stores it in the OS_MUTEX. The new owner of the mutex therefore knows when the mutex was released.
- µC/OS-III does not provide query services as they were rarely used.
- Mutual Exclusion Semaphore Management API