?? os_core.c
字號:
#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;//當前任務優(yōu)先級
OSPrioHighRdy = 0;//最高優(yōu)先級任務的優(yōu)先級
OSTCBHighRdy = (OS_TCB *)0; //指向最高優(yōu)先級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//包含創(chuàng)建任務代碼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 */
//優(yōu)先級
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//不包含創(chuàng)建任務代碼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 */
//比空閑任務優(yōu)先級高一
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;
}//清除優(yōu)先級方框表
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版本服務調用去檢查是否一個新的,高優(yōu)先級的任務將準備運行。
這個功能由任務等級代碼喚醒,它不用于從中斷服務程序中重新安排代碼。
參數:無
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -