?? ucos_ii.h
字號:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
*
* V2.00
*
* File : uCOS_II.H
* 修改者:梁安韜
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* MISCELLANEOUS
*********************************************************************************************************
*/
#ifndef _UCOS_II_H_
#define _UCOS_II_H_
#define OS_VERSION 200 //uCOS_II操作系統的版本號為2.00
#ifdef OS_GLOBALS //若定義了操作系統的全軍變量
#define OS_EXT //定義變量的類型為空
#else
#define OS_EXT extern //否則定義的變量類型為外部的變量類型
#endif
#define OS_PRIO_SELF 255 //正在運行的操作系統任務的優先級為 255
#if OS_TASK_STAT_EN //若允許操作系統創建靜態任務
#define OS_N_SYS_TASKS 2 //定義系統任務的個數為 2 個系統任務
#else
#define OS_N_SYS_TASKS 1 //否則定義操作系統的任務個數 為 1個任務
#endif
#define OS_STAT_PRIO (OS_LOWEST_PRIO - 1) //定義靜態任務的優先級為 11
#define OS_IDLE_PRIO (OS_LOWEST_PRIO) //定義空閑任務的優先級別為 12
#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) //定義事件表的大小為 2個字節 因為12個優先級占用2個字節
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) //定義就緒的任務表為2個字節 因為12個優先級占用2個字節
#define OS_TASK_IDLE_ID 65535 //定義空閑任務的ID號為65535
#define OS_TASK_STAT_ID 65534 //定義靜態任務的ID號為65534
#define OS_STAT_RDY 0x00 //操作系統靜態任務為準備狀態
#define OS_STAT_SEM 0x01 //操作系統靜態任務為未決定的旗語
#define OS_STAT_MBOX 0x02 //操作系統靜態任務為未決定的郵箱
#define OS_STAT_Q 0x04 // 操作系統靜態任務為未決定的隊列
#define OS_STAT_SUSPEND 0x08 //操作系統靜態任務為掛起
#define OS_EVENT_TYPE_MBOX 1 //操作系統事件類型為郵箱方式
#define OS_EVENT_TYPE_Q 2 //操作系統事件類型為隊列方式
#define OS_EVENT_TYPE_SEM 3 //操作系統事件類型為信號方式
#define OS_TASK_OPT_STK_CHK 0x0001 //允許堆棧的校驗對于正在操作的任務中
#define OS_TASK_OPT_STK_CLR 0x0002 //任務創建時可以清除堆棧
#define OS_TASK_OPT_SAVE_FP 0x0004 //保存上下文的浮點寄存器方式
#ifndef FALSE //若沒有定義FALSE
#define FALSE 0 //定義FALSE為0
#endif
#ifndef TRUE //若沒有定義TRUE
#define TRUE 1 //定義TRUE為1
#endif
/*
*********************************************************************************************************
* ERROR CODES
*********************************************************************************************************
*/
#define OS_NO_ERR 0 //定義操作系統沒有錯誤
#define OS_ERR_EVENT_TYPE 1 //操作系統錯誤的事件類型
#define OS_ERR_PEND_ISR 2 //操作系統錯誤的未決定的中斷方式
#define OS_TIMEOUT 10 //定義操作系統的超時方式
#define OS_TASK_NOT_EXIST 11 //定義操作系統任務不存在方式
#define OS_MBOX_FULL 20 //定義操作系統郵箱已經滿了
#define OS_Q_FULL 30 //定義消息隊列已經滿了
#define OS_PRIO_EXIST 40 //定義優先級已經存在
#define OS_PRIO_ERR 41 //定義任務優先級錯誤
#define OS_PRIO_INVALID 42 //定義任務優先級無效
#define OS_SEM_OVF 50 //定義信號超出
#define OS_TASK_DEL_ERR 60 //定義空閑任務刪除錯誤
#define OS_TASK_DEL_IDLE 61 //定義空閑任務處于空閑中
#define OS_TASK_DEL_REQ 62 //定義空閑任務刪除請求
#define OS_TASK_DEL_ISR 63 //定義空閑任務刪除中斷服務
#define OS_NO_MORE_TCB 70 //定義操作系統沒有足夠的的任務控制塊
#define OS_TIME_NOT_DLY 80 //時間沒有延時
#define OS_TIME_INVALID_MINUTES 81 //有效的分鐘
#define OS_TIME_INVALID_SECONDS 82 //有效的秒
#define OS_TIME_INVALID_MILLI 83 //有效的毫秒
#define OS_TIME_ZERO_DLY 84 //時間0延時
#define OS_TASK_SUSPEND_PRIO 90 //當前任務優先級掛起
#define OS_TASK_SUSPEND_IDLE 91 //空閑任務掛起
#define OS_TASK_RESUME_PRIO 100 //當前任務恢復運行
#define OS_TASK_NOT_SUSPENDED 101 //當前任務沒有掛起
#define OS_MEM_INVALID_PART 110 //內存有效的部分
#define OS_MEM_INVALID_BLKS 111 //內存有效的塊
#define OS_MEM_INVALID_SIZE 112 //內存有效的大小
#define OS_MEM_NO_FREE_BLKS 113 //內存塊沒有釋放
#define OS_MEM_FULL 114 //內存已經滿
#define OS_TASK_OPT_ERR 130 //任務操作錯誤
/*
*********************************************************************************************************
* EVENT CONTROL BLOCK
*********************************************************************************************************
*/
#if (OS_MAX_EVENTS >= 2) //若事件塊大于 或者等于2
typedef struct {
void *OSEventPtr; //事件塊的指針
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; //事件表
INT16U OSEventCnt; //已經使用的事件個數
INT8U OSEventType; //事件類型
INT8U OSEventGrp; //事件所屬的組號
} OS_EVENT;
#endif
/*
*********************************************************************************************************
* MESSAGE MAILBOX DATA
*********************************************************************************************************
*/
#if OS_MBOX_EN //若允許使用郵箱方式
typedef struct {
void *OSMsg; //消息指針
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; //所屬事件表
INT8U OSEventGrp; //所屬事件的組號
} OS_MBOX_DATA;
#endif
/*
*********************************************************************************************************
* MEMORY PARTITION DATA STRUCTURES
*********************************************************************************************************
*/
#if OS_MEM_EN && (OS_MAX_MEM_PART >= 2)//若允許使用內存方式 并且 內存塊大于等于 2個
typedef struct {
void *OSMemAddr; //內存起始地址
void *OSMemFreeList; //釋放內存塊的起始地址鏈表
INT32U OSMemBlkSize; //每塊內存的大小
INT32U OSMemNBlks; //總供右多少塊內存塊
INT32U OSMemNFree; //還有多少塊內存沒有釋放
} OS_MEM;
typedef struct {
void *OSAddr; //內存起始地址
void *OSFreeList; //釋放內存塊的起始地址鏈表
INT32U OSBlkSize; //每塊內存的大小
INT32U OSNBlks; //總供右多少塊內存塊
INT32U OSNFree; //有多少塊內存被釋放
INT32U OSNUsed; //有多少塊內存被使用
} OS_MEM_DATA;
#endif
/*
*********************************************************************************************************
* MESSAGE QUEUE DATA
*********************************************************************************************************
*/
#if OS_Q_EN //若允許隊列創建
typedef struct {
void *OSMsg; //隊列的起始地址
INT16U OSNMsgs; //有多少消息在隊列中
INT16U OSQSize; //消息隊列的大小
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];//所屬事件表
INT8U OSEventGrp; //所屬事件表的組號
} OS_Q_DATA;
#endif
/*
*********************************************************************************************************
* SEMAPHORE DATA
*********************************************************************************************************
*/
#if OS_SEM_EN //若允許使用信號內容
typedef struct {
INT16U OSCnt; //旗語個數
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; //事件表
INT8U OSEventGrp; //所屬事件組號
} OS_SEM_DATA;
#endif
/*
*********************************************************************************************************
* TASK STACK DATA
*********************************************************************************************************
*/
#if OS_TASK_CREATE_EXT_EN //若允許創建擴展的任務
typedef struct {
INT32U OSFree; //有多少個字節在堆棧上被釋放
INT32U OSUsed; //有多少個字節在堆棧上被使用
} OS_STK_DATA;
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* TASK CONTROL BLOCK
*********************************************************************************************************
*/
typedef struct os_tcb {
OS_STK *OSTCBStkPtr; //任務控制堆棧的指針
#if OS_TASK_CREATE_EXT_EN //若允許創建擴展的任務功能
void *OSTCBExtPtr; //指向擴展的任務指針
OS_STK *OSTCBStkBottom; //指向任務堆棧的底
INT32U OSTCBStkSize; //任務堆棧的大小
INT16U OSTCBOpt; //保存任務控制快的選項
INT16U OSTCBId; //任務控制塊的ID
#endif
struct os_tcb *OSTCBNext; //指向下一個任務控制塊的指針
struct os_tcb *OSTCBPrev; //指向前一個任務控制快的指針
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN
//(若允許使用隊列 并且隊列個數要大于等于2 ) 或者允許使用郵箱 或者允許使用信號
OS_EVENT *OSTCBEventPtr; //指向任務事件的指針
#endif
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN
//若允許使用隊列 并且最大隊列大于2 或者允許使用郵箱
void *OSTCBMsg; //任務控制塊消息
#endif
INT16U OSTCBDly; // 任務控制延時
INT8U OSTCBStat; //任務狀態
INT8U OSTCBPrio; //任務優先級 0最高 63最低
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -