UC/OS—II常用资料整理(自己整理的)
本帖最后由 654705188 于 2012-8-3 18:05 编辑UC/OS—II常用资料整理
作者:~风中的叶~QQ:654705188时间:2012-4-17
http://user.qzone.qq.com/654705188/infocenter#!app=2&via=QZ.HashRefresh&pos=1334584159
一、变量类型
1. OS_STK:typedef unsigned int堆栈的类型定义
1.1 OS_STK_DATA:堆栈数据的类型定义
2. OS_CPU_SR:typedef unsigned int保存CPU状态的变量类型
3. OS_EVENT:消息事件的类型定义,包括信号量、互斥型信号量、消息邮箱、消息队列
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16UOSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl;
} OS_EVENT;
3.1OS_SEM_DATA:消息信号量数据的类型定义
3.2OS_MUTEX_DATA:消息互斥型信号量数据的类型定义
3.3OS_MBOX_DATA:消息邮箱数据的类型定义
4. OS_FLAG_GRP:标志组的类型定义
typedef struct {
INT8U OSFlagType;
Void *OSFlagWaitList;
OS_FLAGSOSFlagFlags;
} OS_FLAG_GRP;
4.1 OS_FLAGS:typedef INT16U事件标志(位)类型定义
4.2 OS_FLAG_NODE:事件标志节点类型定义
5. OS_Q:消息队列的类型定义
typedef struct os_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;
INT32UOSMemBlkSize;
INT32UOSMemNBlks;
INT32UOSMemNFree;
} OS_MEM;
6.1 OS_MEM_DATA:内存管理数据的类型定义
7. OS_TCB:任务控制块的类型定义
二、常用变量
1. OSCtxSwCtr:OS_EXTINT32U任务切换次数的记录变量
2. OSCPUUsage:OS_EXTINT8SCPU的使用率
3. OSIdleCtr:OS_EXTINT32空闲任务计数器
4. OSIdleCtrRun:空闲任务的计数器每秒的计数值
5. OSIntNesting:OS_EXTINT8S中断嵌套的层数(0~255)
6. OSLockNesting:OS_EXT INT8S调用OSSchedLock嵌套层数
7. OSPrioCur:OS_EXTINT8S正在运行的任务的优先级
8. OSTaskCtr:OS_EXTINT8S已经建立了的任务数
全局变量:
变量
值
变量的说明
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_ENTER_CRITICAL();
OS_EXIT_CRITICAL();
一、OS_CORE.C
(1)voidOSInit (void) //系统初始化
(2)voidOSIntEnter (void) //发生了一次中断(中断嵌套的逐层进入)
(3)voidOSIntExit (void) //退出了一次中断(中断嵌套的逐层退出)
(4)voidOSSchedLock (void) // 给调度器上锁
(5)voidOSSchedUnlock (void) // 给调度器解锁,成对使用
(6)voidOSStart (void) // 启动多任务过程,在启动之前必须调用OSInit(),并已建立一个任务。其中OSStartHighRdy()必须调用OSTaskSwHook(),并令OSRunning = TRUE.
(7)voidOSStatInit (void) //确定CPU 使用率,第一个任务中调用
(8)voidOSTimeTick (void) //时钟节拍服务函数,在每个时钟节拍了解每个任务的延时情况,使其中已经到了延时时限的非挂起任务进入就绪状态
(9)INT16UOSVersion (void) //返回uc/os的版本号*100
(10)voidOS_Dummy (void) //不做任何事情,被OSTaskDel() 所调用
(11)INT8UOS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U msk)
// 使一个正在等待的任务进入就绪状态,在调用函数OS***Post发送一个事件时被调用
(12)voidOS_EventTaskWait (OS_EVENT *pevent)
//使一个任务进入等待某事件发生状态
(13)voidOS_EventTO (OS_EVENT *pevent)
// 使一个等待超时的任务进入就绪状态
(14)voidOS_EventWaitListInit (OS_EVENT *pevent)
// 把OSEventGrp及任务等待表中的每一位清零,即令ECB中不含任务等待,被OS***Create()调用
(15)voidOS_Sched (void) // 实现任务级的调度
(16)voidOS_TaskIdle (void *pdata) // 空闲任务,为使CPU 在没有用户任务时有事可做
(17)voidOS_TaskStat (void *pdata)// 统计任务,每秒计算一次CPU在单位时间内的使用时间,并将计算结果以百分数的形式存放在OSCPUUsage中,以便应用程序访问它来了解cpu的利用率
(18)INT8UOS_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
// 为用户程序分配任务控制块及对其进行初始化
备注:INT8UconstOSUnMapTbl[ ] 是uc/os 为提高查找速度而定义的一个数组
二、OS_TASK.C
(1)INT8UOSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) // 任务的创建
(2)INT8UOSTaskCreateExt (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)INT8UOSTaskChangePrio (INT8U oldprio, INT8U newprio)
// 任务优先级别的改变
(4)INT8UOSTaskDel (INT8U prio) // 任务的删除
(5)INT8UOSTaskDelReq (INT8U prio) // 请求删除任务函数
(6)INT8UOSTaskSuspend (INT8U prio) // 任务的挂起,可用来挂起自身或除空闲任务之外的任何任务
(7)INT8UOSTaskResume (INT8U prio) // 任务的恢复
(8)INT8UOSTaskQuery (INT8U prio, OS_TCB *pdata)
// 任务的查询
(9)INT8UOSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)
// 校核空余内存的数量
(10)voidOSTaskNameSet (INT8U prio,
INT8U*pname,
INT8U*perr)
(11)INT8UOSTaskNameGet (INT8U prio,
INT8U**pname,
INT8U *perr)
(12)INT32UOSTaskRegGet (INT8U prio,
INT8U id,
INT8U*perr)
//GET THE CURRENT VALUE OF A TASK REGISTER
(13)voidOSTaskRegSet (INT8U prio,
INT8U id,
INT32U value,
INT8U *perr)
//SET THE CURRENT VALUE OF A TASK VARIABLE
(14)voidOS_TaskReturn (void)
//CATCH ACCIDENTAL TASK RETURN
(15)voidOS_TaskStkClr (OS_STK*pbos,
INT32U size,
INT16U opt)
//CATCH ACCIDENTAL TASK RETURN
三、OS_TIME.C
(1)voidOSTimeDly (INT16U ticks) // 以时钟节拍数为单位延时
(2)INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
// 用时、分、秒、毫秒为单位延时
(3)INT8UOSTimeDlyResume (INT8U prio)
// 取消延时,若任务比正在运行的任务级别高,则立即引发一次调度
(4)INT32UOSTimeGet (void) // 获取OSTime 值
(5)voidOSTimeSet (INT32U ticks) // 设置 OSTime 值
注:INT32UOSTime // 全局变量,用以记录系统发生的时钟节拍
四、OS_SEM.C
(1)OS_EVENT*OSSemCreate (INT16U cnt)
// 创建信号量
(2)OS_EVENT*OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *err)
// 删除信号量
(3)INT16UOSSemAccept (OS_EVENT *pevent)
// 无等待的请求信号量
(4)voidOSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
// 有等待的请求信号量
(5)INT8UOSSemPost (OS_EVENT *pevent)
// 发送(释放)信号量
(6)INT8UOSSemQuery (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)voidOSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
// 有等待时间的请求信号量
(4)INT8UOSMutexAccept (OS_EVENT *pevent, INT8U *err)
// 无等待时间的请求信号量
(5)INT8UOSMutexPost (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, INT16U timeout, INT8U *err)
// 请求消息邮箱,查看OSEventPtr是否为NULL
(5)INT8UOSMboxPost (OS_EVENT *pevent, void *msg)
// 向消息邮箱发送消息
(6)INT8UOSMboxPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
// 以广播形式向事件等待任务表中的所有任务发送消息
(7)INT8UOSMboxQuery (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)INT8UOSQFlush (OS_EVENT *pevent)
// 清空消息队列
(4)void*OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
// 有等待的请求一个消息队列
(5)void*OSQAccept (OS_EVENT *pevent)
// 无等待的请求一个消息队列
(6)INT8UOSQPost (OS_EVENT *pevent, void *msg)
// 以“先进先出”的方式向消息队列发送消息
(7)INT8UOSQPostFront (OS_EVENT *pevent, void *msg)
// 以“后进先出”的方式向消息队列发送消息
(8)INT8UOSQPostOpt (OS_EVENT *pevent, void *msg, INT8U opt)
//OS_POST_OPT_BROADCAST
// 以“广播”方式向消息队列发送消息
(9)INT8UOSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)
// 获取消息队列的当前状态
(10)voidOS_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_FLAGSOSFlagPend (OS_FLAG_GRP *pgrp, // 所要请求的信号量集的指针
OS_FLAGS flags, // 滤波器
INT8U wait_type, // 等待类型
INT16U timeout, // 延时时限
INT8U *err) // 错误信息
// 请求信号量集
(4)OS_FLAGSOSFlagAccept (OS_FLAG_GRP *pgrp,// 所请求的信号量集指针
OS_FLAGS flags, // 请求的信号
INT8U wait_type, // 逻辑运算类型
INT8U *err) // 错误信息
// 无等待的请求一个信号量集
(5)OS_FLAGSOSFlagPost (OS_FLAG_GRP *pgrp,
OS_FLAGS flags, // 所要选择发送的信号
INT8U opt, // 信号有效的选项
INT8U *err)
// 向信号量集发送信号
(6)OS_FLAGSOSFlagQuery (OS_FLAG_GRP *pgrp,// 待查询的信号量集的指针
INT8U *err)
// 查询信号量的状态,返回被查询信号量集标志组的成员OSFlagFlags
(7)staticvoidOS_FlagBlock (OS_FLAG_GRP *pgrp, // 信号量集指针OS_FLAG_NODE *pnode,//待添加的等待任务节点指针
OS_FLAGS flags, // 指定等待信号的数据
INT8U wait_type, // 信号与等待之间的逻辑
INT16U timeout) // 等待时限
// 添加节点,在请求信号量集函数OSFlagPend() 中被调用
(8)staticBOOLEANOS_FlagTaskRdy (OS_FLAG_NODE *pnode,
OS_FLAGS flags_rdy)
// 期望的事件标志为已经置位,从而使一个任务准备运行
(9)voidOS_FlagUnlink (OS_FLAG_NODE *pnode)
// 删除节点,在OSFlagPost() 中被调用
(10)voidOS_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)INT8UOSMemPut (OS_MEM*pmem, void *pblk)
// 释放一个内存块
(4)INT8UOSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)
// 查询动态内存的状态
(5)voidOS_MemInit (void) // 初始化动态内存 资料不错,mark 整理的挺好,会仔细看看的1 好东西 不顶对不起楼主 顶一下,好资料 收藏了,现在在练习用uCOS点LED
刚开始学习uCOS,资料很有用,谢谢! 是不是这些都得记住啊
不错,,好东西 我正想搞这样的一个东西.把常用的都注释出来,想不到楼主已经走在我前面了.学习了 sn516952 发表于 2012-8-15 14:22 static/image/common/back.gif
我正想搞这样的一个东西.把常用的都注释出来,想不到楼主已经走在我前面了.学习了 ...
那你搞UCos-III吧,我弄过了一半,没时间弄了。 cool 654705188 发表于 2012-8-15 18:50 static/image/common/back.gif
那你搞UCos-III吧,我弄过了一半,没时间弄了。
UCOS-II 还没学好,不再造次. 谢谢,{:smile:}{:smile:} 不错。有用 看一下,顶一下
页:
[1]