📄 ucos_cl.h
字号:
/*
*********************************************************************************************************
* uC/OS
* The Real-Time Kernel
* SYSTEM DECLARATIONS
*
* (c) Copyright 1992-1996, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
*
* V1.09
*
* File : UCOS_CL.H
* By : Jean J. Labrosse
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MISCELLANEOUS
*********************************************************************************************************
*/
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
#define OS_PRIO_SELF 0xFF /* Indicate SELF priority */
/*
*********************************************************************************************************
* uC/OS ERROR CODES
*********************************************************************************************************
*/
#define OS_NO_ERR 0
#define OS_TIMEOUT 10
#define OS_TASK_NOT_EXIST 11
#define OS_MBOX_FULL 20
#define OS_MBOX_MSG_NOT_AVAIL 21
#define OS_Q_FULL 30
#define OS_Q_MSG_NOT_AVAIL 31
#define OS_PRIO_EXIST 40
#define OS_PRIO_ERR 41
#define OS_PRIO_INVALID 42
#define OS_SEM_ERR 50
#define OS_SEM_OVF 51
#define OS_SEM_NOT_AVAIL 52
#define OS_TASK_DEL_ERR 60
#define OS_TASK_DEL_IDLE 61
#define OS_TASK_DEL_REQ 62
#define OS_NO_MORE_TCB 70
#define OS_TIME_NOT_DLY 80
#define OS_TASK_SUSPEND_PRIO 90
#define OS_TASK_SUSPEND_IDLE 91
#define OS_TASK_RESUME_PRIO 100
#define OS_TASK_NOT_SUSPENDED 101
/*$PAGE*/
/*
*********************************************************************************************************
* EVENT CONTROL BLOCK
*********************************************************************************************************
*/
typedef struct os_event {
UBYTE OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
UBYTE OSEventTbl[8]; /* List of tasks waiting for event to occur */
UWORD OSEventCnt; /* Count of used when event is a semaphore */
far void *OSEventPtr; /* Pointer to message or queue structure */
} OS_EVENT;
/*
*********************************************************************************************************
* uC/OS TASK CONTROL BLOCK
*********************************************************************************************************
*/
typedef struct os_tcb {
far void *OSTCBStkPtr; /* Pointer to current top of stack */
UBYTE OSTCBStat; /* Task status */
UBYTE OSTCBPrio; /* Task priority (0 == highest, 63 == lowest) */
UWORD OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
BOOLEAN OSTCBDelReq; /* Indicates whether a task needs to delete itself */
UBYTE OSTCBX; /* Bit position in group corresponding to task priority (0..7) */
UBYTE OSTCBY; /* Index into ready table corresponding to task priority */
UBYTE OSTCBBitX; /* Bit mask to access bit position in ready table */
UBYTE OSTCBBitY; /* Bit mask to access bit position in ready group */
far OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */
far void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */
far struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */
far struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */
} OS_TCB;
/*
*********************************************************************************************************
* QUEUE CONTROL BLOCK
*********************************************************************************************************
*/
typedef struct os_q {
far struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */
far void **OSQStart; /* Pointer to start of queue data */
far void **OSQEnd; /* Pointer to end of queue data */
far void **OSQIn; /* Pointer to where next message will be inserted in the Q */
far void **OSQOut; /* Pointer to where next message will be extracted from the Q */
UBYTE OSQSize; /* Size of queue (maximum number of entries) */
UBYTE OSQEntries; /* Current number of entries in the queue */
} OS_Q;
/*$PAGE*/
/*
*********************************************************************************************************
* uC/OS GLOBAL VARIABLES
*********************************************************************************************************
*/
/* SYSTEM VARIABLES */
OS_EXT far UWORD OSCtxSwCtr; /* Counter of number of context switches */
OS_EXT far ULONG OSIdleCtr; /* Idle counter */
OS_EXT far UBYTE OSIntNesting; /* Interrupt nesting level */
OS_EXT far BOOLEAN OSRunning; /* Flag indicating that kernel is running */
OS_EXT far OS_TCB * far OSTCBCur; /* Pointer to currently running TCB */
OS_EXT far OS_TCB * far OSTCBHighRdy; /* Pointer to highest priority TCB ready to run */
OS_EXT far OS_TCB * far OSTCBPrioTbl[64];/* Table of pointers to all created TCBs */
/*
*********************************************************************************************************
* uC/OS FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void OSInit(void);
void OSStart(void);
void OSStartHighRdy(void);
void OSSched(void);
void OSSchedLock(void);
void OSSchedUnlock(void);
UBYTE OSTaskCreate(void (*task)(far void *pd), far void *pdata, far void *pstk, UBYTE prio);
UBYTE OSTaskDel(UBYTE prio);
UBYTE OSTaskDelReq(UBYTE prio);
UBYTE OSTaskChangePrio(UBYTE oldprio, UBYTE newprio);
UBYTE OSTaskSuspend(UBYTE prio);
UBYTE OSTaskResume(UBYTE prio);
UBYTE OSTCBInit(UBYTE prio, far void *stk);
void OSIntEnter(void);
void OSIntExit(void);
void OSIntCtxSw(void);
void OSCtxSw(void);
void OSTickISR(void);
void OSTimeDly(UWORD ticks);
UBYTE OSTimeDlyResume(UBYTE prio);
void OSTimeTick(void);
void OSTimeSet(ULONG ticks);
ULONG OSTimeGet(void);
far OS_EVENT *OSSemCreate(UWORD value);
UWORD OSSemAccept(far OS_EVENT *pevent);
UBYTE OSSemPost(far OS_EVENT *pevent);
void OSSemPend(far OS_EVENT *pevent, UWORD timeout, UBYTE *err);
far OS_EVENT *OSMboxCreate(far void *msg);
far void *OSMboxAccept(far OS_EVENT *pevent);
UBYTE OSMboxPost(far OS_EVENT *pevent, far void *msg);
far void *OSMboxPend(far OS_EVENT *pevent, UWORD timeout, UBYTE *err);
far OS_EVENT *OSQCreate(far void **start, UBYTE size);
far void *OSQAccept(far OS_EVENT *pevent);
UBYTE OSQPost(far OS_EVENT *pevent, far void *msg);
far void *OSQPend(far OS_EVENT *pevent, UWORD timeout, UBYTE *err);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -