uCOS-II函数解释,宏定义速查手册
- 格式:doc
- 大小:143.00 KB
- 文档页数:11
uc/osII下的九个C语言文件功能函数大全一、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, // 任务的优先级别,存于OSTCBPrioOS_STK *ptos, // 任务堆栈顶指针,存于OSTCBStkPtrOS_STK *pbos, // 任务堆栈栈底指针,存于OSTCBStkBottomINT16U id, // 任务的标识符,存于OSTCBIDINT32U stk_size, // 任务堆栈长度,存于OSTCBStkSizevoid *pext, // 任务控制块的扩展指针,存于OSTCBExtPtrINT16U opt) // 任务控制块的选择项,存于OSTCBOpt// 为用户程序分配任务控制块及对其进行初始化备注:INT8U const OSUnMapTbl[ ] 是uc/os 为提高查找速度而定义的一个数组二、OS_FLAG.C(1)OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags, // 信号量的初始值INT8U *err) // 错误信息// 信号量集的创建函数(2)void OS_FlagInit (void) // initialize the event flag module,是uc/os的内部函数,应用程序不得调用该函数(3)OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp, // 所要删除的信号量集指针INT8U opt, // 选择项INT8U *err)// 删除信号量集(4)OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp, // 所要请求的信号量集的指针OS_FLAGS flags, // 滤波器INT8U wait_type, // 等待类型INT16U timeout, // 延时时限INT8U *err) // 错误信息// 请求信号量集(5)OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, // 所请求的信号量集指针OS_FLAGS flags, // 请求的信号INT8U wait_type, // 逻辑运算类型INT8U *err) // 错误信息// 无等待的请求一个信号量集(6)OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp,OS_FLAGS flags, // 所要选择发送的信号INT8U opt, // 信号有效的选项INT8U *err)// 向信号量集发送信号(7)OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp, // 待查询的信号量集的指针INT8U *err)// 查询信号量的状态,返回被查询信号量集标志组的成员OSFlagFlags(8)static void OS_FlagBlock (OS_FLAG_GRP *pgrp, // 信号量集指针OS_FLAG_NODE *pnode, // 待添加的等待任务节点指针OS_FLAGS flags, // 指定等待信号的数据INT8U wait_type, // 信号与等待之间的逻辑INT16U timeout) // 等待时限// 添加节点,在请求信号量集函数OSFlagPend() 中被调用(9)static BOOLEAN OS_FlagTaskRdy (OS_FLAG_NODE *pnode,OS_FLAGS flags_rdy)// 期望的事件标志为已经置位,从而使一个任务准备运行(10)void OS_FlagUnlink (OS_FLAG_NODE *pnode)// 删除节点,在OSFlagPost() 中被调用三、OS_MBOX.C(1)void *OSMboxAccept (OS_EVENT *pevent)// 无等待的请求消息邮箱(2)OS_EVENT *OSMboxCreate (void *msg)// 创建一个消息邮箱(3)OS_EVENT *OSMboxDel (OS_EVENT *pevent, INT8U opt, INT8U *er r)// 删除消息邮箱(4)void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, 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_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) // 初始化动态内存五、OS_MUTEX.C(1)INT8U OSMutexAccept (OS_EVENT *pevent, INT8U *err)// 无等待时间的请求信号量(2)OS_EVENT *OSMutexCreate (INT8U prio, INT8U *err)// 创建互斥型信号量(3)OS_EVENT *OSMutexDel (OS_EVENT *pevent, INT8U opt, INT8U *er r)// 删除互斥型信号量(4)void OSMutexPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 有等待时间的请求信号量(5)INT8U OSMutexPost (OS_EVENT *pevent)// 发送(释放)互斥型信号量(6)INT8U OSMutexQuery (OS_EVENT *pevent, OS_MUTEX_DATA *pdat a)// 获取互斥型信号量的当前状态六、OS_Q.C(1)void *OSQAccept (OS_EVENT *pevent)// 无等待的请求一个消息队列(2)OS_EVENT *OSQCreate (void **start, INT16U size)// 创建一个消息队列(3)OS_EVENT *OSQDel (OS_EVENT *pevent, INT8U opt, INT8U *err)// 删除消息队列(4)INT8U OSQFlush (OS_EVENT *pevent)// 清空消息队列(5)void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)// 有等待的请求一个消息队列(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)// 以“广播”方式向消息队列发送消息(9)INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)// 获取消息队列的当前状态(10)void OS_QInit (void)// 消息队列初始化七、OS_SEM.C(1)INT16U OSSemAccept (OS_EVENT *pevent)// 无等待的请求信号量(2)OS_EVENT *OSSemCreate (INT16U cnt)// 创建信号量(3)OS_EVENT *OSSemDel (OS_EVENT *pevent, INT8U opt, INT8U *err)// 删除信号量(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_TASK.C(1)INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)// 任务优先级别的改变(2)INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *pt os, INT8U prio)// 任务的创建(3)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) // 用于设定操作的选项// 任务的另一种创建函数,更加灵活,但也增加了额外的开销(4)INT8U OSTaskDel (INT8U prio) // 任务的删除(5)INT8U OSTaskDelReq (INT8U prio) // 请求删除任务函数(6)INT8U OSTaskResume (INT8U prio) // 任务的恢复(7)INT8U OSTaskStkChk (INT8U prio, OS_STK_DATA *pdata)// 校核空余内存的数量(8)INT8U OSTaskSuspend (INT8U prio) // 任务的挂起,可用来挂起自身或除空闲任务之外的任何任务(9)INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)// 任务的查询九、OS_TIME.C(1)void OSTimeDly (INT16U ticks) // 以时钟节拍数为单位延时(2)INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U second s, INT16U milli)// 用时、分、秒、毫秒为单位延时(3)INT8U OSTimeDlyResume (INT8U prio)// 取消延时,若任务比正在运行的任务级别高,则立即引发一次调度(4)INT32U OSTimeGet (void) // 获取OSTime 值(5)void OSTimeSet (INT32U ticks) // 设置OSTime 值注:INT32U OSTime // 全局变量,用以记录系统发生的时钟节拍。
µC/OS-II在80x86上的移植本章将介绍如何将µC/OS-II移植到Intel 80x86系列CPU上,本章所介绍的移植和代码都是针对80x86的实模式的,且编译器在大模式下编译和连接。
本章的内容同样适用于下述CPU:80186802868038680486PentiumPentium II实际上,将要介绍的移植过程适用于所有与80x86兼容的CPU,如AMD,Cyrix,NEC (V-系列)等等。
以Intel的为例只是一种更典型的情况。
80x86 CPU每年的产量有数百万,大部分用于个人计算机,但用于嵌入式系统的数量也在不断增加。
最快的处理器(Pentium系列)将在2000年达到1G的工作频率。
大部分支持80x86(实模式)的C编译器都提供了不同的内存使用模式,每一种都有不同的内存组织方式,适用于不同规模的应用程序。
在大模式下,应用程序和数据最大寻址空间为1Mb,程序指针为32位。
下一节将介绍为什么32位指针只用到了其中的20位来寻址(1Mb)。
本章所介绍的内容也适用于8086处理器,但由于8086没有PUSHA指令,移植的时候要用几条PUSH指令来代替。
图F9.1显示了工作在实模式下的80x86处理器的编程模式。
所有的寄存器都是16位,在任务切换时需要保存寄存器内容。
图F9.1 80x86 实模式内部寄存器图.80x86提供了一种特殊的机制,使得用16位寄存器可以寻址1Mb地址空间,这就是存储器分段的方法。
内存的物理地址用段地址寄存器和偏移量寄存器共同表示。
计算方法是:段地址寄存器的内容左移4位(乘以16),再加上偏移量寄存器(其他6个寄存器中的一个,AX,BP,SP,SI,DI或IP)的内容,产生可寻址1Mb的20位物理地址。
图F9.2表明了寄存器是如何组合的。
段寄存器可以指向一个内存块,称为一个段。
一个16位的段寄存器可以表示65,536个不同的段,因此可以寻址1,048,576字节。
嵌入式系统UCOS2学习/s/blog_5f0bed160100tqnv.html20113、非空闲任务控制块双向链表ucos-II的任务状态l 睡眠态(Dormant):指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。
把任务交给μC/OS-Ⅱ是通过调用下述两个函数之一:OSTaskCreate()或OSTaskCreateExt()。
一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。
l 就绪态:当任务一旦建立,这个任务就进入就绪态准备运行。
l 运行态:调用OSStart()可以启动多任务。
OSStart()函数运行进入就绪态的优先级最高的任务。
就绪的任务只有当所有优先级高于这个任务的任务转为等待状态,或者是被删除了,才能进入运行态。
l 等待状态:正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。
这个任务于是进入等待状态。
正在运行的任务期待某一事件的发生时也要等待,手段是调用以下几个函数之一:OSFlagPend()、OSSemPend()、OSMutexPend()、OSMboxPend(),或OSQPend()。
如果某事件未发生,调用后任务进入了等待状态(WAITING)。
l 中断服务态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。
被中断了的任务就进入了中断服务态(ISR)。
任务控制块TCB的管理1、任务块数组定义(OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASKS];)应用程序中可以有的最多任务数(OS_MAX_TASKS)是在文件OS_CFG.H中定义的。
这个最多任务数也是μC/OS-Ⅱ分配给用户程序的最多任务控制块OS_TCBs的数目。
将OS_MAX_TASKS的数目设置为用户应用程序实际需要的任务数可以减小RAM的需求量。
uC/OS-II 常用函数参考手册任务管理1 OSTaskCreate()建立一个新任务。
任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。
中断处理程序中不能建立任务。
一个任务可以为无限循环的结构。
函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8Uprio);参数说明:task 是指向任务代码首地址的指针。
pdata 指向一个数据结构,该结构用来在建立任务时向任务传递参数。
ptos is a pointer to the task's top of stack. If the configuration constantOS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high memoryto low memory). 'pstk' will thus point to the highest (valid) memory location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the lowest memory location of the stack and the stack will grow with increasing memory locations.prio is the task's priority. A unique priority MUST be assigned to each task and thelower the number, the higher the priority.返回值:OSTaskCreate() 的返回值为下述之一:* OS_NO_ERR:函数调用成功。
UC/OSⅡ基本函数************************************************************************************************ * 事件标志管理 (EVENT FLAGS MANAGEMENT)** OSFlagAccept() 检查事件标志组函数(标志组的指针、事件标志位、等待事件标志位的方式、错误码指针) * OSFlagCreate() 建立一个事件标志组(初值、错误码)* OSFlagDel() 删除一个事件标志组(指针、条件值、错误值)* OSFlagPend() 等待事件标志组的事件标志位(事件组指针、需要检查的标志位、等待事件标志位的方式、* 允许等待的时钟节拍、出错代码的时钟节拍)* OSFlagPost() 置位或清0事件标志组中的标志位(指针、标志位、条件值、错误码)* OSFlagQuery() 查询事件标志组的当前事件标志状态(事件标志组的指针、错误代码的指针)************************************************************************************************************************************************************************************************ * 消息邮箱管理 (MESSAGE MAILBOX MANAGEMENT)** OSMboxAccept () 查看消息邮箱(消息邮箱指针)* OSMboxCreate () 建立并初始化一个消息邮箱(msg 参数不为空含内容)* OSMboxDel () 删除消息邮箱(消息邮箱指针、删除条件、出错代码指针)* OSMboxPend () 等待一个消息邮箱函数(消息邮箱指针、允许等待的时钟节拍、代码错误指针)* OSMboxPost () 发送消息函数(消息邮箱指针、即将实际发送给任务的消息)* OSMboxPostOpt () 向邮箱发送一则消息(邮箱指针、消息、条件)* OSMboxQuery () 查询一个邮箱的当前状态(信号量指针、状态数据结构指针)************************************************************************************************ ************************************************************************************************ * 内存管理项 (MEMORY MANAGEMENT)* OSMemCreate () 建立并初始化一块内存区(起始地址、需要的内存块数目、内存块大小、返回错误的指针) * OSMemGet () 从内存区分配一个内存块* OSMemPut () 释放一个内存块,内存块必须释放回原先申请的内存区* OSMemQuery () 得到内存区的信息************************************************************************************************************************************************************************************************ * 互斥型信号量项管理 (MUTUAL EXCLUSION SEMAPHORE MANAGEMENT)** OSMutexAccept () 无等待地获取互斥型信号量[任务不挂起](信号量指针、错误代码)* OSMutexCreate () 建立并初始化一个互斥型信号量(优先级继承优先级(PIP)、出错代码指针)* OSMutexDel () 删除互斥型信号量(信号指针、删除条件、错误指针)* OSMutexPend () 等待一个互斥型信号量(指针、等待超时时限、出错代码指针)* OSMutexPost () 释放一个互斥型信号量(互斥型信号量指针)* OSMutexQuery () 查询一个互斥型信号量的当前状态(互斥型信号量指针、状态数据结构指针)************************************************************************************************************************************************************************************************ * 消息队列管理 (MESSAGE QUEUE MANAGEMENT)** OSQAccept () 检查消息队列中是否已经有需要的消息(消息队列的指针)* OSQCreate () 建立一个消息队列(消息内存区的基地址(指针数组)、消息内存区的大小)* OSQDel () 删除一个消息队列(消息队列指针、删除条件、错误指针)* OSQFlush () 清空消息队列(指向得到消息队列的指针)* OSQPend () 任务等待消息队列中的消息(消息队列指针、允许等待的时钟节拍、代码错误指针)* OSQPost () 向消息队列发送一则消息FIFO(消息队列指针、发送的消息)* OSQPostFront () 向消息队列发送一则消息LIFO(消息队列指针、发送的消息)* OSQPostOpt () 向消息队列发送一则消息LIFO(消息队列指针、发送的消息、发送条件)* OSQQuery () 查询一个消息队列的当前状态(信号量指针、状态数据结构指针)************************************************************************************************/*********************************************************************************************** * 消息队列数据 (MESSAGE QUEUE DATA)************************************************************************************************ */队列控制块是一个用于维护消息队列信息的数据结构,它包含了以下的一些域。
第4章任务管理 (1)4.0建立任务,OSTaskCreate() (2)4.1建立任务,OSTaskCreateExt() (6)4.2任务堆栈 (9)4.3堆栈检验,OSTaskStkChk() (11)4.4删除任务,OSTaskDel() (14)4.5请求删除任务,OSTaskDelReq() (17)4.6改变任务的优先级,OSTaskChangePrio() (20)4.7挂起任务,OSTaskSuspend() (23)4.8恢复任务,OSTaskResume() (25)4.9获得有关任务的信息,OSTaskQuery() (26)第4章任务管理在前面的章节中,笔者曾说过任务可以是一个无限的循环,也可以是在一次执行完毕后被删除掉。
这里要注意的是,任务代码并不是被真正的删除了,而只是µC/OS-Ⅱ不再理会该任务代码,所以该任务代码不会再运行。
任务看起来与任何C函数一样,具有一个返回类型和一个参数,只是它从不返回。
任务的返回类型必须被定义成void型。
在本章中所提到的函数可以在OS_TASK文件中找到。
如前所述,任务必须是以下两种结构之一:void YourTask (void *pdata){for (;;) {/* 用户代码 */调用µC/OS-Ⅱ的服务例程之一:OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/* 用户代码 */}}或void YourTask (void *pdata){/* 用户代码 */OSTaskDel(OS_PRIO_SELF);}本章所讲的内容包括如何在用户的应用程序中建立任务、删除任务、改变任务的优先级、挂起和恢复任务,以及获得有关任务的信息。
µC/OS-Ⅱ可以管理多达64个任务,并从中保留了四个最高优先级和四个最低优先级的任务供自己使用,所以用户可以使用的只有56个任务。
uCOSII函数说明(一)--OSTaskCreate()与OSTaskCreateExt()uC/OS II 函数说明 (2010-04-17 15:05)分类:UCOS ARMuC/OS II 函数说明(一)--OSTaskCreate()与OSTaskCreateExt()1. OSTaskCreate()OSTaskCreate()建立一个新任务,可以在多任务环境启动之前,或者运行任务中建立任务。
注意,ISR中禁止建立任务,一个任务必须为无限循环结构。
源代码如下:#if OS_TASK_CREATE_EN >0 /* 条件编译,是否允许任务的创建 */INT8U OSTaskCreate (void(*task)(void *pd), /* 函数指针,void *pd为函数的参数 */void *pdata, /* 建立任务时,传递的参数 */OS_STK *ptos, /* 指向堆栈任务栈顶的指针 */INT8U prio) /* 任务优先级 */{#if OS_CRITICAL_METHOD ==3 /* Allocate storage for CPUstatus register */OS_CPU_SR cpu_sr;#endifOS_STK *psp;INT8U err;#if OS_ARG_CHK_EN > 0if (prio > OS_LOWEST_PRIO) { /* 参数检查,优先级是否处于允许优先级之内 */return (OS_PRIO_INVALID);}#endifOS_ENTER_CRITICAL(); /* 关中断 */if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* 判断任务的优先级是否存在,如不存在,设置任 */OSTCBPrioTbl[prio] = (OS_TCB *)1; /* 务优先级为1设置优先级后,就可以开中断了, *//* 不用担心冲突,因为该优先级已经被占了 */OS_EXIT_CRITICAL();psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);/* 初始化堆栈,此函数与具体的硬件有关,OS_CPU_C.C */err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0); /* 详见此函数的说明 */if (err == OS_NO_ERR) {OS_ENTER_CRITICAL();OSTaskCtr++; /* 任务计数器加1,统计运行的任务数 */OS_EXIT_CRITICAL();if (OSRunning == TRUE) { /* 如果是在任务运行过程中新建任务,需要进行 */OS_Sched(); /* 任务调度,保证优先级最高的任务处于运行态 */}} else {OS_ENTER_CRITICAL();OSTCBPrioTbl[prio] = (OS_TCB *)0;/*如果任务创建失败,优先级设置为0,放弃该 *//* 任务的优先级保证别的任务创建时可以使用 *//* 此优先级 */OS_EXIT_CRITICAL();}return (err); /* 创建任务失败,返回错误代码 */}OS_EXIT_CRITICAL();return (OS_PRIO_EXIST); /*返回OS_PRIO_EXIST,告知任务优先级已经存在 */}#endif2. OSTaskCreateExt()OSTaskCreateExt()为OSTaskCreate()的扩展函数,允许更多的内容设置。
uC/OS-II 常用函数参考手册
任务管理
1 OSTaskCreate()
建立一个新任务。
任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。
中断处理程序中不能建立任务。
一个任务可以为无限循环的结构。
函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);
参数说明:task 是指向任务代码首地址的指针。
pdata 指向一个数据结构,该结构用来在建立任务时向任务传递参数。
ptos is a pointer to the task’s top of stack. If the configuration constant OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high memory to low memory). ‘pstk’ will thus point to the highest (valid) memory location of the stack. If OS_STK_GROWTH is set to 0, ‘pstk’ will point to the lowest memory location of the stack and the stack will grow with increasing memory locations.。
1.时间管理函数1). void OSTimeDly (INT16U ticks);任务延时函数。
2). INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);按时、分、秒、毫秒延时函数。
3). INT8U OSTimeDlyResume (INT8U prio);让处在延时期的任务结束延时函数。
4). INT32U OSTimeGet (void);系统时间函数。
5). void OSTimeSet (INT32U ticks) ;系统时间函数。
6). void OSTimeTick (void);系统时钟节拍。
2.任务管理函数1). INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio);优先级变更。
2). INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);任务建立。
3). 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);任务建立。
4). INT8U OSTaskDel (INT8U prio);删除任务。
5). INT8U OSTaskDelReq (INT8U prio);请求删除任务。
6). INT8U OSTaskResume (INT8U prio);任务信息的获取。
7). INT8U OSTaskStkChk (INT8U prio, OS_STK_DA TA *pdata);任务恢复。
宏定义速查1.typedef unsigned char BOOLEAN;波尔类型2.typedef unsigned char INT8U; 无符号8位整数3.typedef signed char INT8S; 有符号8位整数4.typedef unsigned int INT16U;无符号16位整数5.typedef signed int INT16S; 有符号16位整数6.typedef unsigned long INT32U; 无符号32位整数7.typedef signed long INT32S; 有符号32位整数8.typedef float FP32; 单精度浮点数9.typedef double FP64; 双精度浮点数10.typedef unsigned int OS_STK;堆栈入口宽度为16位11.OS_ARG_CHK_EN 允许(1) 或者禁止(0) 变量检查.12.OS_CPU_HOOKS_EN (1)在处理器移植文件中允许使用 uC/OS-II 的接口函数13.OS_LOWEST_PRIO定义任务的最低优先级14.OS_MAX_EVENTS 应用中最多事件控制块的数目15.OS_MAX_FLAGS应用中最多事件标志组的数目16.OS_MAX_MEM_PART最多内存块的数目17.OS_MAX_QS应用中最多队列控制块的数目18.OS_MAX_TASKS 应用中最多任务数目19.OS_TASK_IDLE_STK_SIZE空闲任务堆栈容量20.OS_TASK_STAT_EN允许 (1) 或者禁止 (0) 统计任务21.OS_TASK_STAT_STK_SIZE 统计任务堆栈容量22.OS_SCHED_LOCK_EN 设为1允许使用 OSSchedLock() 和 OSSchedUnlock() 函数代码23.OS_TICKS_PER_SEC设置每秒的节拍数24.OS_FLAG_EN允许 (1) 或者禁止 (0) 产生事件标志相关代码25.OS_FLAG_W AIT_CLR_EN设为1允许使用等待事件标志清0代码26.OS_FLAG_ACCEPT_EN设为1允许使用 OSFlagAccept()函数代码27.OS_FLAG_DEL_EN设为1允许使用 OSFlagDel()函数代码28.OS_FLAG_QUERY_EN 设为1允许使用 OSFlagQuery()函数代码29.OS_MBOX_EN允许 (1) 或者禁止 (0) 产生消息邮箱相关代码30.OS_MBOX_ACCEPT_EN设为1允许使用 OSMboxAccept()函数代码31.OS_MBOX_DEL_EN 设为1允许使用 OSMboxDel()函数代码32.OS_MBOX_POST_EN设为1允许使用 OSMboxPost()函数代码33.OS_MBOX_POST_OPT_EN设为1允许使用 OSMboxPostOpt()函数代码34.OS_MBOX_QUERY_EN设为1允许使用 OSMboxQuery()函数代码35.OS_MEM_EN允许 (1) 或者禁止 (0) 产生内存相关代码36.OS_MEM_QUERY_EN设为1允许使用 OSMemQuery()函数代码37.OS_MUTEX_EN允许 (1) 或者禁止 (0) 产生互斥型信号量相关代码38.OS_MUTEX_ACCEPT_EN设为1允许使用 OSMutexAccept()函数代码39.OS_MUTEX_DEL_EN设为1允许使用 OSMutexDel()函数代码40.OS_MUTEX_QUERY_EN设为1允许使用 OSMutexQuery()41.OS_Q_EN允许 (1) 或者禁止 (0) 产生消息队列相关代码42.OS_Q_ACCEPT_EN设为1允许使用 OSQAccept()函数代码43.OS_Q_DEL_EN设为1允许使用 OSQDel()函数代码44.OS_Q_FLUSH_EN设为1允许使用 OSQFlush()函数代码45.OS_Q_POST_EN设为1允许使用 OSQPost()函数代码46.OS_Q_POST_FRONT_EN 设为1允许使用 OSQPostFront()函数代码47.OS_Q_POST_OPT_EN 设为1允许使用 OSQPostOpt()函数代码48.OS_Q_QUERY_EN 设为1允许使用 OSQQuery()函数代码49.OS_SEM_EN 允许 (1) 或者禁止 (0) 产生信号量相关代码50.OS_SEM_ACCEPT_EN 设为1允许使用 OSSemAccept()函数代码51.OS_SEM_DEL_EN设为1允许使用 OSSemDel()函数代码52.OS_SEM_QUERY_EN 设为1允许使用 OSSemQuery()函数代码53.OS_TASK_CHANGE_PRIO_EN设为1允许使用 OSTaskChangePrio() 函数代码54.OS_TASK_CREATE_EN 设为1允许使用 OSTaskCreate() 函数代码55.OS_TASK_CREATE_EXT_EN设为1允许使用 OSTaskCreateExt() 函数代码56.OS_TASK_DEL_EN设为1允许使用 OSTaskDel() 函数代码57.OS_TASK_SUSPEND_EN设为1允许使用 OSTaskSuspend() and OSTaskResume() 函数代码58.OS_TASK_QUERY_EN设为1允许使用 OSTaskQuery() 函数代码59.OS_TIME_DL Y_HMSM_EN设为1允许使用OSTimeDlyHMSM() 函数代码60.OS_TIME_DL Y_RESUME_EN设为1允许使用OSTimeDlyResume() 函数代码61.OS_TIME_GET_SET_EN 设为1允许使用 OSTimeGet() 和 OSTimeSet() 函数代码μC/OS-II函数和相关的常量(#define constant定义)µC/OS-II 函数和相关常量类型置1其他常量OSInit() 无OS_MAX_EVENTSOS_Q_EN andOS_MAX_QSOS_MEM_ENOS_TASK_IDLE_STK_SIZEOS_TASK_STAT_ENOS_TASK_STAT_STK_SIZE OSSchedLock() 无无OSSchedUnlock() 无无OSStart() 无无OS_TICKS_PER_SEC OSStatInit() OS_TASK_STAT_EN &&OS_TASK_CREATE_EXT_ENOSVersion() 无无中断处理OSIntEnter() 无无OSIntExit() 无无消息邮箱OSMboxAccept() OS_MBOX_EN 无OSMboxCreate() OS_MBOX_EN OS_MAX_EVENTS OSMboxPend() OS_MBOX_EN 无OSMboxPost() OS_MBOX_EN 无OSMboxQuery() OS_MBOX_EN 无内存块管理OSMemCreate() OS_MEM_EN OS_MAX_MEM_PART OSMemGet() OS_MEM_EN 无OSMemPut() OS_MEM_EN 无OSMemQuery() OS_MEM_EN 无消息队列OSQAccept() OS_Q_EN 无OSQCreate() OS_Q_EN OS_MAX_EVENTSOS_MAX_QSOSQFlush() OS_Q_EN 无OSQPend() OS_Q_EN 无OSQPost() OS_Q_EN 无OSQPostFront() OS_Q_EN 无OSQQuery() OS_Q_EN 无信号量管理OSSemAccept() OS_SEM_EN 无OSSemCreate() OS_SEM_EN OS_MAX_EVENTS OSSemPend() OS_SEM_EN 无OSSemPost() OS_SEM_EN 无OSSemQuery() OS_SEM_EN 无任务管理OSTaskChangePrio() OS_TASK_CHANGE_PRIO_ENOS_LOWEST_PRIOOSTaskCreate() OS_TASK_CREATE_EN OS_MAX_TASKSOS_LOWEST_PRIOOSTaskCreateExt() OS_TASK_CREATE_EXT_ENOS_MAX_TASKS OS_STK_GROWTH OS_LOWEST_PRIOOSTaskDel() OS_TASK_DEL_EN OS_LOWEST_PRIO OSTaskDelReq() OS_TASK_DEL_EN OS_LOWEST_PRIO OSTaskResume() OS_TASK_SUSPEND_EN OS_LOWEST_PRIO OSTaskStkChk() OS_TASK_CREATE_EXT_ENOS_LOWEST_PRIO OSTaskSuspend() OS_TASK_SUSPEND_EN OS_LOWEST_PRIO OSTaskQuery() OS_LOWEST_PRIO 时钟管理OSTimeDly() 无无OSTimeDlyHMSM() 无OS_TICKS_PER_SEC OSTimeDlyResume() 无OS_LOWEST_PRIO OSTimeGet() 无无OSTimeSet() 无无OSTimeTick() 无无用户定义函数OSTaskCreateHook() OS_CPU_HOOKS_EN 无OSTaskDelHook() OS_CPU_HOOKS_EN 无OSTaskStatHook() OS_CPU_HOOKS_EN 无OSTaskSwHook() OS_CPU_HOOKS_EN 无OSTimeTickHook() OS_CPU_HOOKS_EN 无函数速查1.OS_ENTER_CRITICAL() , OS_EXIT_CRITICAL( );2.OSFlagAccept( );3.OSFlagCreate( );4.OSFlagDel( );5.OSFlagPend( );6.OSFlagPost( );7.OSFlagQuery( );8.OSInit( );9.OSIntEnter( );10.OSIntExit( );11.OSMboxAccept( );12.OSMboxCreate( );13.OSMboxDel( );14.OSMboxPend( );15.OSMboxPost( );16.OSMboxPostOpt( );17.OSMboxQuery( );18.OSMemCreate( );19.OSMemGet( );20.OSMemPut( );21.OSMemQuery( );22.OSMutexAccept( );23.OSMutexCreate( );24.OSMutexDel( );25.OSMutexPend( );26.OSMutexPost( );27.OSMutexQuery( );28.OSQAccept( );29.OSQCreate( );30.OSQDel( );31.OSQFlush( );32.OSQPend( );33.OSQPost( );34.OSQPostFront( );35.OSQPostOpt( );36.OSQQuery( );37.OSSchedLock( );38.OSSchedUnlock( );39.OSSemAccept( );40.OSSemCreate( );41.OSSemDel( );42.OSSemPend( );43.OSSemPost( );44.OSSemQuery( );45.OSStart( );46.OSStatInit ( );47.OSTaskChangePrio( );48.OSTaskCreate( );49.OSTaskCreateExt( );50.OSTaskDel( );51.OSTaskDelReq( );52.OSTaskQuery( );53.OSTaskResume( );54.OSTaskStkChk( );55.OSTaskSuspend( );56.OSTimeDly( );57.OSTimeDlyHMSM( );58.OSTimeDlyResume( );59.OSTimeGet( );60.OSTimeSet( );61.OSTimeTick( );62.OSVersion( );函数解释1.OS_ENTER_CRITICAL(),OS_EXIT_CRITICAL( );定义的宏,用来关闭、打开CPU的中断。