📄 ucos_ii.h
字号:
INT32U OSBlkSize; /* 每个内存块的容量 */
INT32U OSNBlks; /* 内存分区中总的内存块的数量 */
INT32U OSNFree; /* 分区中当前可以获得的空余内存块数量 */
INT32U OSNUsed; /* 分区中当前已使用的内存块数量 */
} OS_MEM_DATA;
#endif
/*$换页*/
/*
*********************************************************************************************************
* 互斥型信号量的定义
*********************************************************************************************************
*/
#if OS_MUTEX_EN > 0
typedef struct
{
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待事件发生的任务列表 */
INT8U OSEventGrp; /* 对应于等待事件发生的任务的事件组 */
INT8U OSValue; /* 互斥型值 (0 = 被占用, 1 = 可以使用) */
INT8U OSOwnerPrio; /* 互斥型信号量的占有者的任务优先级别或者无占有者为0XFF */
INT8U OSMutexPIP; /* 优先级继承优先级或 0xFF 没有被占用 */
} OS_MUTEX_DATA;
#endif
/*
*********************************************************************************************************
* 消息队列数据的定义
*********************************************************************************************************
*/
#if OS_Q_EN > 0
typedef struct os_q
{
struct os_q *OSQPtr; /* 在队列控制块中链接下一个控制块 */
void **OSQStart; /* 指向消息队列的指针数组的起始地址的指针 */
void **OSQEnd; /* 指向消息队列结束单元的下一个地址的指针 */
void **OSQIn; /* 指向消息队列中插入下一条消息的位置的指针 */
void **OSQOut; /* 指向消息队列中取出下一条消息的位置的指针 */
INT16U OSQSize; /* 队列的容量 */
INT16U OSQEntries; /* 消息队列中当前的消息量 */
} OS_Q; /* 队列控制块 */
typedef struct
{
void *OSMsg; /* 指向从消息队列中取出的下一条消息的指针 */
INT16U OSNMsgs; /* 消息队列中的消息量 */
INT16U OSQSize; /* 消息队列中的容量 */
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待事件发生的任务的列表 */
INT8U OSEventGrp; /* 对应于等待事件发生的任务的事件组 */
} OS_Q_DATA;
#endif
/*
*********************************************************************************************************
* 信号量数据
*********************************************************************************************************
*/
#if OS_SEM_EN > 0
typedef struct
{
INT16U OSCnt; /* 信号量计数值 */
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待事件发生的任务的列表 */
INT8U OSEventGrp; /* 对应于等待事件发生的任务的事件组 */
} OS_SEM_DATA;
#endif
/*
*********************************************************************************************************
* 任务堆栈数据
*********************************************************************************************************
*/
#if OS_TASK_CREATE_EXT_EN > 0
typedef struct
{
INT32U OSFree; /* 堆栈中空余字节的数量 */
INT32U OSUsed; /* 堆栈中已用字节的数量 */
} OS_STK_DATA;
#endif
/*$换页*/
/*
*********************************************************************************************************
* 任务控制块
*********************************************************************************************************
*/
typedef struct os_tcb
{
OS_STK *OSTCBStkPtr; /* 指向当前任务堆栈栈顶的指针 */
#if OS_TASK_CREATE_EXT_EN > 0
void *OSTCBExtPtr; /* 指向用户定义的TCB扩展的指针 */
OS_STK *OSTCBStkBottom; /* 指向任务堆栈栈底的指针 */
INT32U OSTCBStkSize; /* 存有栈中可容纳的指针元数目,而不是用字节表示的栈容量总数 */
INT16U OSTCBOpt; /* 把任务选择项传给 OSTaskCreateExt() */
INT16U OSTCBId; /* 存储任务的识别码 (0..65535) */
#endif
struct os_tcb *OSTCBNext; /* 任务控制块列表中指向下一任务控制块的指针 */
struct os_tcb *OSTCBPrev; /* 任务控制块列表中指向前一任务控制块的指针 */
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0)
OS_EVENT *OSTCBEventPtr; /* 指向事件控制块的指针 */
#endif
#if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
void *OSTCBMsg; /* 指向从函数 OSMboxPost() 或 OSQPost()中传递消息给任务的指针 */
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
#if OS_TASK_DEL_EN > 0
OS_FLAG_NODE *OSTCBFlagNode; /* 指向事件标志节点的指针 */
#endif
OS_FLAGS OSTCBFlagsRdy; /* 当任务等待事件标志组时,它是使任务进入就绪态的事件标志 */
#endif
INT16U OSTCBDly; /* 延时任务若干节拍或挂起一段时间等待事件发生 */
INT8U OSTCBStat; /* 任务状态标志 */
INT8U OSTCBPrio; /* 任务优先级别 (0 为最高, 63 为最低) */
INT8U OSTCBX; /* Bit position in group corresponding to task priority (0..7) */
INT8U OSTCBY; /* Index into ready table corresponding to task priority */
INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */
INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */
#if OS_TASK_DEL_EN > 0
BOOLEAN OSTCBDelReq; /* 表示该任务是否删除自身 */
#endif
} OS_TCB;
/*$换页*/
/*
*********************************************************************************************************
* 全局 变量
*********************************************************************************************************
*/
OS_EXT INT32U OSCtxSwCtr; /* 存储任务切换数目的计数器 */
#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
OS_EXT OS_EVENT *OSEventFreeList; /* 指向空余事件控制块列表的指针 */
OS_EXT OS_EVENT OSEventTbl[OS_MAX_EVENTS];/* 事件控制块列表 */
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
OS_EXT OS_FLAG_GRP OSFlagTbl[OS_MAX_FLAGS]; /* 包含事件标志组的列表 */
OS_EXT OS_FLAG_GRP *OSFlagFreeList; /* 指向事件标志组的空余列表的指针 */
#endif
#if OS_TASK_STAT_EN > 0
OS_EXT INT8S OSCPUUsage; /* CPU使用的百分比 */
OS_EXT INT32U OSIdleCtrMax; /* 1秒内空闲计数器的最大值 */
OS_EXT INT32U OSIdleCtrRun; /* 1秒内空闲计数器达到的值 */
OS_EXT BOOLEAN OSStatRdy; /* 表示统计任务就绪的标志 */
OS_EXT OS_STK OSTaskStatStk[OS_TASK_STAT_STK_SIZE]; /* 统计任务堆栈 */
#endif
OS_EXT INT8U OSIntNesting; /* 中断嵌套等级 */
OS_EXT INT8U OSIntExitY;
OS_EXT INT8U OSLockNesting; /* 多重任务锁定的嵌套等级 */
OS_EXT INT8U OSPrioCur; /* 当前任务的优先级别 */
OS_EXT INT8U OSPrioHighRdy; /* 最高优先级任务的级别 */
OS_EXT INT8U OSRdyGrp; /* 就绪表组 */
OS_EXT INT8U OSRdyTbl[OS_RDY_TBL_SIZE]; /* 就绪任务列表 */
OS_EXT BOOLEAN OSRunning; /* 内核正在运行的标志 */
OS_EXT INT8U OSTaskCtr; /* 创建任务的数量 */
OS_EXT volatile INT32U OSIdleCtr; /* 空闲计数器 */
OS_EXT OS_STK OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE]; /* 空闲任务堆栈 */
OS_EXT OS_TCB *OSTCBCur; /* 指向当前正在运行的TCB的指针 */
OS_EXT OS_TCB *OSTCBFreeList; /* 指向空余TCB列表的指针 */
OS_EXT OS_TCB *OSTCBHighRdy; /* 指向最高优先级TCB的指针 */
OS_EXT OS_TCB *OSTCBList; /* 指向双向链接TCB列表的指针 */
OS_EXT OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];/* 指向创建TCB的指针的列表 */
OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /* TCB列表 */
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
OS_EXT OS_MEM *OSMemFreeList; /* 指向内存分区的空余列表的指针 */
OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];/* 用于内存分区管理器的存储 */
#endif
#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
OS_EXT OS_Q *OSQFreeList; /* 指向空余队列控制块列表的指针 */
OS_EXT OS_Q OSQTbl[OS_MAX_QS]; /* 队列控制块列表 */
#endif
#if OS_TIME_GET_SET_EN > 0
OS_EXT volatile INT32U OSTime; /* 系统时间的当前值 */
#endif
extern INT8U const OSMapTbl[]; /* Priority->Bit Mask lookup table */
extern INT8U const OSUnMapTbl[]; /* Priority->Index lookup table */
/*$换页*/
/*
*********************************************************************************************************
* 函数原型
* (Target Independent Functions)
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* 事件标志管理
*********************************************************************************************************
*/
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
#if OS_FLAG_ACCEPT_EN > 0
OS_FLAGS OSFlagAccept(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err);
#endif
OS_FLAG_GRP *OSFlagCreate(OS_FLAGS flags, INT8U *err);
#if OS_FLAG_DEL_EN > 0
OS_FLAG_GRP *OSFlagDel(OS_FLAG_GRP *pgrp, INT8U opt, INT8U *err);
#endif
OS_FLAGS OSFlagPend(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err);
OS_FLAGS OSFlagPost(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U operation, INT8U *err);
#if OS_FLAG_QUERY_EN > 0
OS_FLAGS OSFlagQuery(OS_FLAG_GRP *pgrp, INT8U *err);
#endif
#endif
/*
*********************************************************************************************************
* 邮箱消息管理
*********************************************************************************************************
*/
#if OS_MBOX_EN > 0
#if OS_MBOX_ACCEPT_EN > 0
void *OSMboxAccept(OS_EVENT *pevent);
#endif
OS_EVENT *OSMboxCreate(void *msg);
#if OS_MBOX_DEL_EN > 0
OS_EVENT *OSMboxDel(OS_EVENT *pevent, INT8U opt, INT8U *err);
#endif
void *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
#if OS_MBOX_POST_EN > 0
INT8U OSMboxPost(OS_EVENT *pevent, void *msg);
#endif
#if OS_MBOX_POST_OPT_EN > 0
INT8U OSMboxPostOpt(OS_EVENT *pevent, void *msg, INT8U opt);
#endif
#if OS_MBOX_QUERY_EN > 0
INT8U OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata);
#endif
#endif
/*
*********************************************************************************************************
* 内存管理
*********************************************************************************************************
*/
#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
OS_MEM *OSMemCreate(void *addr, INT32U nblks, INT32U blksize, INT8U *err);
void *OSMemGet(OS_MEM *pmem, INT8U *err);
INT8U OSMemPut(OS_MEM *pmem, void *pblk);
#if OS_MEM_QUERY_EN > 0
INT8U OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -