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

📄 os_core.c

📁 avr ucos 代码 测试环境:source insight WINAVR 4个进程
💻 C
📖 第 1 页 / 共 5 页
字号:
#else//如果只有一个事件控制块
    OSEventFreeList              = &OSEventTbl[0];    /* Only have ONE event control block        */
    OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
    OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;//前趋指向NULL
#endif
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                             INITIALIZATION
*                                    INITIALIZE MISCELLANEOUS VARIABLES
*
* Description: This function is called by OSInit() to initialize miscellaneous variables.
*
* Arguments  : none
*
* Returns    : none
描述:由OSInit()调用去初始化各种变量
参数:无
返回:无
*********************************************************************************************************
*/

static  void  OS_InitMisc (void)
{
#if OS_TIME_GET_SET_EN > 0   
    OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
#endif//清除32位系统时钟

    OSIntNesting  = 0;   /* Clear the interrupt nesting counter      *///中断嵌套初始化为0
    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         */
	//任务转换计数器为0
    OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */
    //清除32位空闲计数器
#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
                                                 初始化就绪列表
描述:由OSInit()调用,初始化就绪列表
参数:无
返回:无
*********************************************************************************************************
*/

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; //指向最高优先级TCB指针                                
    OSTCBCur      = (OS_TCB *)0;//当前运行任务TCB指针
}

/*$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//包含创建任务代码OS_TASK_CREATE_EXT_EN 
    #if OS_STK_GROWTH == 1//堆栈从高到低
    (void)OSTaskCreateExt(OS_TaskIdle,//建立空闲任务
                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
                          //pdata为零,没有参数传递表示没有参数传给OS_TaskIdle()
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
                          //设置栈顶地址
                          OS_IDLE_PRIO,                              /* Lowest priority level                */
                          //优先级
                          OS_TASK_IDLE_ID,//任务ID
                          &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
                          //设置栈底
                          OS_TASK_IDLE_STK_SIZE,//堆栈大小,即进口宽度
                          (void *)0,                                 /* No TCB extension                     */
                          //无TCB扩展
                          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//不包含创建任务代码OS_TASK_CREATE_EXT_EN 
    #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
                                                 初始化TCB链表
描述:由OSInit()调用,初始化OS_TCBs空闲链表
*********************************************************************************************************
*/

static  void  OS_InitTCBList (void)
{
    INT8U    i;
    OS_TCB  *ptcb1;
    OS_TCB  *ptcb2;


    OSTCBList     = (OS_TCB *)0;                                 /* TCB Initialization                       */
	//初始化双向TCB链表
    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table    */
        OSTCBPrioTbl[i] = (OS_TCB *)0;
    }//清除优先级方框表
    ptcb1 = &OSTCBTbl[0];
    ptcb2 = &OSTCBTbl[1];//取地址
    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */
        ptcb1->OSTCBNext = ptcb2;
        ptcb1++;
        ptcb2++;//把它们链在一起
    }
    ptcb1->OSTCBNext = (OS_TCB *)0;  /* Last OS_TCB    *///最后一个指向空指针
    OSTCBFreeList    = &OSTCBTbl[0];//空表指向第一个地址
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                              SCHEDULER
*
* Description: This function is called by other uC/OS-II services to determine whether a new, high
*              priority task has been made ready to run.  This function is invoked by TASK level code
*              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
*
* Arguments  : none
*
* Returns    : none
*
* Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
*              2) Rescheduling is prevented when the scheduler is locked (see OS_SchedLock())
*********************************************************************************************************
*/
/*
************************************************************************************************
                                                                   调度程序
描述:这个函数由其它ucosII版本服务调用去检查是否一个新的,高优先级的任务将准备运行。
                 这个功能由任务等级代码唤醒,它不用于从中断服务程序中重新安排代码。
参数:无

⌨️ 快捷键说明

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