예제 #1
0
void  SerialOS_SemDel (void  *psem)
{
    INT8U       os_err;
#if (SERIAL_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
    CPU_SIZE_T  i;
#endif
    CPU_SR_ALLOC();


    OSSemPendAbort((OS_EVENT *) psem,
                   (INT8U     ) OS_PEND_OPT_BROADCAST,
                   (INT8U    *)&os_err);

    CPU_CRITICAL_ENTER();
    if (OSEventObjIx >= SERIAL_OS_MAX_NBR_SEM) {
        CPU_CRITICAL_EXIT();
        return;
    }

#if (SERIAL_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)                  /* ----------------- VALIDATE OS EVENT ---------------- */
    for (i = 0u; i < OSEventObjIx; i++) {
        if (OSEventObj[i] == (OS_EVENT *)psem) {
            CPU_CRITICAL_EXIT();
            return;
        }
    }
#endif
                                                                /* --------------- FREE OS EVENT TO POOL -------------- */
    OSEventObj[OSEventObjIx] = (OS_EVENT *)psem;
    OSEventObjIx++;

    CPU_CRITICAL_EXIT();
}
예제 #2
0
void  SerialOS_SemDel (void  *psem)
{
    LIB_ERR  lib_err;
    OS_ERR   os_err;


    OSSemPendAbort((OS_SEM  *)psem,
                   (OS_OPT   )OS_OPT_PEND_ABORT_ALL,
                   (OS_ERR  *)&os_err);

    OSSemDel((OS_SEM  *)psem,
             (OS_OPT   )OS_OPT_DEL_ALWAYS,
             (OS_ERR  *)&os_err);

    Mem_PoolBlkFree((MEM_POOL  *)&OS_SemPool,
                    (void      *) psem,
                    (LIB_ERR   *)&lib_err);
}