UC/OS—II常用资料整理(转)

来源:互联网 发布:淘宝评价提取器 编辑:程序博客网 时间:2024/06/09 16:56
包括常用变量类型,常用全局变量和常用函数(并用不用的颜色标注出来)
ucos源码中文版+uCOS-II原理+UCOS之任务调度机制+uCOS_II_2.52源码中文译注+ucos-VC6.0


UC/OS—II常用资料整理
作者:~风中的叶~

http://user.qzone.qq.com/654705188/infocenter#!app=2&via=QZ.HashRefresh&pos=1334584159 
一、变量类型
1.  OS_STKtypedef unsigned int堆栈的类型定义
1.1   OS_STK_DATA堆栈数据的类型定义
2.  OS_CPU_SRtypedef unsigned int保存CPU状态的变量类型
3.   OS_EVENT消息事件的类型定义,包括信号量、互斥型信号量、消息邮箱、消息队列
typedef struct {
    INT8U  OSEventType;
INT8U  OSEventGrp;
INT16U OSEventCnt;
void    *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;
3.1  OS_SEM_DATA消息信号量数据的类型定义
3.2  OS_MUTEX_DATA消息互斥型信号量数据的类型定义
3.3  OS_MBOX_DATA消息邮箱数据的类型定义
4.  OS_FLAG_GRP标志组的类型定义
typedef struct {
INT8U  OSFlagType;
Void   *OSFlagWaitList;
OS_FLAGS OSFlagFlags;
} OS_FLAG_GRP;
4.1  OS_FLAGStypedef INT16U事件标志(位)类型定义
4.2   OS_FLAG_NODE事件标志节点类型定义
5.    OS_Q消息队列的类型定义
typedef structos_q {
struct os_q   *OSQPtr;
void         **OSQStart;
void         **OSQEnd;
void         **OSQIn;
void         **OSQOut;
INT16U      OSQSize;
INT16U      OSQEntries;
} OS_Q;
5.1   OS_Q_DATA:消息队列数据的类型定义
6.   OS_MEM内存管理的类型定义
typedef struct {
void     *OSMemAddr;
void     *OSMemFreeList;
INT32U  OSMemBlkSize;
INT32U  OSMemNBlks;
INT32U  OSMemNFree;
} OS_MEM;
6.1   OS_MEM_DATA内存管理数据的类型定义
7. OS_TCB:任务控制块的类型定义
二、常用变量
1. OSCtxSwCtrOS_EXT INT32U任务切换次数的记录变量
2. OSCPUUsageOS_EXT INT8S  CPU的使用率
3. OSIdleCtrOS_EXT INT32空闲任务计数器
4. OSIdleCtrRun空闲任务的计数器每秒的计数值
5. OSIntNestingOS_EXT  INT8S中断嵌套的层数(0~255
6. OSLockNestingOS_EXT INT8S调用OSSchedLock嵌套层数
7. OSPrioCurOS_EXT  INT8S正在运行的任务的优先级
8. OSTaskCtrOS_EXT  INT8S已经建立了的任务数
全局变量:
  
变量
    
    
变量的说明
    
OSPrioCur
    
0
    
INT8U,正在运行的任务的优先级
    
OSPrioHighRdy
    
0
    
INT8U,具有最高优先级别的就绪任务的优先级
    
OSTCBCur
    
NULL
    
OS_TCB  *,指向正在运行任务的OSTCB的指针
    
OSTCBHighRdy
    
NULL
    
OS_TCB  *,指向最高优先级就绪任务OSTCB的指针
    
OSTime
    
0L
    
INT32U,系统当前时间(节拍数)
    
OSIntNesting
    
0
    
INT8U,中断嵌套的层数(0~255)
    
OSLockNesting
    
0
    
INT8U,调用了OSSchedLock的嵌套层数
    
OSCtxSwCtr
    
0
    
INT32U,上下文切换的次数
    
OSTaskCtr
    
2
    
INT8U,已经建立了的任务数
    
OSRunning
    
FALSE
    
BOOLEAN,uC/OS-II核是否正在运行的标志
    
OSCPUUsage
    
0
    
INT8S,CPU的利用率(%)
    
OSIdleCtrMax
    
0L
    
INT32U,每秒空闲任务计数的最大值
    
OSIdleCtrRun
    
0L
    
INT32U,空闲任务的计数器每秒的计数值
    
OSIdleCtr
    
0L
    
INT32U,空闲任务计数器
    
OSStatRdy
    
FALSE
    
BOOLEAN,统计任务是否就绪的标志
    
OSIntExity
    
0
    
INT8U,用于OSInitExt()
  
三、常用函数
一、OS_CORE.C
(1)void  OSInit (void)            //系统初始化
(2)void  OSIntEnter (void)        //发生了一次中断(中断嵌套的逐层进入)
(3)void  OSIntExit (void)          //退出了一次中断(中断嵌套的逐层退出)
(4)void  OSSchedLock (void)      // 给调度器上锁
(5)void  OSSchedUnlock (void)    // 给调度器解锁,成对使用
(6)void  OSStart (void)           // 启动多任务过程,在启动之前必须调用OSInit(),并已建立一个任务。其中OSStartHighRdy()必须调用OSTaskSwHook(),并令OSRunning = TRUE.
(7)void  OSStatInit (void)         //确定CPU 使用率,第一个任务中调用
(8)void  OSTimeTick (void)        //时钟节拍服务函数,在每个时钟节拍了解每个任务的延时情况,使其中已经到了延时时限的非挂起任务进入就绪状态
(9)INT16U  OSVersion (void)      //返回uc/os的版本号*100
(10)void  OS_Dummy (void)       //不做任何事情,被OSTaskDel() 所调用
(11)INT8U  OS_EventTaskRdy (OS_EVENT *pevent, void *msg,INT8U msk)
                                  // 使一个正在等待的任务进入就绪状态,在调用函数OS***Post发送一个事件时被调用
(12)void  OS_EventTaskWait (OS_EVENT *pevent)
                                  //使一个任务进入等待某事件发生状态
(13)void  OS_EventTO (OS_EVENT *pevent)
                                  // 使一个等待超时的任务进入就绪状态
(14)void  OS_EventWaitListInit (OS_EVENT *pevent)
                                   // 把OSEventGrp及任务等待表中的每一位清零,即令ECB中不含任务等待,被OS***Create()调用
(15)void  OS_Sched (void)       // 实现任务级的调度
(16)void  OS_TaskIdle (void *pdata)   // 空闲任务,为使CPU 在没有用户任务时有事可做
(17)void  OS_TaskStat (void *pdata)  // 统计任务,每秒计算一次CPU在单位时间内的使用时间,并将计算结果以百分数的形式存放在OSCPUUsage中,以便应用程序访问它来了解cpu的利用率
(18)INT8U  OS_TCBInit (INT8U prio,   // 任务的优先级别,存于OSTCBPrio
OS_STK *ptos,     // 任务堆栈顶指针,存于OSTCBStkPtr
OS_STK *pbos,     // 任务堆栈栈底指针,存于OSTCBStkBottom
INT16U id,         // 任务的标识符,存于OSTCBID
INT32U stk_size,    // 任务堆栈长度,存于OSTCBStkSize
void *pext,         // 任务控制块的扩展指针,存于OSTCBExtPtr
INT16U opt)        // 任务控制块的选择项,存于OSTCBOpt
                // 为用户程序分配任务控制块及对其进行初始化
备注:INT8U  const OSUnMapTbl[ ] 是uc/os 为提高查找速度而定义的一个数组

二、OS_TASK.C
(1)INT8U  OSTaskCreate (void (*task)(void *pd), void*pdata, OS_STK *ptos, INT8U prio)                       // 任务的创建
(2)INT8U  OSTaskCreateExt (void   (*task)(void *pd),// 指向任务的指针
                        void    *pdata,          // 传递给任务的参数
                        OS_STK  *ptos,     // 指向任务堆栈栈顶的指针
                        INT8U    prio,          // 创建任务的优先级
                        INT16U   id,            // 任务的标识
                        OS_STK  *pbos,        // 任务堆栈栈底的指针
                        INT32U   stk_size,       // 任务堆栈的长度
                        void    *pext,          // 指向附加数据域的指针
                        INT16U   opt)         // 用于设定操作的选项
//OS_TASK_OPT_STK_CHK,OS_TASK_OPT_STK_CLR,OS_TASK_OPT_SAVE_FP
(3)INT8U  OSTaskChangePrio (INT8U oldprio, INT8Unewprio)
                                  // 任务优先级别的改变
(4)INT8U  OSTaskDel (INT8U prio)          // 任务的删除
(5)INT8U  OSTaskDelReq (INT8U prio)      // 请求删除任务函数
(6)INT8U  OSTaskSuspend (INT8U prio)     // 任务的挂起,可用来挂起自身或除空闲任务之外的任何任务
(7)INT8U  OSTaskResume (INT8U prio)      // 任务的恢复
(8)INT8U  OSTaskQuery (INT8U prio, OS_TCB *pdata)
                                     // 任务的查询
(9)INT8U  OSTaskStkChk (INT8Uprio, OS_STK_DATA *pdata)
                                     // 校核空余内存的数量

三、OS_TIME.C
(1)void  OSTimeDly (INT16U ticks)      // 以时钟节拍数为单位延时
(2)INT8U OSTimeDlyHMSM (INT8Uhours, INT8U minutes, INT8U seconds, INT16U milli)                            // 用时、分、秒、毫秒为单位延时
(3)INT8U  OSTimeDlyResume (INT8U prio)        
    // 取消延时,若任务比正在运行的任务级别高,则立即引发一次调度
(4)INT32U  OSTimeGet (void)              // 获取OSTime 值
(5)void  OSTimeSet (INT32U ticks)          // 设置 OSTime 值
注:INT32U OSTime            // 全局变量,用以记录系统发生的时钟节拍

四、OS_SEM.C
(1)OS_EVENT  *OSSemCreate (INT16U cnt)
                         // 创建信号量
(2)OS_EVENT  *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U*err)
                         // 删除信号量
(3)INT16U  OSSemAccept (OS_EVENT *pevent)
                         // 无等待的请求信号量
(4)void  OSSemPend (OS_EVENT *pevent, INT16U timeout,INT8U *err)
                        // 有等待的请求信号量
(5)INT8U  OSSemPost (OS_EVENT *pevent)
                        // 发送(释放)信号量
(6)INT8U  OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA*pdata)
                       // 获取信号量的当前状态

五、OS_MUTEX.C
(1)OS_EVENT  *OSMutexCreate (INT8U prio, INT8U *err)
                                        // 创建互斥型信号量
(2)OS_EVENT *OSMutexDel(OS_EVENT*pevent, INT8U opt, INT8U *err)                                            // 删除互斥型信号量
(3)void  OSMutexPend (OS_EVENT *pevent, INT16Utimeout, INT8U *err)
                                      // 有等待时间的请求信号量
(4)INT8U  OSMutexAccept (OS_EVENT *pevent, INT8U *err)
                                        // 无等待时间的请求信号量
(5)INT8U  OSMutexPost (OS_EVENT *pevent)
                                     // 发送(释放)互斥型信号量
(6)INT8U OSMutexQuery (OS_EVENT*pevent, OS_MUTEX_DATA *pdata)                                        // 获取互斥型信号量的当前状态

六、OS_MBOX.C
(1)OS_EVENT  *OSMboxCreate (void *msg)
                             // 创建一个消息邮箱
(2OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
                             // 删除消息邮箱
(3)void  *OSMboxAccept (OS_EVENT *pevent)   
                             // 无等待的请求消息邮箱
(4)void  *OSMboxPend (OS_EVENT *pevent, INT16Utimeout, INT8U *err)
                          // 请求消息邮箱,查看OSEventPtr是否为NULL
(5)INT8U  OSMboxPost (OS_EVENT *pevent, void *msg)
                          // 向消息邮箱发送消息
(6)INT8U  OSMboxPostOpt (OS_EVENT *pevent, void *msg,INT8U opt)
                     // 以广播形式向事件等待任务表中的所有任务发送消息
(7)INT8U  OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA*pdata)
                         // 状态查询

