📄 sys_task.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 + -