前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MQX任务学习

MQX任务学习

作者头像
用户1605515
发布2018-04-10 14:51:22
6530
发布2018-04-10 14:51:22
举报
文章被收录于专栏:嵌入式程序猿
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汇编指令,否则你根本看不懂和理解中断,启动,任务的调度和管理等过程。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档