Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Anchor10776291077629 Mutual Exclusion Semaphores Anchor10776621077662 .NamePtr Anchor10776641077664 This is a pointer to an ASCII string used to provide a name to the mutual exclusion semaphore. The ASCII string can have any length as long as it is NUL terminated. Anchor10776551077655 .PendList.NbrEntries Anchor10776591077659 Each mutual exclusion semaphore contains a list of tasks waiting for the semaphore to be released. The variable represents the number of entries in the wait list. Anchor10648251064825 .OwnerOriginalPrio Anchor10648261064826 This variable holds the original priority of the task that owns the mutual exclusion semaphore. Anchor10648271064827 .OwnerTCBPtr->Prio Anchor10648281064828 Dereferencing the pointer to the OS_TCB of the mutual exclusion semaphore owner allows the application to determine whether a task priority was changed. Anchor10648291064829 .OwnerNestingCtr Anchor10648301064830 This variable indicates how many times the owner of the mutual exclusion semaphore requested the semaphore. Anchor10648311064831 .TS Anchor10648321064832 This variable contains the timestamp of when the mutual exclusion semaphore was last releasedThe table below shows the difference in API for mutual exclusion semaphore management.

Panel
titleMutual Exclusion Semaphores API


µ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)



Panel
bgColor#f0f0f0

(1) 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.

(2) 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.

(3) µ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.

(4) µC/OS-III does not provide query services as they were rarely used.