?? 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 + -