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

📄 ucos_ii.h

📁 ucos_ii在S3C2410上的移植
💻 H
📖 第 1 页 / 共 4 页
字号:
    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 + -