Versions Compared

Key

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

...

Files

os.h/os_q.c

Prototype

Code Block
void  OSQPost (OS_Q         *p_q,
               void         *p_void,
               OS_MSG_SIZE   msg_size,
               OS_OPT        opt,
               OS_ERR       *p_err)

Arguments

p_q

is a pointer to the message queue being posted to.

...

You would use this option if the task (or ISR) calling OSQPost() will do additional posts, in this case, the caller does not want to reschedule until finished, and, multiple posts are to take effect simultaneously.

 

p_err

is a pointer to a variable that will contain an error code returned by this function.

...

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

...

If OS_CFG_OBJ_TYPE_CHK_EN is set to 1 in DEF_ENABLED in os_cfg.h: if p_q is not pointing to a message queue.

OS_ERR_OPT_INVALID

If OS_CFG_ARG_CHK_EN is set to DEF_ENABLED in os_cfg.h: if a valid option is not specified.

OS_ERR_OS_NOT_RUNNING

If OS_CFG_INVALID_OS_CALLS_CHK_EN is set to DEF_ENABLED in os_cfg.h: if µC/OS-III is not running yet.

OS_ERR_Q_MAX

If the queue is full and therefore cannot accept more messages.

...

OS_CFG_Q_EN must be enabled in os_cfg.h. Refer to uCµC-OS-III Configuration Manual.

Callers

Application and ISRs.

...

  1. Queues must be created before they are used.
  2. Possible combinations of options are: 
    OS_OPT_POST_FIFO
    OS_OPT_POST_LIFO
    OS_OPT_POST_FIFO + OS_OPT_POST_ALL
    OS_OPT_POST_LIFO + OS_OPT_POST_ALL
    OS_OPT_POST_FIFO + OS_OPT_POST_NO_SCHED
    OS_OPT_POST_LIFO + OS_OPT_POST_NO_SCHED
    OS_OPT_POST_FIFO + OS_OPT_POST_ALL + OS_OPT_POST_NO_SCHED
    OS_OPT_POST_LIFO + OS_OPT_POST_ALL + OS_OPT_POST_NO_SCHED
  3. Although the example below shows calling OSQPost() from a task, it can also be called from an ISR.

Example Usage

Code Block
titleOSQPost() example usage
          OS_Q         CommQ;
          CPU_INT08U   CommRxBuf[100];
           
           
          void CommTaskRx (void *p_arg)
          {
              OS_ERR  err;
           
           
              (void)&p_arg;
              while (DEF_ON) {
                  :
                  :
                  OSQPost(&CommQ,
                          &CommRxBuf[0],
                           sizeof(CommRxBuf),
                           OS_OPT_POST_FIFO + OS_OPT_POST_ALL + OS_OPT_POST_NO_SCHED,
                          &err);
                  /* Check "err" */
                  :
                  :
              }
          }