七、OS_Q.C
(1)OS_EVENT  *OSQCreate (void **start, INT16U size)
                                // 创建一个消息队列
(2)OS_EVENT  *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U*err)
                               // 删除消息队列
(3)INT8U  OSQFlush (OS_EVENT *pevent)
                              // 清空消息队列
(4)void  *OSQPend (OS_EVENT *pevent, INT16U timeout,INT8U *err)
                             // 有等待的请求一个消息队列
(5)void  *OSQAccept (OS_EVENT *pevent)  
                                // 无等待的请求一个消息队列
(6)INT8U  OSQPost (OS_EVENT *pevent, void *msg)
                            // 以“先进先出”的方式向消息队列发送消息
(7)INT8U  OSQPostFront (OS_EVENT *pevent, void *msg)
                           // 以“后进先出”的方式向消息队列发送消息
(8)INT8U  OSQPostOpt (OS_EVENT *pevent, void *msg,INT8U opt)
                           //OS_POST_OPT_BROADCAST
                           // 以“广播”方式向消息队列发送消息
(9)INT8U  OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)
                           // 获取消息队列的当前状态
(10)void  OS_QInit (void)  // 消息队列初始化
八、OS_FLAG.C
(1)OS_FLAG_GRP  *OSFlagCreate (OS_FLAGS flags,INT8U *err)
       // 信号量集的创建函数
