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

📄 ucos16.h

📁 8052小型操作系统, 用Keil C编译器, 能进行任务切换, 信号量管理.
💻 H
字号:
/*
*********************************************************************************************************
*                                        uC/OS-16
*                                  The Real-Time Kernel
*
* File : uCOS16.H
* By   : zhang xian
* Date : 2006-11-26
*********************************************************************************************************
*/

#define  OS_VERSION               100    /* 不允许中断嵌套 */

#ifdef   OS_GLOBALS
#define  OS_EXT
#else
#define  OS_EXT   extern
#endif

#ifndef  FALSE
#define  FALSE                    0
#endif

#ifndef  TRUE
#define  TRUE                     1
#endif

/*
*********************************************************************************************************
*                                             ERROR CODES
*********************************************************************************************************
*/
#define OS_NO_ERR                 0
#define OS_TIMEOUT                3

/*
*********************************************************************************************************
*                                         Global variable
*********************************************************************************************************
*/
OS_EXT data  INT8U  OSTaskID;                 // 当前任务ID[0..7] or [0..15]
OS_EXT data  INT8U  OSNextTaskID;
OS_EXT data  INT8U  OSIntNesting;

OS_EXT data  OS_CNT_SIZE  OSIdleCnt;          // 空闲计数器
OS_EXT data  OS_CNT_SIZE  OSSysCnt;           // 系统计数器

////////////////////////////////////////////////////////////////////////////
///           操作系统核心数据,不要改动顺序                              //
////////////////////////////////////////////////////////////////////////////
OS_EXT data  INT8U  OSDlyTicks[OS_MAX_TASKS];        // 任务延时队列            //
OS_EXT data  OS_STK OSISRStack[OS_ISR_STACK_SIZE];   // 中断堆栈兼空闲任务堆栈  //
OS_EXT data  OS_SP  OSStackPtr[OS_MAX_TASKS];        // 任务堆栈指针队列        //
OS_EXT idata OS_STK OSStack[OS_STACK_SIZE];          // 全部任务堆栈            //
////////////////////////////////////////////////////////////////////////////

#if EN_OS_TASK_STACK_CHK > 0
OS_EXT data  OS_SP  OSStackBottom[OS_MAX_TASKS];
OS_EXT data  INT8U  OSStackFreeBytes[OS_MAX_TASKS+1]; //包括中断任务
#endif

#define OS_SIZE  INT8U

#if EN_OS_SEM > 0
OS_EXT data  INT8U    OSSemBuf[OS_MAX_SEMS];    // 信号量计数器队列
OS_EXT data  OS_SIZE  OSSemTask[OS_MAX_SEMS];   // 信号量等待任务队列
#endif

OS_EXT data  OS_SIZE  OSTaskReady;		// 就绪任务表

extern void  (* const TaskFunction[OS_MAX_TASKS])(void);
extern code  OS_SIZE  OSMapTbl[];
extern code  INT8U    StackSize[];              // 每个任务的堆栈大小
/*
*********************************************************************************************************
*                                          SEMAPHORE MANAGEMENT
*********************************************************************************************************
*/
#if EN_OS_SEM > 0

#if EN_OS_SEM_ACCEPT > 0
INT8U         OSSemAccept(INT8U SemID);
#endif

void          OSSemInit (INT8U SemIndex, INT8U SemCount);
INT8U         OSSemPend (INT8U SemIndex, INT8U Timeout) reentrant;
void          OSSemPost (INT8U SemIndex) reentrant;
INT8U         OSSemQuery(INT8U SemIndex) reentrant;

#endif

/*
*********************************************************************************************************
*                                            TASK MANAGEMENT
*********************************************************************************************************
*/

#if EN_OS_TASK_SUSPEND > 0
INT8U         OSTaskResume(INT8U TaskID) reentrant;
INT8U         OSTaskSuspend(INT8U TaskID) reentrant;
#endif

#if EN_OS_TASK_STACK_CHK > 0
void          OSTaskStkChk( void ) reentrant;
#endif

/*
*********************************************************************************************************
*                                            TIME MANAGEMENT
*********************************************************************************************************
*/

void          OSTimeDly(INT8U Ticks) reentrant;

#if EN_OS_TIME_DLY_RESUME > 0
INT8U         OSTimeDlyResume(INT8U TaskID) reentrant;
#endif

void          OSTimeTick(void);

/*
*********************************************************************************************************
*                                             MISCELLANEOUS
*********************************************************************************************************
*/

void          OSStart(void);

/*
*********************************************************************************************************
*                                      INTERNAL FUNCTION PROTOTYPES
*                            (Your application MUST NOT call these functions)
*********************************************************************************************************
*/

void          OS_Sched(void);

/*
*********************************************************************************************************
*                                          FUNCTION PROTOTYPES
*                                      (Target Specific Functions)
*********************************************************************************************************
*/

void          OSCtxSw(void);
void          OSIntCtxSw(void);
unsigned char FindBitNum(OS_SIZE OSBitTaskS);
void          OSIntEnter(void);
void          OSIntExit(void);

/*******************************************************************************************************/

⌨️ 快捷键说明

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