📄 ucos_ii1.h
字号:
INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */ INT8U OSTCBStat; /* Task status */ INT8U OSTCBPrio; /* Task priority (0 == highest, 63 == lowest) */ INT8U OSTCBX; /* Bit position in group corresponding to task priority (0..7) */ INT8U OSTCBY; /* Index into ready table corresponding to task priority */ INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */ INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */ #if OS_TASK_DEL_EN BOOLEAN OSTCBDelReq; /* Indicates whether a task needs to delete itself */#endif} OS_TCB;/*$PAGE*//*********************************************************************************************************** GLOBAL VARIABLES**********************************************************************************************************/ OS_EXT INT32U OSCtxSwCtr; /* Counter of number of context switches */#if (OS_MAX_EVENTS >= 2)OS_EXT OS_EVENT *OSEventFreeList; /* Pointer to list of free EVENT control blocks */OS_EXT OS_EVENT OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks */#endifOS_EXT INT32U OSIdleCtr; /* Idle counter */#if OS_TASK_STAT_ENOS_EXT INT8S OSCPUUsage; /* Percentage of CPU used */OS_EXT INT32U OSIdleCtrMax; /* Maximum value that idle counter can take in 1 sec. */OS_EXT INT32U OSIdleCtrRun; /* Value reached by idle counter at run time in 1 sec. */OS_EXT BOOLEAN OSStatRdy; /* Flag indicating that the statistic task is ready */#endifOS_EXT INT8U OSIntNesting; /* Interrupt nesting level */OS_EXT INT8U OSLockNesting; /* Multitasking lock nesting level */OS_EXT INT8U OSPrioCur; /* Priority of current task */OS_EXT INT8U OSPrioHighRdy; /* Priority of highest priority task */OS_EXT INT8U OSRdyGrp; /* Ready list group */OS_EXT INT8U OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */OS_EXT BOOLEAN OSRunning; /* Flag indicating that kernel is running */#if OS_TASK_CREATE_EN || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_ENOS_EXT INT8U OSTaskCtr; /* Number of tasks created */#endifOS_EXT OS_TCB *OSTCBCur; /* Pointer to currently running TCB */OS_EXT OS_TCB *OSTCBFreeList; /* Pointer to list of free TCBs */OS_EXT OS_TCB *OSTCBHighRdy; /* Pointer to highest priority TCB ready to run */OS_EXT OS_TCB *OSTCBList; /* Pointer to doubly linked list of TCBs */OS_EXT OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];/* Table of pointers to created TCBs */OS_EXT INT32U OSTime; /* Current value of system time (in ticks) */extern INT8U const OSMapTbl[]; /* Priority->Bit Mask lookup table */extern INT8U const OSUnMapTbl[]; /* Priority->Index lookup table *//*$PAGE*//*********************************************************************************************************** FUNCTION PROTOTYPES* (Target Independant Functions)**********************************************************************************************************//*********************************************************************************************************** MESSAGE MAILBOX MANAGEMENT**********************************************************************************************************/#if OS_MBOX_ENvoid *OSMboxAccept(OS_EVENT *pevent);OS_EVENT *OSMboxCreate(void *msg);void *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);INT8U OSMboxPost(OS_EVENT *pevent, void *msg);INT8U OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata);#endif/*********************************************************************************************************** MEMORY MANAGEMENT**********************************************************************************************************/#if OS_MEM_EN && (OS_MAX_MEM_PART >= 2)OS_MEM *OSMemCreate(void *addr, INT32U nblks, INT32U blksize, INT8U *err);void *OSMemGet(OS_MEM *pmem, INT8U *err);INT8U OSMemPut(OS_MEM *pmem, void *pblk);INT8U OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);#endif/*********************************************************************************************************** MESSAGE QUEUE MANAGEMENT**********************************************************************************************************/#if OS_Q_EN && (OS_MAX_QS >= 2)void *OSQAccept(OS_EVENT *pevent);OS_EVENT *OSQCreate(void **start, INT16U size);INT8U OSQFlush(OS_EVENT *pevent);void *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);INT8U OSQPost(OS_EVENT *pevent, void *msg);INT8U OSQPostFront(OS_EVENT *pevent, void *msg);INT8U OSQQuery(OS_EVENT *pevent, OS_Q_DATA *pdata);#endif/*$PAGE*//*********************************************************************************************************** SEMAPHORE MANAGEMENT**********************************************************************************************************/#if OS_SEM_ENINT16U OSSemAccept(OS_EVENT *pevent);OS_EVENT *OSSemCreate(INT16U value);void OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);INT8U OSSemPost(OS_EVENT *pevent);INT8U OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *pdata);#endif/*********************************************************************************************************** TASK MANAGEMENT**********************************************************************************************************/#if OS_TASK_CHANGE_PRIO_ENINT8U OSTaskChangePrio(INT8U oldprio, INT8U newprio);#endifINT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);#if OS_TASK_CREATE_EXT_ENINT8U OSTaskCreateExt(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio, INT16U id, OS_STK *pbos, INT32U stk_size, void *pext, INT16U opt);#endif #if OS_TASK_DEL_ENINT8U OSTaskDel(INT8U prio);INT8U OSTaskDelReq(INT8U prio);#endif#if OS_TASK_SUSPEND_ENINT8U OSTaskResume(INT8U prio);INT8U OSTaskSuspend(INT8U prio);#endif#if OS_TASK_CREATE_EXT_ENINT8U OSTaskStkChk(INT8U prio, OS_STK_DATA *pdata);#endifINT8U OSTaskQuery(INT8U prio, OS_TCB *pdata);/*********************************************************************************************************** TIME MANAGEMENT**********************************************************************************************************/void OSTimeDly(INT16U ticks);INT8U OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);INT8U OSTimeDlyResume(INT8U prio);INT32U OSTimeGet(void);void OSTimeSet(INT32U ticks);void OSTimeTick(void);/*********************************************************************************************************** MISCELLANEOUS**********************************************************************************************************/void OSInit(void);void OSIntEnter(void);void OSIntExit(void);void OSSchedLock(void);void OSSchedUnlock(void);void OSStart(void);void OSStatInit(void);INT16U OSVersion(void);/*$PAGE*//*********************************************************************************************************** INTERNAL FUNCTION PROTOTYPES* (Your application MUST NOT call these functions)**********************************************************************************************************/#if OS_MBOX_EN || OS_Q_EN || OS_SEM_ENvoid OSEventTaskRdy(OS_EVENT *pevent, void *msg, INT8U msk);void OSEventTaskWait(OS_EVENT *pevent);void OSEventTO(OS_EVENT *pevent);void OSEventWaitListInit(OS_EVENT *pevent);#endif#if OS_MEM_EN && (OS_MAX_MEM_PART >= 2)void OSMemInit(void);#endif#if OS_Q_ENvoid OSQInit(void);#endifvoid OSSched(void);void OSTaskIdle(void *data);#if OS_TASK_STAT_ENvoid OSTaskStat(void *data);#endifINT8U OSTCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt);/*$PAGE*//*********************************************************************************************************** FUNCTION PROTOTYPES* (Target Specific Functions)**********************************************************************************************************/void OSCtxSw(void);void OSIntCtxSw(void);void OSStartHighRdy(void);void OSTaskCreateHook(OS_TCB *ptcb);void OSTaskDelHook(OS_TCB *ptcb);void OSTaskStatHook(void);void *OSTaskStkInit(void (*task)(void *pd), void *pdata, void *ptos, INT16U opt);void OSTaskSwHook(void);void OSTickISR(void);void OSTimeTickHook(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -