Exemplo n.º 1
0
void  OS_MsgPoolInit (OS_ERR  *p_err)
{
#ifdef OS_SAFETY_CRITICAL
    if (p_err == (OS_ERR *)0) {
        OS_SAFETY_CRITICAL_EXCEPTION();
        return;
    }
#endif

#if OS_CFG_ARG_CHK_EN > 0u
    if (OSCfg_MsgPoolBasePtr == (OS_MSG *)0) {
       *p_err = OS_ERR_MSG_POOL_NULL_PTR;
        return;
    }
    if (OSCfg_MsgPoolSize == (OS_MSG_QTY)0) {
       *p_err = OS_ERR_MSG_POOL_EMPTY;
        return;
    }
#endif

    OS_MsgPoolCreate(OSCfg_MsgPoolBasePtr,
                     OSCfg_MsgPoolSize);
    OSMsgPool.NextPtr    =  OSCfg_MsgPoolBasePtr;
    OSMsgPool.NbrFree    =  OSCfg_MsgPoolSize;
    OSMsgPool.NbrUsed    = (OS_MSG_QTY)0;
    OSMsgPool.NbrUsedMax = (OS_MSG_QTY)0;
   *p_err                =  OS_ERR_NONE;
}
Exemplo n.º 2
0
void  OSMsgPoolExtend (OS_MSG      *p_msg,
                       OS_MSG_QTY   size,
                       OS_ERR      *p_err)
{
#ifdef OS_SAFETY_CRITICAL
    if (p_err == (OS_ERR *)0) {
        OS_SAFETY_CRITICAL_EXCEPTION();
    }
#endif

#if OS_CFG_ARG_CHK_EN > 0u
    if (p_msg == (OS_MSG *)0) {
        *p_err = OS_ERR_MSG_POOL_NULL_PTR;
        return;
    }
    if (size == (OS_MSG_QTY)0) {
        *p_err = OS_ERR_MSG_POOL_EMPTY;
        return;
    }
#endif

    OS_MsgPoolCreate(p_msg,                                 /* Create the singly linked list                          */
                     size);
    p_msg[size - 1u].NextPtr = OSMsgPool.NextPtr;           /* Link last OS_MSG of new list to current pool           */
    OSMsgPool.NextPtr       = p_msg;
    OSMsgPool.NbrFree      += size;                         /* All new OS_MSGs are now available                      */
    *p_err                  = OS_ERR_NONE;
}