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.