⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_task.c

📁 abstract rtos
💻 C
字号:
#include "syscfg.h"#ifdef __cplusplusextern "C"{#endif #include "sys/sys_pub.h"#include "aos.h"AOS_INLINE U32 sys_task_prio( TASK_PRIO task_prio );AOS_INLINE U32 sys_task_create(S8 name[AOS_NAME_LEN+1],                                U32 stack_size,                               TASK_PRIO task_prio,                               U32 task_mode,                               VOID(*entry)(VOID*),                               VOID*arg,                               SYS_TASK_T *task_id,                               SYS_TASK_H *task_hd){    AOS_ASSERT_FUNC( (NULL != entry) && (NULL != task_id) && (NULL!=task_hd), return SYS_OBJ_CREATE_FAIL );    if( task_prio >= TASK_PRIO_BUTT )    {        return SYS_OBJ_CREATE_FAIL;    }        *task_id =  (SYS_TASK_T)taskSpawn(name,                                       sys_task_prio(task_prio),                                      0,                	                  stack_size,                	                  (FUNCPTR)(entry),                                      (U32)arg,                                      0,0,0,0,0,0,0,0,0);    if( (U32)ERROR == *task_id )    {        *task_id = (SYS_TASK_T)-1;        *task_hd =(SYS_TASK_H)-1;        return SYS_OBJ_CREATE_FAIL;    }    *task_hd = *task_id;    (void)task_mode;        return AOS_SUCC;}AOS_INLINE U32 sys_task_cancel(SYS_TASK_H task_hd){    WIND_TCB *pTaskTcb;    if( 0 == task_hd )    {        task_hd = (SYS_TASK_H)taskIdSelf();    }    pTaskTcb = (WIND_TCB *)task_hd;    pTaskTcb->reserved1 = 0;    pTaskTcb->reserved2 = 0;        if( OK != taskDelete( task_hd) )    {        return SYS_CALL_FAIL;    }    return AOS_SUCC;}AOS_INLINE SYS_TASK_T sys_task_self(){    return (SYS_TASK_T)taskIdSelf();}AOS_INLINE U32 sys_task_setprio(SYS_TASK_H task_hd, TASK_PRIO task_prio ){    U32 sys_prio;    sys_prio = sys_task_prio(task_prio);    if( OK != taskPrioritySet( task_hd, sys_prio ) )    {        return SYS_CALL_FAIL;    }        return AOS_SUCC;}AOS_INLINE U32 sys_task_lock(){    S32 result;        result = taskLock();    if(result != OK)    {        return SYS_CALL_FAIL;    }        return AOS_SUCC;}AOS_INLINE U32 sys_task_unlock(){    S32 result;        result = taskUnlock();    if(result != OK)    {        return SYS_CALL_FAIL;    }        return AOS_SUCC;}AOS_INLINE U32 sys_task_suspend( SYS_TASK_H task_hd ){    if( 0 == task_hd )    {        task_hd = (U32)taskIdSelf();    }    if( OK != taskSuspend( task_hd ) )    {        return SYS_CALL_FAIL;    }    return AOS_SUCC;}AOS_INLINE U32 sys_task_resume( SYS_TASK_H task_hd ){    if( 0 == task_hd )    {        task_hd = (U32)taskIdSelf();    }    if( OK != taskResume( task_hd ) )    {        return SYS_CALL_FAIL;    }    return AOS_SUCC;}AOS_INLINE U32 sys_task_delay( U32 timeout ){    U32 tick;    tick = timeout*CONFIG_TICKS_PER_SECOND/1000;    if( !tick && timeout )    {        tick++;    }    taskDelay(tick);        return AOS_SUCC;}AOS_INLINE U32 sys_task_save_id(SYS_TASK_H task_hd, U32 ulTaskID){    WIND_TCB *pTaskTcb;        if( 0 == task_hd )    {        task_hd = (U32)taskIdSelf();    }    pTaskTcb = (WIND_TCB *)task_hd;    pTaskTcb->reserved1 = (S32)0xABCDABCD;    pTaskTcb->reserved2 = (S32)ulTaskID;    return AOS_SUCC;}AOS_INLINE void sys_task_switchhook(WIND_TCB * poldtcb,WIND_TCB * pnewtcb ){    U32 ullasttaskid,ulnexttaskid;        ullasttaskid = (U32)poldtcb;    ulnexttaskid = (U32)pnewtcb;    aos_task_switchhook( ullasttaskid, ulnexttaskid );}AOS_INLINE U32 sys_task_prio( TASK_PRIO task_prio ){    U32 prio;    switch( task_prio )    {        case TASK_PRIO_IDLE:        	prio =255;        	break;        	        case TASK_PRIO_ABOVE_IDLE:        	prio =220;        	break;        case TASK_PRIO_LOWEST:        	prio =200;        	break;        case TASK_PRIO_BELOW_NORMAL:        	prio =180;        	break;        	        case TASK_PRIO_NORMAL:        	prio =160;        	break;        case TASK_PRIO_ABOVE_NORMAL:        	prio =130;        	break;        case TASK_PRIO_HIGHEST:        	prio =100;        	break;        case TASK_PRIO_TIME_CRITICAL:        	prio =10;        	break;        default:        	AOS_ASSERT(0);        	prio = 255;        	break;    }        return prio;}AOS_INLINE U32 sys_task_status(SYS_TASK_H task_hd, S8 * szStatus){    S32 ret;        ret = taskStatusString(task_hd,szStatus);    if(ret != OK)    {        aos_sprintf(szStatus,"%s","unknown");        return AOS_FAIL;    }    return AOS_SUCC;}AOS_INLINE BOOL_T sys_task_is_ready(SYS_TASK_H task_hd){	return (BOOL_T)taskIsReady(task_hd);}AOS_INLINE U32 sys_task_sp(SYS_TASK_H task_hd){    WIND_TCB *pTaskTcb;        if( 0 == task_hd )    {        task_hd = (SYS_TASK_H)taskIdSelf();    }    pTaskTcb = (WIND_TCB *)task_hd;    #if ( _CPU_ARM )    return (U32)(pTaskTcb->regs.r[13]);#elif ( _CPU_MIPS )    return pTaskTcb->regs.gpreg[29];#elif( _CPU_PPC )    return (U32)(pTaskTcb->regs.gpr[1]);#endif            #if 0    TASK_DESC task_desc;    if(taskInfoGet(task_hd,&task_desc) != OK)    {        return 0;    }    return (U32)(task_desc.td_sp);    #endif}AOS_INLINE U32 sys_task_bp(SYS_TASK_H task_hd){    WIND_TCB *pTaskTcb;        if( 0 == task_hd )    {        task_hd = (SYS_TASK_H)taskIdSelf();    }    pTaskTcb = (WIND_TCB *)task_hd;    return (U32)(pTaskTcb->pStackBase);    }AOS_INLINE U32 sys_task_pc(SYS_TASK_H task_hd){    WIND_TCB *pTaskTcb;        if( 0 == task_hd )    {        task_hd = (SYS_TASK_H)taskIdSelf();    }    pTaskTcb = (WIND_TCB *)task_hd;        return (U32)(pTaskTcb->regs.pc);}#ifdef __cplusplus}#endif 

⌨️ 快捷键说明

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