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

📄 os_core.c

📁 完整的ucos实例
💻 C
📖 第 1 页 / 共 4 页
字号:
*/ 
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0) 
void  OS_EventWaitListInit (OS_EVENT *pevent) 
{ 
    INT8U  *ptbl; 
 
 
    pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */ 
    ptbl               = &pevent->OSEventTbl[0]; 
 
#if OS_EVENT_TBL_SIZE > 0 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 1 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 2 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 3 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 4 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 5 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 6 
    *ptbl++            = 0x00; 
#endif 
 
#if OS_EVENT_TBL_SIZE > 7 
    *ptbl              = 0x00; 
#endif 
} 
#endif 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                           INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS 
* 
* Description: This function is called by OSInit() to initialize the free list of event control blocks. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
static  void  OS_InitEventList (void) 
{ 
#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0) 
#if (OS_MAX_EVENTS > 1) 
    INT16U     i; 
    OS_EVENT  *pevent1; 
    OS_EVENT  *pevent2; 
 
 
    pevent1 = &OSEventTbl[0]; 
    pevent2 = &OSEventTbl[1]; 
    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */ 
        pevent1->OSEventType = OS_EVENT_TYPE_UNUSED; 
        pevent1->OSEventPtr  = pevent2; 
        pevent1++; 
        pevent2++; 
    } 
    pevent1->OSEventType = OS_EVENT_TYPE_UNUSED; 
    pevent1->OSEventPtr  = (OS_EVENT *)0; 
    OSEventFreeList      = &OSEventTbl[0]; 
#else 
    OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */ 
    OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED; 
    OSEventFreeList->OSEventPtr  = (OS_EVENT *)0; 
#endif 
#endif 
} 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                                    INITIALIZE MISCELLANEOUS VARIABLES 
* 
* Description: This function is called by OSInit() to initialize miscellaneous variables. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
static  void  OS_InitMisc (void) 
{ 
#if OS_TIME_GET_SET_EN > 0    
    OSTime        = 0L;                                          /* Clear the 32-bit system clock            */ 
#endif 
 
    OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */ 
    OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */ 
 
    OSTaskCtr     = 0;                                           /* Clear the number of tasks                */ 
 
    OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */ 
     
    OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */ 
    OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */ 
 
#if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0) 
    OSIdleCtrRun  = 0L; 
    OSIdleCtrMax  = 0L; 
    OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */ 
#endif 
} 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                                       INITIALIZE THE READY LIST 
* 
* Description: This function is called by OSInit() to initialize the Ready List. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
static  void  OS_InitRdyList (void) 
{ 
    INT16U   i; 
    INT8U   *prdytbl; 
 
 
    OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */ 
    prdytbl       = &OSRdyTbl[0]; 
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) { 
        *prdytbl++ = 0x00; 
    } 
 
    OSPrioCur     = 0; 
    OSPrioHighRdy = 0; 
 
    OSTCBHighRdy  = (OS_TCB *)0;                                  
    OSTCBCur      = (OS_TCB *)0; 
} 
 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                                         CREATING THE IDLE TASK 
* 
* Description: This function creates the Idle Task. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
static  void  OS_InitTaskIdle (void) 
{ 
#if OS_TASK_CREATE_EXT_EN > 0 
    #if OS_STK_GROWTH == 1 
    (void)OSTaskCreateExt(OS_TaskIdle, 
                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */ 
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */ 
                          OS_IDLE_PRIO,                              /* Lowest priority level                */ 
                          OS_TASK_IDLE_ID, 
                          &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */ 
                          OS_TASK_IDLE_STK_SIZE, 
                          (void *)0,                                 /* No TCB extension                     */ 
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */ 
    #else 
    (void)OSTaskCreateExt(OS_TaskIdle, 
                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */ 
                          &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */ 
                          OS_IDLE_PRIO,                              /* Lowest priority level                */ 
                          OS_TASK_IDLE_ID, 
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */ 
                          OS_TASK_IDLE_STK_SIZE, 
                          (void *)0,                                 /* No TCB extension                     */ 
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */ 
    #endif 
#else 
    #if OS_STK_GROWTH == 1 
    (void)OSTaskCreate(OS_TaskIdle, 
                       (void *)0, 
                       &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], 
                       OS_IDLE_PRIO); 
    #else 
    (void)OSTaskCreate(OS_TaskIdle, 
                       (void *)0, 
                       &OSTaskIdleStk[0], 
                       OS_IDLE_PRIO); 
    #endif 
#endif 
} 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                                      CREATING THE STATISTIC TASK 
* 
* Description: This function creates the Statistic Task. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
#if OS_TASK_STAT_EN > 0 
static  void  OS_InitTaskStat (void) 
{ 
#if OS_TASK_CREATE_EXT_EN > 0 
    #if OS_STK_GROWTH == 1 
    (void)OSTaskCreateExt(OS_TaskStat, 
                          (void *)0,                                   /* No args passed to OS_TaskStat()*/ 
                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */ 
                          OS_STAT_PRIO,                                /* One higher than the idle task  */ 
                          OS_TASK_STAT_ID, 
                          &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */ 
                          OS_TASK_STAT_STK_SIZE, 
                          (void *)0,                                   /* No TCB extension               */ 
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */ 
    #else 
    (void)OSTaskCreateExt(OS_TaskStat, 
                          (void *)0,                                   /* No args passed to OS_TaskStat()*/ 
                          &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */ 
                          OS_STAT_PRIO,                                /* One higher than the idle task  */ 
                          OS_TASK_STAT_ID, 
                          &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */ 
                          OS_TASK_STAT_STK_SIZE, 
                          (void *)0,                                   /* No TCB extension               */ 
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */ 
    #endif 
#else 
    #if OS_STK_GROWTH == 1 
    (void)OSTaskCreate(OS_TaskStat, 
                       (void *)0,                                      /* No args passed to OS_TaskStat()*/ 
                       &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */ 
                       OS_STAT_PRIO);                                  /* One higher than the idle task  */ 
    #else 
    (void)OSTaskCreate(OS_TaskStat, 
                       (void *)0,                                      /* No args passed to OS_TaskStat()*/ 
                       &OSTaskStatStk[0],                              /* Set Top-Of-Stack               */ 
                       OS_STAT_PRIO);                                  /* One higher than the idle task  */ 
    #endif 
#endif 
} 
#endif 
/*$PAGE*/ 
/* 
********************************************************************************************************* 
*                                             INITIALIZATION 
*                            INITIALIZE THE FREE LIST OF TASK CONTROL BLOCKS 
* 
* Description: This function is called by OSInit() to initialize the free list of OS_TCBs. 
* 
* Arguments  : none 
* 
* Returns    : none 
********************************************************************************************************* 
*/ 
 
static  void  OS_InitTCBList (void) 
{ 
    INT8U    i; 
    OS_TCB  *ptcb1; 
    OS_TCB  *ptcb2; 

⌨️ 快捷键说明

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