网站大量收购闲置独家精品文档,联系QQ:2885784924

任务管理时间管理内存.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

时间管理02任务管理01内存管理03建立任务OSTaskCreate()堆栈检验OSTaskStkChk()删除任务OSTaskDel()请求删除任务OSTaskDelReq()改变任务的优先级OSTaskChangePrio()挂起任务OSTaskSuspend()恢复任务OSTaskResume()获得有关任务的信息OSTaskQuery()**任务管理用来实现对任务状态的直接控制和访问。内核的任务管理是通过系统调用来体现,主要包括任务创建、任务删除、任务挂起、任务唤醒、设置任务属性等内容。创建任务删除任务挂起任务唤醒任务设置任务属性改变任务优先级获取任务信息…任务管理功能OSTaskCreate()需要四个参数:task是指向任务代码的指针;Pdata指向一个数据结构,该结构用来在建立任务时向任务传递参数;ptos是分配给任务的堆栈的栈顶指针(任务堆栈);prio是分配给任务的优先级返回值OSTaskCreate()的返回值为下述之一:**OS_NO_ERR:函数调用成功。OS_PRIO_EXIST:具有该优先级的任务已经存在。OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO。OS_NO_MORE_TCB:系统中没有OS_TCB可以分配给任务了。注意/警告**任务堆栈必须声明为OS_STK类型。在任务中必须调用μC/OS提供的下述过程之一:延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以使其他任务得到CPU。用户程序中不能使用优先级0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,OS_LOWEST_PRIO。这些优先级μC/OS系统保留,其余的56个优先级提供给应用程序。010302每个任务都有自己的堆栈空间。堆栈必须声明为OS_STK类型,并且由连续的内存空间组成。用户可以静态分配堆栈空间(在编译的时候分配),静态堆栈声明应放置在函数的外面,这两种声明方式如下:用户可以用C编译器提供的malloc()函数来动态地分配堆栈空间,如程序清单L4.6所示。在动态分配中,用户要时刻注意内存碎片问题。OSTaskStkChk()检查任务堆栈状态,计算指定任务堆栈中的未用空间和已用空间;使用OSTaskStkChk()函数要求所检查的任务是被OSTaskCreateExt()函数建立的,且opt参数中OS_TASK_OPT_STK_CHK操作项打开。参数prio为指定要获取堆栈信息的任务优先级,也可以指定参数OS_PRIO_SELF,获取调用任务本身的信息。pdata指向一个类型为OS_STK_DATA的数据结构OSTaskDel()函数删除一个指定优先级的任务;任务可以传递自己的优先级给OSTaskDel(),从而删除自身如果任务不知道自己的优先级,还可以传递参数OS_PRIO_SELF被删除的任务将回到休眠状态。任务被删除后可以用函数OSTaskCreate()或OSTaskCreateExt()重新建立参数prio为指定要删除任务的优先级,也可以用参数OS_PRIO_SELF代替,此时,下一个优先级最高的就绪任务将开始运行。**如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失。在这种情况下,用户可以让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己。用户可以通过OSTaskDelReq()函数来完成该功能。发出删除任务请求的任务(任务B)和要删除的任务(任务A)都需要调用OSTaskDelReq()函数。例如,假设任务5要删除任务10,而任务10占有系统资源,此时任务5不能直接调用OSTaskDel(10)删除任务10,而应该调用OSTaskDelReq(10)向任务10发送删除请求。在任务10中调用OSTaskDelReq(OS_PRIO_SELF),并检测返回值。如果返回OS_TASK_DEL_REQ,则表明有来自其他任务的删除请求,此时任务10应该先释放资源,然后调用OSTaskDel(OS_PRIO_SELF)删除自己。*参数prio为要求删除任务的优先级。如果参数为OS_PRIO_SELF,则表示调用函数的任务正在查询是否有来自其他任务的删除请求。返回值OSTaskDelReq()的返回值为下述之一:OS_NO_ERR:删除请求已经被任务记录。OS_TASK_NOT_EXIST:指定的任务不存。发送删除请求的任务可以等待此返回值,看

您可能关注的文档

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档