49 #ifndef __ESOS_TASK_H__ 50 #define __ESOS_TASK_H__ 58 uint8_t (*pfn) (
struct stTask *pst_Task);
59 uint32_t u32_savedTick;
85 #define ESOS_TASK_WAITING 0 86 #define ESOS_TASK_ENDED 3 90 #define __TASK_MAILNACK_MASK BIT5 92 #define __TASK_HASMAIL_MASK BIT4 95 #define __TASK_ENDED_MASK BIT3 97 #define __TASK_KILLED_MASK BIT2 99 #define __TASK_SLEEPING_MASK BIT1 101 #define __TASK_WAITING_MASK BIT0 103 #define __TASK_CALLED_MASK BIT7 106 #define __ESOS_SET_TASK_SLEEPING_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_SLEEPING_MASK) 107 #define __ESOS_CLEAR_TASK_SLEEPING_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_SLEEPING_MASK) 108 #define __ESOS_SET_TASK_KILLED_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_KILLED_MASK) 109 #define __ESOS_CLEAR_TASK_KILLED_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_KILLED_MASK) 110 #define __ESOS_SET_TASK_WAITING_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_WAITING_MASK) 111 #define __ESOS_CLEAR_TASK_WAITING_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_WAITING_MASK) 112 #define __ESOS_SET_TASK_CALLED_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_CALLED_MASK) 113 #define __ESOS_CLEAR_TASK_CALLED_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_CALLED_MASK) 114 #define __ESOS_IS_TASK_CALLED(TaskHandle) IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_CALLED_MASK) 115 #define __ESOS_SET_TASK_ENDED_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_ENDED_MASK) 116 #define __ESOS_CLEAR_TASK_ENDED_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_ENDED_MASK) 119 #define __ESOS_SET_TASK_HASMAIL_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_HASMAIL_MASK) 120 #define __ESOS_CLEAR_TASK_HASMAIL_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_HASMAIL_MASK) 121 #define __ESOS_SET_TASK_MAILNACK_FLAG(TaskHandle) BIT_SET_MASK((TaskHandle)->flags, __TASK_MAILNACK_MASK) 122 #define __ESOS_CLEAR_TASK_MAILNACK_FLAG(TaskHandle) BIT_CLEAR_MASK((TaskHandle)->flags, __TASK_MAILNACK_MASK) 143 #define __ESOS_INIT_TASK(TaskHandle) \ 144 LC_INIT((TaskHandle)->lc); 167 #define ESOS_IS_TASK_INITED(TaskHandle) LC_IS_INITED((TaskHandle)->lc) 176 #define ESOS_IS_TASK_SLEEPING(TaskHandle) IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_SLEEPING_MASK) 185 #define ESOS_IS_TASK_KILLED(TaskHandle) IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_KILLED_MASK) 194 #define ESOS_IS_TASK_WAITING(TaskHandle) IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_WAITING_MASK) 205 #define ESOS_IS_TASK_ENDED(TaskHandle) IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_ENDED_MASK) 228 #define ESOS_USER_TASK(taskname) uint8_t taskname(ESOS_TASK_HANDLE __pstSelf) 247 #define ESOS_CHILD_TASK(taskname, ...) uint8_t taskname(ESOS_TASK_HANDLE __pstSelf, ##__VA_ARGS__) 260 #define ESOS_TASK_BEGIN() \ 261 { __ESOS_SET_TASK_CALLED_FLAG(__pstSelf); \ 262 LC_RESUME(__pstSelf->lc) 272 #define ESOS_TASK_END() \ 273 LC_END(__pstSelf->lc); \ 274 __pstSelf->flags = __TASK_ENDED_MASK; \ 275 __ESOS_INIT_TASK(__pstSelf); \ 276 return ESOS_TASK_ENDED; } 290 #define ESOS_TASK_GET_TASK_HANDLE() __pstSelf 314 #define ESOS_SCHEDULE_TASK(pfnThread) ( (pfnThread) < ESOS_TASK_ENDED ) 336 #define ESOS_TASK_WAIT_UNTIL(condition) \ 338 LC_SET(__pstSelf->lc); \ 339 if(ESOS_IS_TASK_KILLED(__pstSelf)) { \ 340 __pstSelf->flags = __TASK_KILLED_MASK; \ 341 return ESOS_TASK_ENDED; \ 344 __ESOS_CLEAR_TASK_WAITING_FLAG(__pstSelf); \ 347 __ESOS_SET_TASK_WAITING_FLAG(__pstSelf); \ 349 if(ESOS_IS_TASK_WAITING(__pstSelf)) { \ 350 return ESOS_TASK_WAITING; \ 364 #define ESOS_TASK_WAIT_WHILE(cond) ESOS_TASK_WAIT_UNTIL(!(cond)) 376 #define ESOS_TASK_WAIT_TICKS(u32_duration) \ 378 __pstSelf->u32_savedTick = esos_GetSystemTick(); \ 379 __pstSelf->u32_waitLen = (u32_duration); \ 380 ESOS_TASK_WAIT_UNTIL(__esos_hasTickDurationPassed(__pstSelf->u32_savedTick, __pstSelf->u32_waitLen) ); \ 386 #define __ESOS_TASK_SPAWN(pstChild, fcnCallWithArgs) \ 388 __ESOS_INIT_TASK((pstChild)); \ 389 ESOS_TASK_WAIT_THREAD((fcnCallWithArgs)); \ 419 #define ESOS_TASK_WAIT_THREAD(pfnChild, ...) ESOS_TASK_WAIT_WHILE(ESOS_SCHEDULE_TASK(pfnChild,##__VA_ARGS__ )) 436 #define ESOS_TASK_SPAWN_AND_WAIT(pstChild, pfnChild, ...) \ 437 __ESOS_TASK_SPAWN((pstChild), (pfnChild)( (pstChild), ##__VA_ARGS__) ) 448 #define ESOS_ALLOCATE_CHILD_TASK(pstName) (pstName)=esos_GetFreeChildTaskStruct() 479 #define ESOS_TASK_SLEEP() \ 481 __ESOS_SET_TASK_SLEEPING_FLAG(__pstSelf); \ 482 ESOS_TASK_WAIT_WHILE(ESOS_IS_TASK_SLEEPING(__pstSelf)); \ 494 #define ESOS_TASK_RESTART() \ 496 __pstSelf->flags = 0; \ 497 __ESOS_INIT_TASK(__pstSelf); \ 498 return ESOS_TASK_WAITING; \ 513 #define ESOS_TASK_EXIT() \ 515 __pstSelf->flags = __TASK_ENDED_MASK; \ 516 return ESOS_TASK_ENDED; \ 534 #define ESOS_WAKE_TASK(TaskHandle) __ESOS_TASK_CLEAR_SLEEPING_FLAG((TaskHandle)) 547 #define ESOS_KILL_TASK(TaskHandle) __ESOS_TASK_SET_KILLED_FLAG((TaskHandle)) 565 #define ESOS_RESTART_TASK(TaskHandle) \ 567 (TaskHandle)->flags = 0; \ 568 __ESOS_INIT_TASK((TaskHandle)); \ 590 #define ESOS_TASK_YIELD() \ 592 __ESOS_CLEAR_TASK_CALLED_FLAG(__pstSelf); \ 593 ESOS_TASK_WAIT_UNTIL(__ESOS_IS_TASK_CALLED(__pstSelf)); \ 632 #define ESOS_SEMAPHORE(semaphoreName) struct stSemaphore (semaphoreName) 650 #define ESOS_INIT_SEMAPHORE(semaphoreName, i16_val) (semaphoreName).i16_cnt=(i16_val) 667 #define ESOS_TASK_WAIT_SEMAPHORE(semaphoreName, i16_val) \ 669 ESOS_TASK_WAIT_UNTIL((semaphoreName).i16_cnt >= (i16_val) ); \ 670 (semaphoreName).i16_cnt -= (i16_val); \ 687 #define ESOS_SIGNAL_SEMAPHORE(semaphoreName, i16_val) (semaphoreName).i16_cnt+=(i16_val)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.