(2)OS_FLAG_GRP  *OSFlagDel (OS_FLAG_GRP *pgrp,INT8U opt,INT8U*err)                                       // 删除信号量集
(3)OS_FLAGS  OSFlagPend (OS_FLAG_GRP *pgrp,     // 所要请求的信号量集的指针
OS_FLAGS flags,          // 滤波器
INT8U wait_type,          // 等待类型
INT16U timeout,           // 延时时限
INT8U *err)              // 错误信息
                        // 请求信号量集
(4)OS_FLAGS  OSFlagAccept (OS_FLAG_GRP *pgrp,  // 所请求的信号量集指针
OS_FLAGS flags,       // 请求的信号
INT8U wait_type,       // 逻辑运算类型
INT8U *err)           // 错误信息
            // 无等待的请求一个信号量集
(5)OS_FLAGS  OSFlagPost (OS_FLAG_GRP *pgrp,
OS_FLAGS flags,         // 所要选择发送的信号
INT8U opt,              // 信号有效的选项
INT8U *err)
            // 向信号量集发送信号
(6)OS_FLAGS  OSFlagQuery (OS_FLAG_GRP *pgrp,  // 待查询的信号量集的指针
INT8U *err)
        // 查询信号量的状态,返回被查询信号量集标志组的成员OSFlagFlags
(7)static  void OS_FlagBlock (OS_FLAG_GRP *pgrp,    // 信号量集指针OS_FLAG_NODE*pnode,//待添加的等待任务节点指针
OS_FLAGSflags,        // 指定等待信号的数据
INT8U wait_type,      // 信号与等待之间的逻辑
INT16Utimeout)       // 等待时限
// 添加节点,在请求信号量集函数OSFlagPend() 中被调用
(8)static  BOOLEAN OS_FlagTaskRdy (OS_FLAG_NODE *pnode,
OS_FLAGS flags_rdy)
                            // 期望的事件标志为已经置位,从而使一个任务准备运行
(9)void  OS_FlagUnlink(OS_FLAG_NODE *pnode)
                            // 删除节点,在OSFlagPost() 中被调用
(10)void  OS_FlagInit (void)          // initialize the event flag module,是uc/os的内部函数,应用程序不得调用该函数
九、OS_MEM.C
(1)OS_MEM  *OSMemCreate (void *addr, INT32U nblks,INT32U blksize, INT8U *err)                                     // 创建动态内存
(2)void  *OSMemGet (OS_MEM *pmem, INT8U *err)
                                           // 请求获得一个内存块
(3)INT8U  OSMemPut (OS_MEM  *pmem, void *pblk)
                                           // 释放一个内存块
(4)INT8U  OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)
                                          // 查询动态内存的状态
(5)void  OS_MemInit(void)               // 初始化动态内存

全部资料在附件中。


以上是UCOS-II资料;UCOS-III资料在http://bbs.elecfans.com/forum.php?mod=viewthread&tid=257878 中。
0 0