MQX任务学习

0?wx_fmt=gif

MQX也是基于对任务的调度和管理来运行的,所以今天来简单学习下MQX的任务。

MQX像其他操作系统一样,提供对任务的调度和管理,任务是完成一定功能的函数,但并不是说所有的函数都可以是任务,每个任务都有自己的属性。

MQX的任务都有自己的堆栈,和描述符,以及自己的实现函数。任务的函数就是任务要完成的功能的代码程序,每个任务都有自己的栈空间用以保存任务在调度时候的信息以及内部局部变量,任务描述符像人的身份证一样,用任务描述符可以关联任务的程序控制块,在uCOS-II里面也有类似的任务控制块。

任务函数:

一个任务完成一定的功能,其实单从代码上看,任务和一般的函数没有什么区别,但是任务自己会认为CPU就是属于自己,并不知道有其他任务的存在,任务的函数必须登记才能被RTOS调度运行,开发时候还要设置任务的编号,优先级,MQX有任务模板列表,可以参考任务有什么属性。

任务堆栈:

每个任务都有自己的堆栈,按照一定的规则组织的一段连续的存储空间,在任务运行时候,保存任务云顶过程中的局部变量,上下文信息等。为任务分配空间时候要注意,如果你的系统存储空间很紧张就要尤其注意,不能分配的太大。

任务描述符:

每个任务有唯一的任务描述符,就像每个人有一个真实有效的身份证样,在

MQX的源码包中,一个任务就绪队列维护一个任务描述符链表,这里提一下,在操作系统的源码包中包包含大量的结构体,指针,链表操作,所以这些操作必须清楚,才能理解操作系统的设计运行。

任务有四种状态转换,分别是终止态,阻塞态,就绪态,激活态。一个任务一定处于四种状态中的一种。那么问题来了,任务如何创建呢?

任何任务都可以创建另外的任务,通过调用_task_create(),_task_create_at()或者 _task_create_blocked()函数。一个任务可以通过_task_get_ID()获取任务的ID。任务也可以终止自己或者其他任务。任务如果被终止,MQX将释放任务的资源。

MQX的任务调度包括三种

FIFO

Round Robin 即时间片轮询

显示调度,

建议使用前两种。每一种调度的详细源码请参考MQX源码包和参考手册。

在MQX的源码包中,任务的调度也是用汇编语言实现的,所以前面的课程中我们一直强调要熟悉一些ARM汇编指令,否则你根本看不懂和理解中断,启动,任务的调度和管理等过程。

0?wx_fmt=jpeg

让你的任务奔跑起来吧,这个夏天。

0?wx_fmt=bmp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值