Versions Compared

Key

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

Description

Changes the current value of the semaphore count. This function is normally selected when a semaphore is used as a signaling mechanism. OSSemSet() can then be used to reset the count to any value. If the semaphore count is already 0, the count is only changed if there are no tasks waiting on the semaphore.

Files

os.h/os_sem.c

Prototype

Code Block
void  OSSemSet (OS_SEM      *p_sem,

...


                OS_SEM_CTR   cnt,

...


                OS_ERR      *p_err)

...

File

...

Called from

...

Code enabled by

...

os_sem.c

...

Task only

...

OSSemSet() is used to change the current value of the semaphore count. This function is normally selected when a semaphore is used as a signaling mechanism. OSSemSet() can then be used to reset the count to any value. If the semaphore count is already 0, the count is only changed if there are no tasks waiting on the semaphore.

Arguments

p_sem

is a pointer to the semaphore that is used as a signaling mechanism.

...

OS_ERR_NONE

If the count was changed or, not changed, because one or more tasks was waiting on the semaphore.

OS_ERR_OBJ_PTR_NULL

If OS_CFG_ARG_CHK_EN is set to 1 in DEF_ENABLED in os_cfg.h: if p_sem is a NULL pointer.

...

If OS_CFG_OBJ_TYPE_CHK_EN is set to 1 in DEF_ENABLED in os_cfg.h: if p_sem is not pointing to a semaphore.

...

If OS_CFG_CALLED_FROM_ISR_CHK_EN set to 1 in DEF_ENABLED in os_cfg.h: if this function was called from an ISR.

...

If tasks are waiting on the semaphore, the count is not changed.

Returned Value

None

Required Configuration

OS_CFG_SEM_EN and OS_CFG_SEM_SET_EN must be enabled in os_cfg.h. Refer to µC-OS-III Configuration Manual.

Callers

Application.

Notes/Warnings

  1. Do not use this function if the semaphore is used to protect a shared resource.

Example Usage

Code Block
titleOSSemSet() example usage
          OS_SEM  SwSem;
           
           
          void  Task (void  *p_arg)
          {
              OS_ERR  err;
           
           
              (void)&p_arg;
              while (DEF_ON) {
                  OSSemSet(&SwSem,      /* Reset the semaphore count */
                            0,
                           &err);
                  /* Check "err" */
                  :
                  :
              }
          }