Versions Compared

Key

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

...

Description

Creates a message queue. A message queue allows tasks or ISRs to send pointer-sized variables (messages) to one or more tasks. The meaning of the messages sent are application specific.

Files

os.h/os_q.c

Prototype

Code Block
void  OSQCreate (OS_Q        *p_q,
                 CPU_CHAR    *p_name,
                 OS_MSG_QTY   max_qty,
                 OS_ERR      *p_err)

Arguments

p_q

is a pointer to the message queue control block. It is assumed that storage for the message queue will be allocated in the application. The user will need to declare a “global” variable as follows, and pass a pointer to this variable to OSQCreate():

...

OS_Q

...

 MyMsgQ;

...

1001835p_name Anchor10018361001836

is a pointer to an ASCII string used to name the message queue. The name can be displayed by debuggers or µC/Probe.

Anchor10018381001838msg_qty Anchor10018391001839

indicates the maximum size of the message queue (must be non-zero). If the user intends to not limit the size of the queue, simply pass a very large number. Of course, if there are not enough OS_MSGs in the pool of OS_MSGs, the post call (i.e., OSQPost()) will simply fail and an error code will indicate that there are no more OS_MSGs to use.

...

p_erranchor10018411001841

is a pointer to a variable that is used to hold an error code:

...

classWebWorks_Indent_1

...

OS_ERR_NONE

...

classWebWorks_Indent_2

...

If the call is successful and the mutex has been created.

...

classWebWorks_Indent_1

...

OS_ERR_CREATE_ISR

...

classWebWorks_Indent_2

...

If OS_CFG_CALLED_FROM_ISR_CHK_EN set to

...

DEF_ENABLED in os_cfg.h: if attempting to create the message queue from an ISR.

...

classWebWorks_Indent_1

...

OS_ERR_ILLEGAL_CREATE_RUN_TIME

If OS_SAFETY_CRITICAL_IEC61508 is defined: you called this after calling OSStart() and thus you are no longer allowed to create additional kernel objects.

OS_ERR_OBJ_PTR_NULL

...

classWebWorks_Indent_2

...

If OS_CFG_ARG_CHK_EN is set to

...

DEF_ENABLED in os_cfg.h: if p_q is a NULL pointer.

...

classWebWorks_Indent_1

...

OS_ERR_Q_SIZE

...

classWebWorks_Indent_2

...

If OS_CFG_ARG_CHK_EN is set to

...

DEF_ENABLED in os_cfg.h: if the size specified is 0.

...

Returned Value

...

classWebWorks_Indent_1

...

None

Required Configuration

OS_

...

CFG_

...

classWebWorks_Indent_2

...

Anchor10018541001854 Returned Value Anchor10018551001855 None Anchor10505931050593 Notes/Warnings Anchor10505941050594Q_EN must be enabled in os_cfg.h. Refer to µC-OS-III Configuration Manual.

Callers

Application.

Notes/Warnings

  1. Queues must be created before they are used.

...

...

Example Usage

...

Code Block

...

OS_Q CommQ;     void main (void) { OS_ERR err;     OSInit(&err); /* Initialize µC/OS-III */ : : OSQCreate(&CommQ, “Comm Queue”, 10, &err); /* Create COMM Q */ /* Check “err” */ : : OSStart(); /* Start Multitasking */ }tr
HTML Table
summary
classCode_Listing
Table Row (tr)
Table Cell (td)
rowspan16
Anchor
10505971050597
Anchor
10505981050598
Anchor
10505991050599
Anchor
10506001050600
Anchor
10506011050601
Anchor
10506021050602
Anchor
10506031050603
Anchor
10506041050604
Anchor
10506051050605
Anchor
10506061050606
Anchor
10506071050607
Anchor
10506081050608
Anchor
10506091050609
Anchor
10506101050610
Anchor
10506111050611
Anchor
10506121050612
Anchor
10506131050613
Anchor
10506141050614
Anchor
10506151050615
Anchor
10506161050616
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
Table Row (tr)
titleOSQCreate() example usage
          OS_Q   CommQ;
           
           
          void main (void)
          {
              OS_ERR   err;
           
           
              OSInit(&err);                          /* Initialize µC/OS-III  */
              :
              :
              OSQCreate(&CommQ,
                        "Comm Queue",
                         10,
                        &err);                       /* Create COMM Q         */
              /* Check "err" */
              :
              :
              OSStart();                             /* Start Multitasking    */
          }