UCOS-II学习日(3)任务的创建以及任务的操作管理

UCOS对任务的操作

任务的创建,删除,挂起,等操作都是通过系统函数来实现的
UCOS可以使用OSTaskCreate()或者OSTaskCreateExt()来创建任务
在这里插入图片描述
在这里插入图片描述

UCOS创建任务的一般方法

在OSInit()函数调用后,创建一个start_task()任务,在start_task()任务中创建我们要创建的任务(正点原子的源码中是这样做的)
任哲老师的书中是直接在OSInit()之后,OSStart()(UCOS启动)之前创建自己的任务。两者大同小异,无需太过纠结。

任务的挂起和恢复

之前有笔记中写过任务有 运行,等待,就绪,睡眠,中断五个状态
用户的任务,可以通过调用OSTaskSuspend()函数来挂起,通过调用OSTaskResume()恢复
函数原型 INT8U OSTaskSuspend(INT8U prio)
用户的任务可以挂起自己,也可以挂起除了空闲任务以外的其他任务
如果是任务自己挂起自己那么形参就是OS_PRIO_SELF如果是别的任务,那么形参就是那个任务的优先级
至于函数是怎样挂起,和恢复任务,UCOS中自己会处理好,应用者无需操太多心。大概就是一些检查任务状态,然后更改任务的状态。

任务的删除

删除一个任务也就是从任务控制块链表中删除这个任务的TCB(任务控制块)

但是一个任务不是想删就直接删的,任务在运行或者其他状态会占用很多系统资源,信号量之类的,如果随意删除会对系统造成很大的影响。

所以UCOS中删除任务之前调用一个请求删除函数OSTCBDelReq()(和挂起函数一样,如果是任务自己调用这个函数删除自己,形参的优先级要代入,OS_PRIO_SELF)这个函数会把TCB里面的成员变量 bool型的 OSTCBDelReq,然后任务就知道自己应该被删除了。

在请求删除函数调用后,任务释放自己所占有的资源,然后在合适的时候,再调用删除函数OSTaskDel()删除任务

改变任务的优先级

只需要调用一个函数就可以改变一个任务的优先级
在这里插入图片描述

任务信息查询

在这里插入图片描述

UCOS任务的初始化和启动

初始化

调用OSInit()对UCOS-II中所有的全局变量和数据结构进行初始化,并且创建一个空闲任务,如果需要统计任务就在os_cfg.h中配置 OS_TASK_STAT_EN =1
空闲任务优先级最低 63
统计任务优先级第二低 62
同时初始化函数还会,创建两个链表即空白任务控制块链表和任务控制块链表,一个指针数组按照优先级顺序,存放各个任务的TCB指针,任务就绪表和任务就绪表组 两个变量,就成了下图这样的状态
在这里插入图片描述
同时之前说到UCOS中的许多全局变量,例如指向当前正在运行任务的指针,指向最高优先级任务的指针
初始化完成后这些变量的值变成了如下图

在这里插入图片描述

启动

OSStart()系统启动函数必须在至少一个用户任务创建之后再启动

启动函数会调用,OSStartHighRdy()函数,设置系统运行标记位OSRuning=TRUE ,将就绪表中优先级最高的任务的栈指针载入到SP中,并且强制中断返回,这样任务就如同从中断中返回到运行状态一样,整个系统得以运转

创建之后的系统数据状态就变成了了
在这里插入图片描述
全局变量就变成了了
在这里插入图片描述
然后UCOS就进入了多任务管理阶段

启动总的来说原理前面笔记说的很清楚,后面的理解起来就很快,这些全局变量还是有必要知道的,在后面的运用中可能用到。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值