Message Queues API Changes
This table shows the difference in API for message-queue management.
µC/OS-II (os_q.c ) | µC/OS-III (os_q.c ) | Note |
---|---|---|
void * OSQAccept( OS_EVENT *pevent, INT8U *perr); | (1) | |
OS_EVENT * OSQCreate( void **start, INT16U size); | void OSQCreate( OS_Q *p_q, CPU_CHAR *p_name, OS_MSG_QTY max_qty, OS_ERR *p_err); | (2) |
OS_EVENT * OSQDel( OS_EVENT *pevent, INT8U opt, INT8U *perr); | OS_OBJ_QTY, OSQDel( OS_Q *p_q, OS_OPT opt, OS_ERR *p_err); | |
INT8U OSQFlush( OS_EVENT *pevent); | OS_MSG_QTY OSQFlush( OS_Q *p_q, OS_ERR *p_err); | |
void * OSQPend( OS_EVENT *pevent, INT32U timeout, INT8U *perr); | void * OSQPend( OS_Q *p_q, OS_MSG_SIZE *p_msg_size, OS_TICK timeout, OS_OPT opt, CPU_TS *p_ts, OS_ERR *p_err); | (3) |
INT8U OSQPendAbort( OS_EVENT *pevent, INT8U opt, INT8U *perr); | OS_OBJ_QTY OSQPendAbort( OS_Q *p_q, OS_OPT opt, OS_ERR *p_err); | |
INT8U OSQPost( OS_EVENT *pevent, void *pmsg); | void OSQPost( OS_Q *p_q, void *p_void, OS_MSG_SIZE msg_size, OS_OPT opt, OS_ERR *p_err); | (4) |
INT8U OSQPostFront( OS_EVENT *pevent, void *pmsg); | ||
INT8U OSQPostOpt( OS_EVENT *pevent, void *pmsg, INT8U opt); | (4) | |
INT8U OSQQuery( OS_EVENT *pevent, OS_Q_DATA *p_q_data); | (5) |
(1) In µC/OS-III, there is no “accept” API as this feature is built into the OSQPend()
by specifying the OS_OPT_PEND_NON_BLOCKING
option.
(2) In µC/OS-II, OSQCreate()
returns the address of an OS_EVENT
, which is used as the “handle” to the message queue. In µC/OS-III, the application must allocate storage for an OS_Q
object, which serves the same purpose as the OS_EVENT
. The benefit in µC/OS-III is that it is not necessary to predetermine at compile time, the number of message queues.
(3) µC/OS-III returns additional information when a message queue is posted. Specifically, the sender includes the size of the message and takes a snapshot of the current timestamp and stores it in the message. The receiver of the message therefore knows when the message was posted.
(4) In µC/OS-III, OSQPost()
offers a number of options that replaces the three post functions provided in µC/OS-II.
(5) µC/OS-III does not provide query services as they were rarely used.