UCOS API函数库Word格式文档下载.docx
- 文档编号:22819013
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:33
- 大小:31.63KB
UCOS API函数库Word格式文档下载.docx
《UCOS API函数库Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《UCOS API函数库Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。
INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio)
OSTaskCreate(MyTask,(void*)0,&
Task0Stk[Task0StkLengh-1],10);
MyTask指向的函数名,(void*)0就是指向空的意思
3建立一个任务
INT8UOSTaskCreateExt(void(*task)(void*pd),//建立扩展任务(任务代码指针
void*pdata,//传递参数指针
OS_STK*ptos,//分配任务堆栈栈顶指针
INT8Uprio,//分配任务优先级
INT16Uid,//(未来的)优先级标识(与优先级相同)
OS_STK*pbos,//分配任务堆栈栈底指针
INT32Ustk_size,//指定堆栈的容量(检验用)
void*pext,//指向用户附加的数据域的指针
INT16Uopt)//建立任务设定选项)
4、删除任务(删除有占用共享资源任务会出错)
INT8UOSTaskDel(INT8Uprio)//删除任务(任务的优先级)
5、删除任务(可靠删除任务并清理占用共享资源)
INT8UOSTaskDelReq(INT8Uprio)//请求一个任务删除其它任务或自身?
(任务的优先级)
6、唤醒任务
INT8UOSTaskResume(INT8Uprio)//唤醒一个用OSTaskSuspend()函数挂起的任务(任务的优先级)
7、挂起任务
INT8UOSTaskSuspend(INT8Uprio)//无条件挂起一个任务(任务优先级)
8、获取任务信息
INT8UOSTaskQuery(INT8Uprio,OS_TCB*pdata)//获取任务信息(任务指针、保存数据结构指针)
9、检查任务堆栈状态,计算指定任务堆栈中的未用空间和已用空间(STACKCHECKING)
INT8UOSTaskStkChk(INT8Uprio,OS_STK_DATA*pdata)
610*描述:
检查任务堆栈状态,计算指定任务堆栈中的未用空间和已用空间。
使用OSTaskStkChk()函数要求所检查的任务是被OSTaskCreateExt()函数建立的,且opt参数中OS_TASK_OPT_STK_CHK操作项打开。
611*计算堆栈未用空间的方法是从堆栈底端向顶端逐个字节比较,检查堆栈中0的个数,直到一个非0的数值出现.这种方法的前提是堆栈建立时已经全部清零.要实现清零操作,需要在任务建立初始化
612*堆栈时设置OS_TASK_OPT_STK_CLR为1.如果应用程序在初始化时已经将全部RAM清零,且不进行任
613*任务删除操作,也可以设置OS_TASK_OPT_STK_CLR为0,这将加快OSTaskCreateExt()函数的执行速度。
1.1改变任务的优先级
/***********************************************************************************
19*改变一个任务的优先级(CHANGEPRIORITYOFATASK)
21*描述:
改变一个任务的优先级。
23*参数:
oldp是任务原先的优先级。
25*newp是任务的新优先级。
27*返回:
OS_NO_ERR任务优先级成功改变。
28*OS_PRIO_INVALID参数中的任务原先优先级或新优先级大于或等于OS_LOWEST_PRIO。
29*(i.e.>
=OS_LOWEST_PRIO)
30*OS_PRIO_EXIST优先级为PIP的任务已经存在;
31*OS_PRIO_ERR参数中的任务原先优先级不存在。
33*注意:
参数中的新优先级必须是没有使用过的,否则会返回错误码.在OSTaskChangePrio()中还会先
34*判断要改变优先级的任务是否存在。
***********************************************************************************/
1.2建立任务
/*****************************************************************************************
125*建立一个新任务(CREATEATASK)
127*描述:
建立一个新任务。
任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立.中断处理程序中不能建立任务.一个任务必须为无限循环结构(如下所示),且不能有返回点。
129*OSTaskCreate()是为与先前的μC/OS版本保持兼容,新增的特性在OSTaskCreateExt()函数中.
130*无论用户程序中是否产生中断,在初始化任务堆栈时,堆栈的结构必须与CPU中断后寄存器入栈的顺序结构相同.详细说明请参考所用处理器的手册。
133*参数:
task是指向任务代码的指针。
135*pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数。
下例中说明uC/OS中的任务结构以及如何传递参数pdata:
137*voidTask(void*pdata)
138*{
139*...//对参数'
pdata'
进行操作
140*for(;
;
){
//任务函数体.
143*//在任务体中必须调用如下函数之一:
144*//OSMboxPend()用于任务等待消息,消息通过中断或另外的任务发送给需要的任务
145*//OSFlgPend()用于任务等待事件标志中的事件标志
146*//OSMutexPend()任务需要独占资源
147*//OSQPend()用于任务等待消息
148*//OSSemPend()用于任务试图取得共享资源的使用权,任务需要与其它任务或中断
149*同步及任务需要等待特定事件的发生场合
150*//OSTimeDly()任务延时若干时钟节拍
151*//OSTimeDlyHMSM()任务延时若干时间
152*//OSTaskSuspend()挂起任务本身
153*//OSTaskDel()删除任务本身
154*...
156*}
157*ptos为指向任务堆栈栈顶的指针。
任务堆栈用来保存局部变量,函数参数,返回地址以及任务被中断时的CPU寄存器内容.任务堆栈的大小决定于任务的需要及预计的中断嵌套层数。
计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生嵌套调用的函数,及中断嵌套所需空间。
如果初始化常量OS_STK_GROWTH设为1,堆栈被设为从内存高地址向低地址增长,此时ptos应该指向任务堆栈空间的最高地址。
反之,如果OS_STK_GROWTH设为0,堆栈将从内存的低地址向高地址增长。
164*prio为任务的优先级。
每个任务必须有一个唯一的优先级作为标识。
数字越小,优先级越高。
166*返回:
OS_NO_ERR函数调用成功;
167*OS_PRIO_EXIT具有该优先级的任务已经存在;
168*OS_PRIO_INVALID参数指定的优先级大于OS_LOWEST_PRIO;
(i.e.>
169*OS_NO_MORE_TCB系统中没有OS_TCB可以分配给任务了。
170*
171*注意:
1、任务堆栈必须声明为OS_STK类型。
172*2、在任务中必须调用uC/OS提供的下述过程之一:
延时等待、任务挂起、等待事件发生(等待信
173*号量,消息邮箱、消息队列),以使其他任务得到CPU。
174*3、用户程序中不能使用优先级0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,
OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。
这些优先级μC/OS系统保留,其余的56个优先级提供给应用程序。
177***********************************************************************************/
181INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio)
OSTaskCreate(Task0,(void*)0,&
1.3建立带扩展任务
221****************************************************************************************
222*CREATEATASK(ExtendedVersion)
224*描述:
与OSTaskCreate()不同的是,OSTaskCreateExt()允许用户设置更多的细节内容.任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立,但中断处理程序中不能建立新任务。
一个任务必须为无限循环结构(如下所示),且不能有返回点。
228*参数:
230*pdataPdata指针指向一个数据结构,该结构用来在建立任务时向任务传递参数。
下例中说
231*明uC/OS中的任务代码结构以及如何传递参数pdata:
(如果在程序中不使用参数pdata,
232*为了避免在编译中出现"
参数未使用"
的警告信息,可以写一句pdata=pdata;
)
233*voidTask(void*pdata)
234*{
235*...//对参数pdata进行操作,例如pdata=pdata
236*for(;
){//任务函数体.总是为无限循环结构
252*}
253*}
254*ptos为指向任务堆栈栈顶的指针.任务堆栈用来保存局部变量,函数参数,返回地址以及中断时的CPU寄存器内容.任务堆栈的大小决定于任务的需要及预计的中断嵌套层数.计算堆栈的大小,需要知道任务的局部变量所占的空间,可能产生嵌套调用的函数,及中断嵌套所需空间.如果初始化常量OS_STK_GROWTH设为1,堆栈被设为向低端增长(从内存高地址向低地址增长).此时ptos应该指向任务堆栈空间的最高地址.反之,如果OS_STK_GROWTH设为0,堆栈将从低地址向高地址增长.
261*prio任务的优先级。
每个任务必须有一个唯一的优先级作为标识.数字越小,优先级越高。
263*id是任务的标识,目前这个参数没有实际的用途,但保留在OSTaskCreateExt()中供今后扩展,应用程序中可设置id与优先级相同.(0..65535)
266*pbos为指向堆栈底端的指针。
如果初始化常量OS_STK_GROWTH设为1,堆栈被设为从内存高地址向低地址增长.此时pbos应该指向任务堆栈空间的最低地址.反之,如果OS_STK_GROWTH设为0,堆栈将从低地址向高地址增长。
pbos应该指向堆栈空间的最高地址.参数pbos用于堆栈检测函数OSTaskStkChk().
271*stk_size指定任务堆栈的大小。
其单位由OS_STK定义:
当OS_STK的类型定义为INT8U、INT16U、
272*INT32U的时候,stk_size的单位为分别为字节(8位)、字(16位)和双字(32位)。
274*pext是一个用户定义数据结构的指针,可作为TCB的扩展。
例如,当任务切换时,用户定义
275*的数据结构中可存放浮点寄存器的数值,任务运行时间,任务切入次数等等信息。
277*opt存放与任务相关的操作信息。
opt的低8位由uC/OS保留,用户不能使用。
用户可以使用
278*opt的高8位。
每一种操作由opt中的一位或几位指定,当相应的位被置位时,表示选择
279*某种操作。
当前的μC/OS版本支持下列操作:
280*OS_TASK_OPT_STK_CHK:
决定是否进行任务堆栈检查;
281*OS_TASK_OPT_STK_CLR:
决定是否清空堆栈;
282*OS_TASK_OPT_SAVE_FP:
决定是否保存浮点寄存器的数值。
此项操作仅当处理器有浮
283*点硬件时有效。
保存操作由硬件相关的代码完成。
286*返回:
OS_NO_ERR:
函数调用成功;
287*
OS_PRIO_EXIST:
具有该优先级的任务已经存在;
288*
OS_PRIO_INVALID:
参数指定的优先级大于OS_LOWEST_PRIO;
289*
OS_NO_MORE_TCB:
系统中没有OS_TCB可以分配给任务了.
291*注意:
1、任务堆栈必须声明为OS_STK类型;
292*2、在任务中必须进行uC/OS提供的下述过程之一:
延时等待、任务挂起、等待事件发生(等待
293*信号量,消息邮箱、消息队列),以使其他任务得到CPU;
294*3、用户程序中不能使用优先级0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,
295*OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。
这些优先级μC/OS系统保留,其余56个优先级提供给
296*应用程序.
297******************************************************************************************/
300#ifOS_TASK_CREATE_EXT_EN>
0//允许生成OSTaskCreateExt()函数
301INT8UOSTaskCreateExt(void(*task)(void*pd),//建立扩展任务(任务代码指针
302void*pdata,//传递参数指针
303OS_STK*ptos,//分配任务堆栈栈顶指针
304INT8Uprio,//分配任务优先级
305INT16Uid,//(未来的)优先级标识(与优先级相同)
306OS_STK*pbos,//分配任务堆栈栈底指针
307INT32Ustk_size,//指定堆栈的容量(检验用)
308void*pext,//指向用户附加的数据域的指针
309INT16Uopt)//建立任务设定选项)
1.4删除一个任务
358/*************************************************************************************
360*删除一个指定优先级的任务(DELETEATASK)
362*描述:
删除一个指定优先级的任务。
任务可以传递自己的优先级给OSTaskDel(),从而删除自身.如果任务不知道自己的优先级,还可以传递参数OS_PRIO_SELF.被删除的任务将回到休眠状态.任务被删除后可以用函数OSTaskCreate()或OSTaskCreateExt()重新建立.
366*参数:
prio为指定要删除任务的优先级,也可以用参数OS_PRIO_SELF代替,此时,下一个优先级最高的就绪任务将开始运行。
369*返回:
370*
OS_TASK_DEL_IDLE:
错误操作,试图删除空闲任务(Idletask);
371*
OS_TASK_DEL_ERR:
错误操作,指定要删除的任务不存在;
372*
373*
OS_TASK_DEL_ISR:
错误操作,试图在中断处理程序中删除任务.
376*注意:
1、OSTaskDel()将判断用户是否试图删除uC/OS中的空闲任务(Idletask);
377*2、在删除占用系统资源的任务时要小心,此时,为安全起见可以用另一个函数OSTaskDelReq().
******************************************************************************/
1.5安全删除一个任务
471/***************************************************************************************
473*请求一个任务删除其它任务或自身(REQUESTTHATATASKDELETEITSELF)
474*
475*描述:
请求一个任务删除自身。
通常OSTaskDelReq()用于删除一个占有系统资源的任务(例如任务建立
476*了信号量)对于此类任务,在删除任务之前应当先释放任务占用的系统资源。
477*具体的做法是:
在需要被删除的任务中调用OSTaskDelReq()检测是否有其他任务的删除请求,如
478*果有,则释放自身占用的资源,然后调用OSTaskDel()删除自身。
例如,假设任务5要删除任务10,
479*而任务10占有系统资源,此时任务5不能直接调用OSTaskDel(10)删除任务10,而应该调用
480*OSTaskDelReq(10)向任务10发送删除请求.在任务10中调用OSTaskDelReq(OS_PRIO_SELF),并检测
481*返回值。
如果返回OS_TASK_DEL_REQ,则表明有来自其他任务的删除请求,此时任务10应该先释放
482*资源,然后调用OSTaskDel(OS_PRIO_SELF)删除自己。
任务5可以循环调用OSTaskDelReq(10)并检
483*测返回值,如果返回OS_TASK_NOT_EXIST,表明任务10已经成功删除。
484*voidTask(void*data)
485*{
486*...
487*...
488*while
(1){
489*OSTimeDly
(1);
490*if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ)
491*{
492*释放任务占用的系统资源;
493*释放动态分配的内存;
494*OSTaskDel(OS_PRIO_SELF);
495*}
496*}
497*}
498*参数:
prio为要求删除任务的优先级。
如果参数为OS_PRIO_SELF,则表示调用函数的任务正在查询
499*是否有来自其他任务的删除请求。
500*
501*返回:
删除请求已经被任务记录;
502*OS_TASK_NOT_EXIST:
指定的任务不存在,发送删除请求的任务可以等待此返回值,看删除是否成功;
503*
错误操作,试图删除空闲任务(Idletask);
504*
参数指定的优先级大于OS_LOWEST_PRIO或没有设定OS_PRIO_SELF的值;
505*
OS_TASK_DEL_REQ:
当前任务收到来自其他任务的删除请求;
506*注意:
OSTaskDelReq()将判断用户是否试图删除uC/OS中的空闲任务(Idletask)。
507
******************************************************************************************/
1.6唤醒一个任务
549/****************************************************************************************
551*唤醒一个用OSTaskSuspend()函数挂起的任务(RESUMEASUSPENDEDTASK)
553*描述:
唤醒一个用OSTaskSuspend()函数挂起的任务。
OSTaskResume()也是唯一能"
解挂"
挂起任务的函数。
555*参数:
prio指定要唤醒任务的优先级。
556*
557*返回:
函数调用成功;
558*
OS_TASK_RESUME_PRIO:
要唤醒的任务不存在;
559*
OS_TASK_NOT_SUSPENDED:
要唤醒的任务不在挂起状态;
560*
参数指定的优先级大于或等于OS_LOWEST_PRIO。
561*******************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UCOS API函数库 API 函数库