47 struct stTask       __astUserTaskPool[MAX_NUM_USER_TASKS];
    48 uint8_t               __au8UserTaskStructIndex[MAX_NUM_USER_TASKS];
    50 uint8_t               __u8UserTasksRegistered;
    51 uint8_t               __u8ChildTasksRegistered;
    52 uint16_t              __u16NumTasksEverCreated;
    55 struct stTimer        __astTmrSvcs[MAX_NUM_TMRS];
    56 uint8_t                 __esos_u8TmrSvcsRegistered;
    57 uint16_t                __esos_u16TmrActiveFlags;
    59 #ifdef ESOS_USE_BULK_CDC_USB    60 static struct stTask        __stUsbCommSystem;
    64 MAILBOX     __astMailbox[MAX_NUM_USER_TASKS];
    65 uint8_t       __au8_MBData[MAX_NUM_USER_TASKS][MAX_SIZE_TASK_MAILBOX];
    66 CBUFFER     __astCircularBuffers[MAX_NUM_USER_TASKS];
    70 uint16_t      __esos_u16UserFlags, __esos_u16SystemFlags;
    71 uint32_t            __u32_esos_PRNG_Seed;
    72 uint32_t            __esos_u32FNVHash = 2166136261uL;
    93   if (__u8UserTasksRegistered < MAX_NUM_USER_TASKS) {
    98     for (u8_i=0; u8_i<MAX_NUM_USER_TASKS; u8_i++) {
    99       if (__astUserTaskPool[u8_i].pfn == taskname) {
   108       if ((!u8_FoundFree) && (__astUserTaskPool[u8_i].pfn == 
NULLPTR)) {
   128       __astUserTaskPool[u8_IndexFcn].flags = 0;                           
   130       __au8UserTaskStructIndex[__u8UserTasksRegistered] = u8_IndexFcn;
   131       __u8UserTasksRegistered++;
   133       if ( __astUserTaskPool[u8_IndexFree].u16_taskID == 0 ) {
   135         __u16NumTasksEverCreated++;
   136         __astUserTaskPool[u8_IndexFree].u16_taskID = __u16NumTasksEverCreated;
   138       return &__astUserTaskPool[u8_IndexFcn];
   147       __astUserTaskPool[u8_IndexFree].pfn = taskname;                   
   149       __astUserTaskPool[u8_IndexFree].flags = 0;                        
   151       __au8UserTaskStructIndex[__u8UserTasksRegistered] = u8_IndexFree;
   152       __u8UserTasksRegistered++;
   154       __u16NumTasksEverCreated++;
   155       __astUserTaskPool[u8_IndexFree].u16_taskID = __u16NumTasksEverCreated;
   156       return &__astUserTaskPool[u8_IndexFree];
   188   for (u8_i=0; u8_i<__u8UserTasksRegistered; u8_i++) {
   190     u8_z = __au8UserTaskStructIndex[u8_i];
   196     if ((u8_z != 
NULLIDX) & (u8_z != REMOVE_IDX)) {
   197       pstNowTask = &__astUserTaskPool[u8_z];
   199       if (pstNowTask->pfn == taskname) {
   200         __au8UserTaskStructIndex[u8_i] = REMOVE_IDX;
   201         __esos_SetSystemFlag( __ESOS_SYS_FLAG_PACK_TASKS );
   227   for (u8_i=0; u8_i<__u8UserTasksRegistered; u8_i++) {
   229     u8_z = __au8UserTaskStructIndex[u8_i];
   234     if ((u8_z != 
NULLIDX) & (u8_z != REMOVE_IDX)) {
   235       pst_NowTask = &__astUserTaskPool[u8_z];
   237       if (pst_NowTask->pfn == taskname) {
   238         pst_ReturnTask = pst_NowTask;
   243   return pst_ReturnTask;
   263   for (u8_i=0; u8_i<__u8UserTasksRegistered; u8_i++) {
   265     u8_z = __au8UserTaskStructIndex[u8_i];
   270     if ((u8_z != 
NULLIDX) & (u8_z != REMOVE_IDX)) {
   271       pst_NowTask = &__astUserTaskPool[u8_z];
   273       if (pst_NowTask->u16_taskID == u16_TaskID) {
   274         pst_ReturnTask = pst_NowTask;
   279   return pst_ReturnTask;
   303       return &__astChildTaskPool[u16_i];
   323   __u32_esos_PRNG_Seed = u32_in;
   335   lo = 16807 * ( __u32_esos_PRNG_Seed * 0xFFFF );
   336   hi = 16807 * ( __u32_esos_PRNG_Seed >> 16 );
   337   lo += (hi & 0x7FFF) << 16;
   339   if (lo > 0x7FFFFFFF) lo -= 0x7FFFFFFF;
   340   return (__u32_esos_PRNG_Seed = (uint32_t) lo );
   348 uint16_t    esos_taskname_hash_u16( 
void* buf, uint16_t len ) {
   349   unsigned char *bp = (
unsigned char *)buf; 
   350   unsigned char *be = bp + len;   
   351   uint32_t        u32_temp = 2166136261uL;
   358     u32_temp += (u32_temp<<1) + (u32_temp<<4) + (u32_temp<<7) + (u32_temp<<8) + (u32_temp<<24);
   361     u32_temp ^= (uint32_t)*bp++;
   363   return (uint16_t) ((u32_temp >> 16) ^ (u32_temp & 0xFFFF));
   380   unsigned char *bp = (
unsigned char *)buf; 
   381   unsigned char *be = bp + len;           
   389 #if defined(NO_FNV_GCC_OPTIMIZATION)   390     __esos_u32FNVHash *= FNV_32_PRIME;
   392     __esos_u32FNVHash += (__esos_u32FNVHash<<1) + (__esos_u32FNVHash<<4) + (__esos_u32FNVHash<<7) + (__esos_u32FNVHash<<8) + (__esos_u32FNVHash<<24);
   396     __esos_u32FNVHash ^= (uint32_t)*bp++;
   400   return __esos_u32FNVHash;
   416   unsigned char *ch_s = (
unsigned char *)psz_str; 
   424 #if defined(NO_FNV_GCC_OPTIMIZATION)   425     __esos_u32FNVHash *= FNV_32_PRIME;
   427     __esos_u32FNVHash += (__esos_u32FNVHash<<1) + (__esos_u32FNVHash<<4) + (__esos_u32FNVHash<<7) + (__esos_u32FNVHash<<8) + (__esos_u32FNVHash<<24);
   431     __esos_u32FNVHash ^= (uint32_t)*ch_s++;
   435   return __esos_u32FNVHash;
   438 inline uint16_t esos_hash_u32_to_u16(uint32_t u32_hash) {
   439   return  (uint16_t) ((u32_hash>>16) ^ (u32_hash&0xFFFF));
   448   return MAX_NUM_USER_TASKS;
   460 uint16_t  __esos_hasTickDurationPassed(uint32_t u32_startTick, uint32_t u32_period) {
   461   uint32_t    u32_delta, u32_current;
   464   u32_delta = u32_current - u32_startTick;
   465   if (u32_current < u32_startTick)
   466     u32_delta += 0xFFFFFFFF;    
   467   if (u32_delta > u32_period)
   478 void __esos_tmrSvcsExecute(
void) {
   481   u8_cnt = __esos_u8TmrSvcsRegistered;
   486       __astTmrSvcs[u8_index].u32_cntDown--;
   487       if (__astTmrSvcs[u8_index].u32_cntDown == 0 ) {
   488         __astTmrSvcs[u8_index].u32_cntDown = __astTmrSvcs[u8_index].u32_period;
   489         __astTmrSvcs[u8_index].pfn();
   518     for (u8_i=0; u8_i<MAX_NUM_TMRS; u8_i++ ) {
   520         __astTmrSvcs[u8_i].pfn = timername;
   521         __astTmrSvcs[u8_i].u32_period = u32_period;
   522         __astTmrSvcs[u8_i].u32_cntDown = u32_period;
   523         __esos_u8TmrSvcsRegistered++;
   524         __esos_MarkTimerRunning( u8_i );
   528     return ESOS_TMR_FAILURE;
   531     return ESOS_TMR_FAILURE;
   546     __astTmrSvcs[hnd_timer].pfn = 
NULLPTR;
   547     __esos_u8TmrSvcsRegistered--;
   548     __esos_MarkTimerStopped(hnd_timer);
   571       if ( __astTmrSvcs[u8_i].pfn == pfnTmrFcn ) 
return u8_i;
   576   return ESOS_TMR_FAILURE;
   594     __astTmrSvcs[hnd_timer].u32_period = u32_period;
   599 void __esosInit(
void) {
   603   for (u8_i=0; u8_i<MAX_NUM_USER_TASKS; u8_i++) {
   604     __astUserTaskPool[u8_i].pfn = 
NULLPTR;
   605     __au8UserTaskStructIndex[u8_i] = 
NULLIDX;
   606     __astChildTaskPool[u8_i].pfn = 
NULLPTR;
   608     __astUserTaskPool[u8_i].pst_Mailbox = &__astMailbox[u8_i];
   609     (__astUserTaskPool[u8_i].pst_Mailbox)->pst_CBuffer = &__astCircularBuffers[u8_i];
   610     __esos_InitMailbox(__astUserTaskPool[u8_i].pst_Mailbox, &__au8_MBData[u8_i][0]);
   612   __esos_u16TmrActiveFlags = 0;
   613   for (u8_i=0; u8_i<MAX_NUM_TMRS; u8_i++) {
   614     __astTmrSvcs[u8_i].pfn = 
NULLPTR;
   618   __u8UserTasksRegistered = 0;
   620   __u8ChildTasksRegistered = 0;
   622   __esos_u8TmrSvcsRegistered = 0;
   625   __u32_esos_PRNG_Seed = MAX_NUM_USER_TASKS;
   630   __esos_hw_InitSystemTick();
   637   _esos_hw_InitUserInterrupts();
   647 #ifdef  ESOS_USE_BULK_CDC_USB   648   __esos_InitCommSystem();
   650 #ifdef ESOS_USE_SERIAL_PORT   651   __esos_InitCommSystem();
   660   uint8_t             u8i ,u8j, u8NumRegdTasksTemp;
   667   __u16NumTasksEverCreated = 0;
   679     u8NumRegdTasksTemp = __u8UserTasksRegistered;
   682     while ( u8i < u8NumRegdTasksTemp  ) {
   688       pstNowTask = &__astUserTaskPool[__au8UserTaskStructIndex[u8i]];
   689       u8TaskReturnedVal = pstNowTask->pfn( pstNowTask );
   690       if (u8TaskReturnedVal == ESOS_TASK_ENDED) {
   702     if (__esos_IsSystemFlagSet( __ESOS_SYS_FLAG_PACK_TASKS) ) {
   715       u8i = __u8UserTasksRegistered;
   718         pstNowTask = &__astUserTaskPool[u8i];
   719         if (__au8UserTaskStructIndex[u8i] == REMOVE_IDX) {
   720           for ( u8j=u8i+1; u8j<u8NumRegdTasksTemp; u8j++) {
   721             __au8UserTaskStructIndex[u8j-1] = __au8UserTaskStructIndex[u8j];
   723           __au8UserTaskStructIndex[u8NumRegdTasksTemp-1] = 
NULLIDX;
   724           u8NumRegdTasksTemp--;
   738       __u8UserTasksRegistered=u8NumRegdTasksTemp;   
   739       __esos_ClearSystemFlag( __ESOS_SYS_FLAG_PACK_TASKS );
 ESOS_TMR_HANDLE esos_GetTimerHandle(void(*pfnTmrFcn)(void))
#define esos_GetSystemTick()
uint32_t esos_buffer_hash_u32(void *buf, uint16_t len)
ESOS_TASK_HANDLE esos_RegisterTask(uint8_t(*taskname)(ESOS_TASK_HANDLE pstTask))
uint32_t esos_GetRandomUint32(void)
ESOS_TMR_HANDLE esos_RegisterTimer(void(*timername)(void), uint32_t u32_period)
#define ESOS_IS_TASK_INITED(TaskHandle)
uint32_t esos_string_hash_u32(char *psz_str)
ESOS_TASK_HANDLE esos_GetTaskHandleFromID(uint16_t u16_TaskID)
#define esos_IsTimerRunning(hndl)
uint8_t esos_UnregisterTimer(ESOS_TMR_HANDLE hnd_timer)
#define ESOS_TASK_FLUSH_TASK_MAILBOX(pstTask)
#define esos_GetNumberRunningTimers()
uint8_t esos_GetMaxNumberTasks(void)
ESOS_TASK_HANDLE esos_GetTaskHandle(uint8_t(*taskname)(ESOS_TASK_HANDLE pstTask))
void esos_SetRandomUint32Seed(uint32_t u32_in)
uint8_t esos_ChangeTimerPeriod(ESOS_TMR_HANDLE hnd_timer, uint32_t u32_period)
uint8_t esos_UnregisterTask(uint8_t(*taskname)(ESOS_TASK_HANDLE pstTask))
#define __ESOS_INIT_TASK(TaskHandle)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer. 
#define MAX_NUM_CHILD_TASKS
ESOS_TASK_HANDLE esos_GetFreeChildTaskStruct()