当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 就绪是什么呢?它就是一切准备就绪了,准备运行了。任务一旦建立,它就会进入了就绪态(task ready),准备运行了。任务的建立可以是在多任务运行开始之前,也可以动态地由一

 就绪是什么呢?它就是一切准备就绪了,准备运行了。任务一旦建立,它就会进入了就绪态(task ready),准备运行了。任务的建立可以是在多任务运行开始之前,也可以动态地由一个运行着的任务建立。

那么,如果有多个任务就绪,那怎么办呢?这就牵涉到了就绪表的问题了。就绪表(ready list)在存放就绪任务的。就绪表中有两个变量,OSRdyGrp和OSRdyTbl[]。因为任务最多一般只能是64个,Jean J.Labrosse 就把就绪表分成8*8的一个矩阵形表(table),这样就刚好能存放64个就绪的任务了。下面表格里面的数字代表优先级。那么,OSRdyGrp和OSRdyTbl[]又代表什么呢?

见上图,作者见任务太多,就按优先级将它分成了八组,每一行作为一组,每组八个任务,(也即按Y坐标分组)。而OSRdyGrp是一个有八位二进制数的数,它的每一位代表一个组。比如:OSRdyGrp的第0位代表了第一行0到7这八个优先级。第一位代表了8到15这八个优先级,以此类推。只要哪一组中的任何一位置位(即哪一组中有任何一个任务进入就绪表),那么OSRdyGrp相应的位就置1。比如:第一行中优先级0到7,只要有一个任务进入就绪表,那么OSRdyGrp的第0位就会置1(有更多任务进入就绪表也会置1),表示这一行中有任务进入就绪表啦,但是有多少呢?不知道!

那不知道,怎么办呢?这就要看OSRdyTbl[]了。先来介绍一个掩码的知识:ucos里面有一个数组,叫OSMapTbl[],它来帮助我们查一个任务是否进入优先级。

具体如下:


OSMapTbl[]的下标


OSMapTbl[](即位掩码)


0


00000001


1


00000010


2


00000100


3


00001000


4


00010000


5


00100000


6


01000000


7


10000000

我们来看,一个任务优先级将它化成二进制数,它的低三位与它在哪一组没有任务关系!因为逢八才换组,而低三位最大才是七!但它能决定这个任务在一组的某个地方(即能决定X的值)而它的接下去三位与它在一组中的哪个位置没有任何关系!因为去掉低三位,接下去三位始终是八的倍数,始终指向组的首地址!但它能决定Y的值!这样,在一个矩阵中,X的值和Y的值都决定了,那么这个任务所在的位置就决定了。这样,使一个任务进入就绪状态和脱离就绪状态也就简单了。

其实我们不用这么麻烦,我们看,我们可以把表中的数看成是八进制的数,低三位看成是个位,接下来三位看成是进位,进位代表OSRdyGrp,个位代表OSRdyTbl[],个位无论怎么变,它都不会影响进位的位置,所以在哪一行只取决于OSRdyGrp,在哪一列只取决于OSRdyTbl[],口算也算出来了,呵呵。这样比较好理解一些。

这里可能大家有疑问:那不只取了优先级的六位吗?还有两位呢?这个不用着急,还有两位为零!因为最大才63,只需要用到六位,如果最高两位有任何一位为一的话,就会出错。所以我们就不用管最高两位了。

使任务进入就绪状态的程序为:

OSRdyGrp |= OSMapTbl[prio>>3];//确定它的行,置1

OSRdyTbl[prio>>3] |=OSMapTbl[prio&0x07];//确定它的列,置1

找出进入就绪态的俦优先级最高的任务

明白了上面的内容,这里也不难明白了。这里作者Jean J.Labrosse 提供了一个查找表的,只要按照一定算法查找,很快就查出来了。

代码为:y = OSUnMapTbl[OSRdyGrp];

x= OSUnMapTbl[OSRdyTbl[y]];

prio = y<<3 +x;

这个表为:

右边注释的值是代表OSRdyGrp的值。如果OSRdyGrp的值为01101000,即0x68,那么,我们可以根据右边的注释,要查第七行。是第七行的第八个(从0开始)。是3。再代入程序,算出x为2,将x和y 代入prio = y<<3 +x;,算出最高为26,再根据这个值,查出任务控制块优先级表,得到该任务的任务控制块。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

AI与自动化驱动生命科学研发革新 北京2025年2月20日 /美通社/ -- 近日,镁伽科技正式推出LABILLION™实验室智慧管理平台,并于线上发布。作为镁伽在"AI for Science(AI4S)&...

关键字: LAB IO ABI 指令

在数字通信领域,二进制通信协议扮演着至关重要的角色。它们不仅决定了数据如何在不同系统或设备间高效、准确地传输,还直接影响到通信的实时性、可靠性和资源利用率。本文将深入探讨二进制通信协议的序列化与解析过程,并通过实例代码展...

关键字: 二进制 通信协议 序列化

创新能源储存解决方案旨在提升车辆安全性与效率 12V和48V电压架构合同的开创性签署,充分体现了本行业对Clarios先进超级电容器技术的坚定信心 威斯康星州格伦代尔2025年1月7日 /美通社/ --...

关键字: iOS 超级电容器 RIO 电力

加速软件创新并提升开发人员工作效率 GitLab Duo与Amazon Q基于AI协作,以简化软件开发工作流程、加速代码交付并提升整个软件开发生命周期的安全性。 GitLab平台内置了端到端的安全与合规功能,...

关键字: LAB 亚马逊 集成 GIT

上海2024年11月26日 /美通社/ -- 2024年11月22日,由上海璞咣教育科技有限公司主办的"宇宙新生时空艺术展"在长三角文博会上璀璨开幕,吸引了无数目光。本次展览以AI人工智能发展背景下的...

关键字: 人工智能 BSP 二进制 影像

伦敦2024年10月21日 /美通社/ -- 全球领先的美容、健康和个人保健市场平台Fresha今天宣布,与专门从事人工智能发色技术的尖端公司Yuv进行战略投资并建立合作伙伴关系。 这一合作使Fresha能够为客户提供无...

关键字: 库存管理 可持续发展 BSP LAB

在数字计算机系统中,数据的表示和处理是至关重要的一环。二进制作为计算机内部的基本编码方式,其表示形式直接决定了计算机处理数据的效率和准确性。在二进制表示中,原码和补码是两种重要的编码方式,尤其在处理有符号整数时显得尤为重...

关键字: 数字计算机 二进制 编码

在AI移动平台上揭示以前未被发现的光谱数据,用于未来的智能皮肤护理和个性化推荐。 比利时梅赫伦2024年8月28日 /美通社/ -- Spectricity与Lululab宣布签署一份谅解备忘录(MOU),备忘录概述了...

关键字: LAB 光谱 SPECT IC

上海2024年8月2日 /美通社/ -- 万豪国际集团近日宣布与中国新城市集团旗下众安商业集团签署协议,将W酒店品牌引入杭州。杭州W酒店预计于2031年开业,择址杭州新中央商务区钱江世纪城,位于民和路与利一路交叉口西北侧...

关键字: RIO IoT ARRI COM

语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。

关键字: 语音识别 按键 二进制
关闭