void OS_QClr (OS_Q *p_q) { (void)OS_MsgQFreeAll(&p_q->MsgQ); /* Return all OS_MSGs to the free list */ p_q->Type = OS_OBJ_TYPE_NONE; /* Mark the data structure as a NONE */ p_q->NamePtr = (CPU_CHAR *)((void *)"?Q"); OS_MsgQInit(&p_q->MsgQ, /* Initialize the list of OS_MSGs */ 0u); OS_PendListInit(&p_q->PendList); /* Initialize the waiting list */ }
OS_MSG_QTY OSQFlush (OS_Q *p_q, OS_ERR *p_err) { OS_MSG_QTY entries; CPU_SR_ALLOC(); #ifdef OS_SAFETY_CRITICAL if (p_err == (OS_ERR *)0) { OS_SAFETY_CRITICAL_EXCEPTION(); return ((OS_MSG_QTY)0); } #endif #if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u if (OSIntNestingCtr > (OS_NESTING_CTR)0) { /* Can't flush a message queue from an ISR */ *p_err = OS_ERR_FLUSH_ISR; return ((OS_MSG_QTY)0); } #endif #if OS_CFG_ARG_CHK_EN > 0u if (p_q == (OS_Q *)0) { /* Validate arguments */ *p_err = OS_ERR_OBJ_PTR_NULL; return ((OS_MSG_QTY)0); } #endif #if OS_CFG_OBJ_TYPE_CHK_EN > 0u if (p_q->Type != OS_OBJ_TYPE_Q) { /* Make sure message queue was created */ *p_err = OS_ERR_OBJ_TYPE; return ((OS_MSG_QTY)0); } #endif OS_CRITICAL_ENTER(); entries = OS_MsgQFreeAll(&p_q->MsgQ); /* Return all OS_MSGs to the OS_MSG pool */ OS_CRITICAL_EXIT(); *p_err = OS_ERR_NONE; return ((OS_MSG_QTY)entries); }