sys_sem.c

来自「abstract rtos」· C语言 代码 · 共 148 行

C
148
字号
#include "syscfg.h"#ifdef __cplusplus#if __cplusplusextern "C"{#endif #endif #include "sys/sys_pub.h"#include "os/assert_pub.h"AOS_ASSERTFILE()AOS_INLINE U32 sys_sem_create( S8 name[AOS_NAME_LEN+1], U32 flags, U32 value, SYS_SEM_T *sem ){    AOS_ASSERT( (SYS_SEM_T *)NULL != sem );    if(sem == NULL)    {        return SYS_OBJ_CREATE_FAIL;    }        *sem = CreateSemaphore( NULL, (S32)value,2147483647,NULL );    if( NULL == *sem )    {        return SYS_OBJ_CREATE_FAIL;    }    (void)name;    (void)flags;        return AOS_SUCC;}AOS_INLINE U32 sys_sem_cancel(SYS_SEM_T *sem){    AOS_ASSERT( (SYS_SEM_T *)NULL != sem );    if(sem == NULL)    {        return SYS_CALL_FAIL;    }    if( 0 == CloseHandle(*sem)  )     {        return SYS_CALL_FAIL;    }        return AOS_SUCC;}AOS_INLINE U32 sys_sem_wait( SYS_SEM_T *sem, U32 time_out ){    U32 result;    AOS_ASSERT( (SYS_SEM_T *)NULL != sem );    if(sem == NULL)    {        return SYS_OBJ_INVALID;    }        if( 0 == time_out )    {        time_out = INFINITE;    }        result = WaitForSingleObject( *sem, time_out );    if( WAIT_OBJECT_0 == result )    {    	result = AOS_SUCC;    }    else if( WAIT_TIMEOUT == result )    {       result = SYS_WAIT_TIMEOUT;    }    else if( WAIT_FAILED == result )    {        result = SYS_OBJ_INVALID;    }    else    {        result = SYS_CALL_FAIL;    }    return result;}AOS_INLINE U32 sys_sem_trywait( SYS_SEM_T *sem ){    U32 result;        AOS_ASSERT( (SYS_SEM_T *)NULL != sem );    if(sem == NULL)    {        return SYS_OBJ_INVALID;    }    result = WaitForSingleObject( *sem, 0 );    if( WAIT_OBJECT_0 == result )    {    	result = AOS_SUCC;    }    else if( WAIT_TIMEOUT == result )    {       result = SYS_WAIT_TIMEOUT;    }    else if( WAIT_FAILED == result )    {        result = SYS_OBJ_INVALID;    }    else    {        result = SYS_CALL_FAIL;    }    return result;}AOS_INLINE U32 sys_sem_post( SYS_SEM_T *sem ){    AOS_ASSERT( (SYS_SEM_T *)NULL != sem );    if(sem == NULL)    {        return SYS_OBJ_INVALID;    }    if( 0 == ReleaseSemaphore( *sem, 1, NULL) )    {        return SYS_CALL_FAIL;    }    return AOS_SUCC;}#ifdef __cplusplus#if __cplusplus}#endif #endif 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?