?? 00000001.htm
字號:
static OS_TCB *OSTCBList; /* Pointer to doubly linked list of TCBs */ <br />static UBYTE OSRdyGrp; /* Ready list group */ <br />static UBYTE OSRdyTbl[8]; /* Table of tasks which are ready to run */ <br />static UBYTE OSLockNesting; /* Multitasking lock nesting level */ <br />static OS_TCB *OSTCBFreeList; /* Pointer to list of free TCBs */ <br />static OS_EVENT *OSEventFreeList; /* Pointer to list of free EVENT control blocks */ <br />static OS_Q *OSQFreeList; /* Pointer to list of free QUEUE control blocks */ <br />static ULONG OSTime; /* Current value of system time (in ticks) */ <br />static UBYTE OSIntExitY; /* Variable used by 'OSIntExit' to prevent using locals */ <br />static OS_STK_TYPE OSTaskIdleStk[OS_IDLE_TASK_STK_SIZE]; /* Idle task stack */ <br />static OS_TCB OSTCBTbl[OS_MAX_TASKS+1]; /* Table of TCBs */ <br />static OS_EVENT OSEventTbl[OS_MAX_EVENTS]; /* Table of EVENT control blocks */ <br />static OS_Q OSQTbl[OS_MAX_QS]; /* Table of QUEUE control blocks */ <br /> <br /> <br />/* <br />********************************************************************************************************* <br />* LOCAL FUNCTION PROTOTYPES <br />********************************************************************************************************* <br />*/ <br /> <br />static void OS_FAR OSTaskIdle(void *data); <br />static void OSDummy(void); <br />/*$PAGE*/ <br />/* <br />********************************************************************************************************* <br />* uC/OS INITIALIZATION <br />********************************************************************************************************* <br />*/ <br /> <br />void OSInit(void) <br />{ <br /> UBYTE i; <br /> <br /> <br /> OSTime = 0L; <br /> OSTCBHighRdy = (OS_TCB *)0; <br /> OSTCBCur = (OS_TCB *)0; <br /> OSTCBList = (OS_TCB *)0; <br /> OSIntNesting = 0; <br /> OSLockNesting = 0; <br /> OSRunning = FALSE; /* Indicate that multitasking not started */ <br /> OSIdleCtr = 0L; <br /> OSCtxSwCtr = 0; <br /> OSRdyGrp = 0; /* Clear the ready list */ <br /> for (i = 0; i < 8; i++) { <br /> OSRdyTbl[i] = 0; <br /> } <br /> for (i = 0; i < 64; i++) { /* Clear the priority table */ <br /> OSTCBPrioTbl[i] = (OS_TCB *)0; <br /> } <br /> for (i = 0; i < OS_MAX_TASKS; i++) { /* Init. list of free TCBs */ <br /> OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i+1]; <br /> } <br /> OSTCBTbl[OS_MAX_TASKS].OSTCBNext = (OS_TCB *)0; /* Last OS_TCB is for OSTaskIdle() */ <br /> OSTCBFreeList = &OSTCBTbl[0]; <br /> for (i = 0; i < (OS_MAX_EVENTS - 1); i++) { /* Init. list of free EVENT control blocks */ <br /> OSEventTbl[i].OSEventPtr = &OSEventTbl[i+1]; <br /> } <br /> OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0; <br /> OSEventFreeList = &OSEventTbl[0]; <br /> for (i = 0; i < (OS_MAX_QS - 1); i++) { /* Init. list of free QUEUE control blocks */ <br /> OSQTbl[i].OSQPtr = &OSQTbl[i+1]; <br /> } <br /> OSQTbl[OS_MAX_QS - 1].OSQPtr = (OS_Q *)0; <br /> OSQFreeList = &OSQTbl[0]; <br /> OSTaskCreate(OSTaskIdle, (void *)0, (void *)&OSTaskIdleStk[OS_IDLE_TASK_STK_TOP], OS_LO_PRIO); <br />} <br /> <br />/* <br />********************************************************************************************************* <br />* IDLE TASK <br />********************************************************************************************************* <br />*/ <br /> <br />static void OS_FAR OSTaskIdle(void *data) <br />{ <br /> data = data; <br /> while (1) { <br /> OS_ENTER_CRITICAL(); <br /> OSIdleCtr++; <br /> OS_EXIT_CRITICAL(); <br /> } <br />} <br />/*$PAGE*/ <br />/* <br />********************************************************************************************************* <br />* START MULTITASKING <br />********************************************************************************************************* <br />*/ <br /> <br />void OSStart(void) <br />{ <br /> UBYTE y; <br /> UBYTE x; <br /> UBYTE prio; <br />
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -