?? os-task-switch.h
字號(hào):
//定義全局變量和marcos
#ifdef OS_GLOBALS
#define OS_EXT
#else
#define OS_EXT extern
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define OS_TASK_COUNT (OS_LOWEST_PRIO+1)
/* TASK STATUS (Bit definition for OSTCBStat) */
#define OS_STAT_RDY 0x01 /* Ready to run */
#if OS_EVENT_EN
#define OS_STAT_SEM 0x02 /* Pending on semaphore */
#endif
/*
*********************************************************************************************************
* ERROR CODES
*********************************************************************************************************
*/
#define OS_NO_ERR 0
#define OSERR_PRIO_INVALID 1
#define OSERR_TCB_INVALID 2
#define OSERR_PRIO_EXIST 3
#define OSERR_EVENT_TYPE 4
#define OSERR_PEND_ISR 5
#define OSERR_TIMEOUT 6
#define OSERR_SEM_OVF 7
//定義task
typedef struct os_tcb {
OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
INT8U OSTCBStat; /* Task status */
INT8U OSTCBPrio; /* Task priority (0 == highest, 63 == lowest) */
} OS_TCB;
void OSInit(void);
INT8U OSTaskCreate(OS_TCB *ptcb,void (*task)(void *pd), void *pdata, OS_STK *ptos,INT16U stk_size, INT8U prio);
OS_STK * OSTaskStkInit (void (*task)(void *pd),void *pdata, OS_STK *ptos, INT16U stk_size);
INT8U OSTCBInit(OS_TCB *ptcb,INT8U prio, OS_STK *ptos,INT16U stk_size);
/*return ready task*/
INT8U OSGetPrioRdy(void);
void OSSched(void);
void OSStart(void);
void OSTimeDly (INT16U ticks);
void OSStartHighRdy(void);
void OSCtxSw(void);
void OSIntCtxSw(void);
void OSDebug(void);
#if OS_EVENT_EN
#define OS_EVENT_TYPE_INVALID 0
#define OS_EVENT_TYPE_SEM 1
typedef struct {
OS_TCB *OSTaskTbl[OS_TASK_COUNT]; /* 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 */
} OS_EVENT;
//INT8U OSEventGetHighPrio(OS_EVENT *pevent);
void OSEventInit(OS_EVENT *pevent);
INT8U OSEventGetHighPrioRdy(OS_EVENT *pevent);
void OSEventTaskRdy (OS_EVENT *pevent, INT8U msk);
#endif//OS_EVENT_EN
#if OS_SEM_EN
INT8U OSSemPost (OS_EVENT *pevent);
void OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
OS_EVENT *OSSemCreate (OS_EVENT *pevent,INT16U cnt);
INT16U OSSemAccept (OS_EVENT *pevent);
#endif //OS_SEM_EN
/* when something error,call OSError*/
#if OS_STRICT
void OSError(INT8U err);
#endif
/*task tcb pointers list*/
OS_EXT BOOLEAN OSRunning; /* Flag indicating that kernel is running */
OS_EXT OS_TCB *OSpTCBList[OS_TASK_COUNT];
OS_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 OS_TCB *OSTCBCur; /* Pointer to currently running TCB */
OS_EXT OS_TCB *OSTCBHighRdy; /* Pointer to highest priority TCB ready to run */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -