?? os_core.c
字號:
*
* 注釋 : 該函數為 uC/OS-II的內部函數,應用程序不該調用。
*********************************************************************************************************
*/
#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; /* 沒有等待事件的任務 */
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*/
/*
*********************************************************************************************************
* 初始化
* 初始事件控制塊的空余列表
*
* 函數描述: 該函數由 OSInit()調用以初始化事件控制塊的空余列表
*
* 輸入參數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
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++)
{ /* 初始空余事件控制塊列表 */
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]; /* 只有一個事件控制塊 */
OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
OSEventFreeList->OSEventPtr = (OS_EVENT *)0;
#endif
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
* 初始化
* 初始化雜項變量
*
* 函數描述: 該函數由 OSInit()調用以初始化雜項變量。
*
* 輸入函數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
static void OS_InitMisc (void)
{
#if OS_TIME_GET_SET_EN > 0
OSTime = 0L; /* 32位系統時鐘清零 */
#endif
OSIntNesting = 0; /* 中斷嵌套計數器清零 */
OSLockNesting = 0; /* 調度上鎖計數器清零 */
OSTaskCtr = 0; /* 任務數清零 */
OSRunning = FALSE; /* 顯示多任務未運行 */
OSCtxSwCtr = 0; /* 任務切換計數器清零 */
OSIdleCtr = 0L; /* 32位空閑計數器清零 */
#if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
OSIdleCtrRun = 0L;
OSIdleCtrMax = 0L;
OSStatRdy = FALSE; /* 統計任務未就緒 */
#endif
}
/*$PAGE*/
/*
*********************************************************************************************************
* 初始化
* 初始化就緒列表
*
* 函數描述: 該函數由 OSInit() 調用以初始化就緒列表.
*
* 輸入函數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
static void OS_InitRdyList (void)
{
INT16U i;
INT8U *prdytbl;
OSRdyGrp = 0x00; /* 就緒列表清零 */
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*/
/*
*********************************************************************************************************
* 初始化
* 創建空閑任務
*
* 函數描述: 該函數創建空閑任務
*
* 輸入參數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
static void OS_InitTaskIdle (void)
{
#if OS_TASK_CREATE_EXT_EN > 0
#if OS_STK_GROWTH == 1
(void)OSTaskCreateExt(OS_TaskIdle,
(void *)0, /* 無任何參數傳給 OS_TaskIdle() */
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* 設定棧頂 */
OS_IDLE_PRIO, /* 最低優先級 */
OS_TASK_IDLE_ID,
&OSTaskIdleStk[0], /* 設定棧底 */
OS_TASK_IDLE_STK_SIZE,
(void *)0, /* 無任務控制塊擴展 */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* 使能堆棧檢驗 + 堆棧清零 */
#else
(void)OSTaskCreateExt(OS_TaskIdle,
(void *)0, /* 無任何參數傳給 OS_TaskIdle() */
&OSTaskIdleStk[0], /* 設定棧頂 */
OS_IDLE_PRIO, /* 最低優先級 */
OS_TASK_IDLE_ID,
&OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* 設定棧底 */
OS_TASK_IDLE_STK_SIZE,
(void *)0, /* 無任務控制塊擴展 */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* 使能堆棧檢驗 + 堆棧清零 */
#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*/
/*
*********************************************************************************************************
* 初始化
* 創建統計任務
*
* 函數描述: 該函數創建統計任務。
*
* 輸入參數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
#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, /* 無任何參數傳給 OS_TaskStat()*/
&OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* 設定棧頂 */
OS_STAT_PRIO, /* 比空閑任務高一級 */
OS_TASK_STAT_ID,
&OSTaskStatStk[0], /* 設定棧底 */
OS_TASK_STAT_STK_SIZE,
(void *)0, /* 無任務控制塊擴展 */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 使能堆棧檢驗 + 堆棧清零 */
#else
(void)OSTaskCreateExt(OS_TaskStat,
(void *)0, /* 無任何參數傳給 OS_TaskStat()*/
&OSTaskStatStk[0], /* 設定棧頂 */
OS_STAT_PRIO, /* 比空閑任務高一級 */
OS_TASK_STAT_ID,
&OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* 設定棧底 */
OS_TASK_STAT_STK_SIZE,
(void *)0, /* 無任務控制塊擴展 */
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* 使能堆棧檢驗 + 堆棧清零 */
#endif
#else
#if OS_STK_GROWTH == 1
(void)OSTaskCreate(OS_TaskStat,
(void *)0, /* 無任何參數傳給 OS_TaskStat()*/
&OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1], /* 設定棧頂 */
OS_STAT_PRIO); /* 比空閑任務高一級 */
#else
(void)OSTaskCreate(OS_TaskStat,
(void *)0, /* 無任何參數傳給 OS_TaskStat()*/
&OSTaskStatStk[0], /* 設定棧頂 */
OS_STAT_PRIO); /* 比空閑任務高一級 */
#endif
#endif
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* 初始化
* 初始化任務控制塊的空余列表
*
* 函數描述: 該函數由 OSInit()調用以初始化任務控制塊的空余列表
*
* 輸入參數 : 無
*
* 返回值 : 無
*********************************************************************************************************
*/
static void OS_InitTCBList (void)
{
INT8U i;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -