📄 ucos_ii1.h
字号:
/*********************************************************************************************************** uC/OS-II* The Real-Time Kernel** (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL* All Rights Reserved** V2.00** File : uCOS_II.H* By : Jean J. Labrosse**********************************************************************************************************//*********************************************************************************************************** MISCELLANEOUS**********************************************************************************************************/#define OS_VERSION 200 /* Version of uC/OS-II (Vx.yy multiplied by 100) */#ifdef OS_GLOBALS#define OS_EXT#else#define OS_EXT extern#endif#define OS_PRIO_SELF 0xFF /* Indicate SELF priority */#if OS_TASK_STAT_EN#define OS_N_SYS_TASKS 2 /* Number of system tasks */#else#define OS_N_SYS_TASKS 1#endif#define OS_STAT_PRIO (OS_LOWEST_PRIO - 1) /* Statistic task priority */#define OS_IDLE_PRIO (OS_LOWEST_PRIO) /* IDLE task priority */#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) /* Size of event table */#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) /* Size of ready table */#define OS_TASK_IDLE_ID 65535 /* I.D. numbers for Idle and Stat tasks */#define OS_TASK_STAT_ID 65534 /* TASK STATUS (Bit definition for OSTCBStat) */#define OS_STAT_RDY 0x00 /* Ready to run */#define OS_STAT_SEM 0x01 /* Pending on semaphore */#define OS_STAT_MBOX 0x02 /* Pending on mailbox */#define OS_STAT_Q 0x04 /* Pending on queue */#define OS_STAT_SUSPEND 0x08 /* Task is suspended */#define OS_EVENT_TYPE_MBOX 1#define OS_EVENT_TYPE_Q 2#define OS_EVENT_TYPE_SEM 3 /* TASK OPTIONS (see OSTaskCreateExt()) */#define OS_TASK_OPT_STK_CHK 0x0001 /* Enable stack checking for the task */#define OS_TASK_OPT_STK_CLR 0x0002 /* Clear the stack when the task is create */#define OS_TASK_OPT_SAVE_FP 0x0004 /* Save the contents of any floating-point registers */#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif/*********************************************************************************************************** ERROR CODES**********************************************************************************************************/#define OS_NO_ERR 0#define OS_ERR_EVENT_TYPE 1#define OS_ERR_PEND_ISR 2#define OS_TIMEOUT 10#define OS_TASK_NOT_EXIST 11#define OS_MBOX_FULL 20#define OS_Q_FULL 30#define OS_PRIO_EXIST 40#define OS_PRIO_ERR 41#define OS_PRIO_INVALID 42#define OS_SEM_OVF 50#define OS_TASK_DEL_ERR 60#define OS_TASK_DEL_IDLE 61#define OS_TASK_DEL_REQ 62#define OS_TASK_DEL_ISR 63#define OS_NO_MORE_TCB 70#define OS_TIME_NOT_DLY 80#define OS_TIME_INVALID_MINUTES 81#define OS_TIME_INVALID_SECONDS 82#define OS_TIME_INVALID_MILLI 83#define OS_TIME_ZERO_DLY 84#define OS_TASK_SUSPEND_PRIO 90#define OS_TASK_SUSPEND_IDLE 91#define OS_TASK_RESUME_PRIO 100#define OS_TASK_NOT_SUSPENDED 101#define OS_MEM_INVALID_PART 110#define OS_MEM_INVALID_BLKS 111#define OS_MEM_INVALID_SIZE 112#define OS_MEM_NO_FREE_BLKS 113#define OS_MEM_FULL 114#define OS_TASK_OPT_ERR 130/*$PAGE*//*********************************************************************************************************** EVENT CONTROL BLOCK**********************************************************************************************************/#if (OS_MAX_EVENTS >= 2)typedef struct { void *OSEventPtr; /* Pointer to message or queue structure */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ INT16U OSEventCnt; /* Count of used when event is a semaphore */ INT8U OSEventType; /* OS_EVENT_TYPE_MBOX, OS_EVENT_TYPE_Q or OS_EVENT_TYPE_SEM */ INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */} OS_EVENT;#endif/*$PAGE*//*********************************************************************************************************** MESSAGE MAILBOX DATA**********************************************************************************************************/#if OS_MBOX_ENtypedef struct { void *OSMsg; /* Pointer to message in mailbox */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */} OS_MBOX_DATA;#endif/*********************************************************************************************************** MEMORY PARTITION DATA STRUCTURES**********************************************************************************************************/#if OS_MEM_EN && (OS_MAX_MEM_PART >= 2)typedef struct { /* MEMORY CONTROL BLOCK */ void *OSMemAddr; /* Pointer to beginning of memory partition */ void *OSMemFreeList; /* Pointer to list of free memory blocks */ INT32U OSMemBlkSize; /* Size (in bytes) of each block of memory */ INT32U OSMemNBlks; /* Total number of blocks in this partition */ INT32U OSMemNFree; /* Number of memory blocks remaining in this partition */} OS_MEM;typedef struct { void *OSAddr; /* Pointer to the beginning address of the memory partition */ void *OSFreeList; /* Pointer to the beginning of the free list of memory blocks */ INT32U OSBlkSize; /* Size (in bytes) of each memory block */ INT32U OSNBlks; /* Total number of blocks in the partition */ INT32U OSNFree; /* Number of memory blocks free */ INT32U OSNUsed; /* Number of memory blocks used */} OS_MEM_DATA;#endif/*$PAGE*//*********************************************************************************************************** MESSAGE QUEUE DATA**********************************************************************************************************/#if OS_Q_ENtypedef struct { void *OSMsg; /* Pointer to next message to be extracted from queue */ INT16U OSNMsgs; /* Number of messages in message queue */ INT16U OSQSize; /* Size of message queue */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */} OS_Q_DATA;#endif/*********************************************************************************************************** SEMAPHORE DATA**********************************************************************************************************/#if OS_SEM_ENtypedef struct { INT16U OSCnt; /* Semaphore count */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */} OS_SEM_DATA;#endif/*********************************************************************************************************** TASK STACK DATA**********************************************************************************************************/#if OS_TASK_CREATE_EXT_ENtypedef struct { INT32U OSFree; /* Number of free bytes on the stack */ INT32U OSUsed; /* Number of bytes used on the stack */} OS_STK_DATA;#endif/*$PAGE*//*********************************************************************************************************** TASK CONTROL BLOCK**********************************************************************************************************/typedef struct os_tcb { OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */#if OS_TASK_CREATE_EXT_EN void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */ OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */ INT32U OSTCBStkSize; /* Size of task stack (in bytes) */ INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */ INT16U OSTCBId; /* Task ID (0..65535) */#endif struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */ struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */#endif#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -