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; }
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; }