⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos.h

📁 ucos在所有cpu下的移植范例
💻 H
字号:
/*
*********************************************************************************************************
*                                                 uCOS
*                        Microcomputer Real-Time Multitasking Operating System
*                                          SYSTEM DECLARATIONS
*
*                           (c) Copyright 1992, Jean J. Labrosse, Plantation, FL
*                                          All Rights Reserved
*
*
* File : UCOS.H
* By   : Jean J. Labrosse
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                          uCOS CONFIGURATION
*********************************************************************************************************
*/

/******* Note that all references to "near" and "far" were deleted */

#define uCOS         /* Interrupt vector assigned to uCOS is vector 6,    */
                     /*  since the MC68HC16 SWI instruction automatically */ 
                     /*  vectors to this location                         */
#define OS_MAX_TASKS              6    /* Maximum number of tasks in your application                  */
#define OS_MAX_EVENTS             6    /* Maximum number of event control blocks in your application   */
#define OS_MAX_QS                 6    /* Maximum number of queue control blocks in your application   */

#define OS_IDLE_TASK_STK_SIZE  1024    /* Idle task stack size (BYTEs)                                 */

/*
*********************************************************************************************************
*                                           uCOS ERROR CODES
*********************************************************************************************************
*/

#define OS_NO_ERR            0         /* ERROR CODES                                                  */
#define OS_TIMEOUT          10
#define OS_MBOX_FULL        20
#define OS_Q_FULL           30
#define OS_PRIO_EXIST       40
#define OS_PRIO_ERR         41
#define OS_SEM_ERR          50
#define OS_SEM_OVF          51
#define OS_TASK_DEL_ERR     60
#define OS_TASK_DEL_IDLE    61
#define OS_NO_MORE_TCB      70

/*$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                     */
    WORD   OSEventCnt;                 /* Count of used when event is a semaphore                      */
    void  *OSEventPtr;                 /* Pointer to message or queue structure                        */
} OS_EVENT;


/*
*********************************************************************************************************
*                                        uCOS TASK CONTROL BLOCK
*********************************************************************************************************
*/

typedef struct os_tcb {
    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        */
    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               */
    OS_EVENT      *OSTCBEventPtr;      /* Pointer to event control block                               */
    struct os_tcb *OSTCBNext;          /* Pointer to next     TCB in the TCB list                      */
    struct os_tcb *OSTCBPrev;          /* Pointer to previous TCB in the TCB list                      */
} OS_TCB;


/*
*********************************************************************************************************
*                                          QUEUE CONTROL BLOCK
*********************************************************************************************************
*/

typedef struct os_q {
    struct os_q  *OSQPtr;              /* Link to next queue control block in list of free blocks      */
    void        **OSQStart;            /* Pointer to start of queue data                               */
    void        **OSQEnd;              /* Pointer to end   of queue data                               */
    void        **OSQIn;               /* Pointer to where next message will be inserted  in   the Q   */
    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*/
/*
*********************************************************************************************************
*                                         uCOS GLOBAL VARIABLES
*********************************************************************************************************
*/

                                                 /* SYSTEM VARIABLES                                   */
extern UWORD     OSCtxSwCtr;                     /* Counter of number of context switches              */
extern ULONG     OSIdleCtr;                      /* Idle counter                                       */
extern BOOLEAN   OSRunning;                      /* Flag indicating that kernel is running             */
extern OS_TCB   *OSTCBCur;                       /* Pointer to currently running TCB                   */
extern OS_TCB   *OSTCBHighRdy;                   /* Pointer to highest priority TCB ready to run       */
extern OS_TCB   *OSTCBPrioTbl[];                 /* Table of pointers to all created TCBs              */

/*
*********************************************************************************************************
*                                       uCOS FUNCTION PROTOTYPES
*********************************************************************************************************
*/

void      OSInit(void);
void      OSStart(void);
void      OSStartHighRdy(void);
void      OSSched(void);
void      OSSchedLock(void);
void      OSSchedUnlock(void);
UBYTE     OSTCBInit(UBYTE p, void  *stk);

UBYTE     OSTaskCreate(void (*task)(void), void *pstk, UBYTE prio);
UBYTE     OSTaskDel(UBYTE p);
UBYTE     OSTaskChangePrio(UBYTE oldp, UBYTE newp);

void      OSIntEnter(void);
void      OSIntExit(void);

void      OSIntCtxSw(void);
void      OSCtxSw(void);

void      OSTimeDly(UWORD ticks);
void      OSTimeTick(void);
void      OSTimeSet(ULONG ticks);
ULONG     OSTimeGet(void);

OS_EVENT *OSSemCreate(WORD value);
UBYTE     OSSemPost(OS_EVENT *pevent);
void      OSSemPend(OS_EVENT *pevent, UWORD timeout, UBYTE *err);

OS_EVENT *OSMboxCreate(void *msg);
UBYTE     OSMboxPost(OS_EVENT *pevent, void *msg);
void     *OSMboxPend(OS_EVENT *pevent, UWORD timeout, UBYTE *err);

OS_EVENT *OSQCreate(void **start, UBYTE size);
UBYTE     OSQPost(OS_EVENT *pevent, void *msg);
void     *OSQPend(OS_EVENT *pevent, UWORD timeout, UBYTE *err);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -