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

📄 ucos_ii.h

📁 c代码的操作系统 已经移植使用到产品上的内核
💻 H
📖 第 1 页 / 共 2 页
字号:

    INT8U          OSTCBX;    //任务控制快所在X位置
    INT8U          OSTCBY;     //任务控制块所在的Y位置
    INT8U          OSTCBBitX;  //任务控制块所在X位置的X位
    INT8U          OSTCBBitY;  //任务控制块所在的Y位置的Y位
    
#if OS_TASK_DEL_EN    		//若允许任务删除功能
    BOOLEAN        OSTCBDelReq;  //任务请求任务标志
#endif

} OS_TCB;

/*$PAGE*/

/*
*********************************************************************************************************
*                                            GLOBAL VARIABLES
*********************************************************************************************************
*/
                                       
OS_EXT  INT32U       OSCtxSwCtr;          //任务切换计数变量

#if     (OS_MAX_EVENTS >= 2)		//若事件大于2个事件
OS_EXT  OS_EVENT    *OSEventFreeList;   //释放的事件列表
OS_EXT  OS_EVENT     OSEventTbl[OS_MAX_EVENTS];//事件表
#endif

OS_EXT  INT32U       OSIdleCtr;         //任务空闲变量计数

#if     OS_TASK_STAT_EN			//若允许创建静态任务
OS_EXT  INT8S        OSCPUUsage;        //定义CPU使用百分变量
OS_EXT  INT32U       OSIdleCtrMax;       //1秒空闲任务的最大计数
OS_EXT  INT32U       OSIdleCtrRun;       //空闲允许变量
OS_EXT  BOOLEAN      OSStatRdy;         //静态任务准备变量
#endif

OS_EXT  INT8U        OSIntNesting;     //中断递增变量

OS_EXT  INT8U        OSLockNesting;      //任务锁住变量

OS_EXT idata INT8U   OSPrioCur;         //当前任务的优先级 定义在位区中
OS_EXT idata INT8U   OSPrioHighRdy;    //最到优先级变量

OS_EXT  INT8U        OSRdyGrp;       //任务准备组号
OS_EXT  INT8U        OSRdyTbl[OS_RDY_TBL_SIZE]; //任务准备就绪表

OS_EXT idata BOOLEAN  OSRunning; //任务正在运行的标志变量

#if     OS_TASK_CREATE_EN  || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
//	若任务允许创建	或者 允许创建扩展的任务		或者允许任务删除
OS_EXT  INT8U        OSTaskCtr;     //创建任务个数变量
#endif

OS_EXT idata OS_TCB   *OSTCBCur;      //当前任务指针
OS_EXT  OS_TCB        *OSTCBFreeList;  //释放任务列表指针
OS_EXT idata OS_TCB   *OSTCBHighRdy;  //最高就绪任务的准备变量指针
OS_EXT  OS_TCB        *OSTCBList;    //任务列表指针
OS_EXT  OS_TCB        *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];//任务优先级表指针数组

OS_EXT  INT32U       OSTime;         //操作系统时间变量


extern  INT8U const  OSMapTbl[];     //消息表队列
extern  INT8U const  OSUnMapTbl[];   //未使用的消息表


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

/*
*********************************************************************************************************
*                                        MESSAGE MAILBOX MANAGEMENT
*********************************************************************************************************
*/
#if         OS_MBOX_EN			//若允许使用邮箱功能
void       *OSMboxAccept(OS_EVENT *pevent) reentrant;	//邮箱请求
OS_EVENT   *OSMboxCreate(void *msg) reentrant;		//邮箱创建
void       *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) reentrant;	//邮箱未决定
INT8U       OSMboxPost(OS_EVENT *pevent, void *msg) reentrant;	//邮箱发送
INT8U       OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *ppdata) reentrant;//邮箱获取
#endif
/*
*********************************************************************************************************
*                                           MEMORY MANAGEMENT
*********************************************************************************************************
*/
#if         OS_MEM_EN && (OS_MAX_MEM_PART >= 2)
	//若允许使用内存功能	并且内存块大于2个以上
OS_MEM     *OSMemCreate(void *addr, INT32U nblks, INT32U blksize, INT8U *err) reentrant;//内存创建
void       *OSMemGet(OS_MEM *pmem, INT8U *err) reentrant;//内存获取
INT8U       OSMemPut(OS_MEM *pmem, void *pblk) reentrant;//内存写入
INT8U       OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *ppdata) reentrant;//内存访问
#endif
/*
*********************************************************************************************************
*                                         MESSAGE QUEUE MANAGEMENT
*********************************************************************************************************
*/
#if         OS_Q_EN && (OS_MAX_QS >= 2)	//若允许使用队列 并且队列大于2个
void       *OSQAccept(OS_EVENT *pevent) reentrant;//队列请求
OS_EVENT   *OSQCreate(void **start, INT16U size) reentrant;//队列创建
INT8U       OSQFlush(OS_EVENT *pevent) reentrant;//队列冲洗
void       *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) reentrant;//队列未决定
INT8U       OSQPost(OS_EVENT *pevent, void *msg) reentrant;//队列邮递
INT8U       OSQPostFront(OS_EVENT *pevent, void *msg) reentrant;//
INT8U       OSQQuery(OS_EVENT *pevent, OS_Q_DATA *ppdata) reentrant;
#endif

/*
*********************************************************************************************************
*                                          SEMAPHORE MANAGEMENT
*********************************************************************************************************
*/
#if         OS_SEM_EN		//若使用信号功能
INT16U      OSSemAccept(OS_EVENT *pevent) reentrant;//信号请求功能
OS_EVENT   *OSSemCreate(INT16U value) reentrant;//信号创建
void        OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) reentrant;//信号未定
INT8U       OSSemPost(OS_EVENT *pevent) reentrant;//信号
INT8U       OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *ppdata) reentrant;
#endif
/*
*********************************************************************************************************
*                                            TASK MANAGEMENT
*********************************************************************************************************
*/
#if         OS_TASK_CHANGE_PRIO_EN	//若允许任务改变优先级
INT8U       OSTaskChangePrio(INT8U oldprio, INT8U newprio) reentrant;//改变任务优先级函数
#endif						

INT8U       OSTaskCreate(void (*task)(void *pd), void *ppdata, OS_STK *ptos, INT8U prio) reentrant;
					//任务创建

#if         OS_TASK_CREATE_EXT_EN	//任务扩展创建
INT8U       OSTaskCreateExt(void  (*task)(void *pd), 
                            void   *ppdata, 
                            OS_STK *ptos, 
                            INT8U   prio,
                            INT16U  id,
                            OS_STK *pbos,
                            INT32U  stk_size,
                            void   *pext,
                            INT16U  opt) reentrant;
#endif                            


#if         OS_TASK_DEL_EN	//若允许删除任务
INT8U       OSTaskDel(INT8U prio) reentrant;	//任务删除
INT8U       OSTaskDelReq(INT8U prio) reentrant;//任务请求删除
#endif

#if         OS_TASK_SUSPEND_EN		//任务挂起
INT8U       OSTaskResume(INT8U prio) reentrant;//任务恢复
INT8U       OSTaskSuspend(INT8U prio) reentrant;//任务挂起
#endif

#if         OS_TASK_CREATE_EXT_EN	//若允许任务创建扩展功能
INT8U       OSTaskStkChk(INT8U prio, OS_STK_DATA *ppdata) reentrant;//任务堆栈校验
#endif

INT8U       OSTaskQuery(INT8U prio, OS_TCB *ppdata) reentrant;//任务队列

/*
*********************************************************************************************************
*                                            TIME MANAGEMENT
*********************************************************************************************************
*/
void        OSTimeDly(INT16U ticks) reentrant;//事件延时
INT8U       OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli) reentrant;//
						//延时时 分 秒 毫秒
INT8U       OSTimeDlyResume(INT8U prio) reentrant;//延时恢复
INT32U      OSTimeGet(void) reentrant;//获取时间
void        OSTimeSet(INT32U ticks) reentrant;//设置时间
void        OSTimeTick(void) reentrant;//时间间隔

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

void        OSInit(void) reentrant;//操作系统初始化

void        OSIntEnter(void) reentrant;//关中断
void        OSIntExit(void) reentrant;//开中断

void        OSSchedLock(void) reentrant;//调度上锁
void        OSSchedUnlock(void) reentrant;//调度未上锁

void        OSStart(void) reentrant;//操作系统开始激活

void        OSStatInit(void) reentrant;//操作系统开始初始化

INT16U      OSVersion(void) reentrant;//操作系统版本号



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

#if         OS_MBOX_EN || OS_Q_EN || OS_SEM_EN//若允许使用邮箱 或者 使用队列 或者使用信号功能
void        OSEventTaskRdy(OS_EVENT *pevent, void *msg, INT8U msk) reentrant;//操作系统事件任务准备
void        OSEventTaskWait(OS_EVENT *pevent) reentrant;//事件任务等待
void        OSEventTO(OS_EVENT *pevent) reentrant;//事件发送到
void        OSEventWaitListInit(OS_EVENT *pevent) reentrant;//
#endif

#if         OS_MEM_EN && (OS_MAX_MEM_PART >= 2)//若允许使用信号 并且 最大内存块大于等于2
void        OSMemInit(void) reentrant;//内存初始化
#endif

#if         OS_Q_EN			//若允许使用队列
void        OSQInit(void) reentrant;//初始化队列
#endif

void        OSSched(void) reentrant;//任务调度

void        OSTaskIdle(void *ddata) reentrant;//任务空闲

#if         OS_TASK_STAT_EN		//若任务状态允许
void        OSTaskStat(void *ddata) reentrant;//任务状态
#endif


INT8U       OSTCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT16U stk_size, void *pext, INT16U opt) reentrant;
		//任务控制块初始化

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

void        OSCtxSw(void);//任务切换 实现在OS_CPU_A.ASM中

void        OSIntCtxSw(void);//任务切换初始化

void        OSStartHighRdy(void);//准备到最高优先级的任务

void        OSTaskCreateHook(OS_TCB *ptcb) reentrant;//任务创建子沟函数
void        OSTaskDelHook(OS_TCB *ptcb) reentrant;//任务删除子沟函数
void        OSTaskStatHook(void) reentrant;//任务开始子沟函数
void       *OSTaskStkInit(void (*task)(void *pd), void *ppdata, void *ptos, INT16U opt) reentrant;
					//任务堆栈初始化函数
void        OSTaskSwHook(void) reentrant;//任务切换子沟函数

void        OSTickISR(void);//时钟节拍函数

void        OSTimeTickHook(void) reentrant;//时钟节拍子沟函数

void        InitTimer0(void) reentrant;  //时钟初始化函数

#endif

⌨️ 快捷键说明

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