uCos中优先级判定表OSUnMapTbl原理

简介: OSOSRdyTbl[0]的bit7-bit0对应于优先级7-0, OSOSRdyTbl[1]的bit7-bit0对应于优先级15-8, OSOSRdyTbl[2]的bit7-bit0对应于优先级23-16, OS...
OSOSRdyTbl[0]的bit7-bit0对应于优先级7-0,
OSOSRdyTbl[1]的bit7-bit0对应于优先级15-8,
OSOSRdyTbl[2]的bit7-bit0对应于优先级23-16,
OSOSRdyTbl[3]的bit7-bit0对应于优先级31-24,
OSOSRdyTbl[4]的bit7-bit0对应于优先级39-32,
OSOSRdyTbl[5]的bit7-bit0对应于优先级47-40,
OSOSRdyTbl[6]的bit7-bit0对应于优先级55-48,
OSOSRdyTbl[7]的bit7-bit0对应于优先级63-56
OSRdyGrp确定了优先级的次低三位(bit5-bit3),OSOSRdyTbl确定了优先级的低三位(bit2-bit0),

OSRdyGrp = 0x011;  //0b00010001
OSRdyTbl[0] = 0x0a; //0b00001010
OSRdyTbl[4] = 0x01; //0b00000001
计算出存在的几个优先级为;0*8+1=1,0*8+3=3,4*8+0=32
假设OSRdyGrp最低位为1的是X位,OSRdyTbl[X]最低为1的是Y位,
则优先级=X*8+Y
因此只要知道了上述的X,Y就可算出最高优先级
OSUnMapTbl就是将0x00-0xff每个数据中最低位为1的位数一一列举出来
INT8U  const  OSUnMapTbl[256] = {
    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x00 to 0x0F                             */
    //OSUnMapTbl[0]    
    //OSUnMapTbl[1]    1        bit0       
    //OSUnMapTbl[2]    2        bit1 
    //OSUnMapTbl[3]    3        bit0 
    //................

    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x10 to 0x1F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x20 to 0x2F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x30 to 0x3F                             */
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x40 to 0x4F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x50 to 0x5F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x60 to 0x6F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x70 to 0x7F                             */
    7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x80 to 0x8F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x90 to 0x9F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xA0 to 0xAF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xB0 to 0xBF                             */
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xC0 to 0xCF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xD0 to 0xDF                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xE0 to 0xEF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0        /* 0xF0 to 0xFF                             */
};
 
OSUnMapTbl数组中元素OSUnMapTbl[n]表示一个任意的8位无符号数n对应的最低位为1的那个最低位数,例如二进制数00000001B最低位为1的是bit0,如是OSUnMapTbl[00000001B] = 0,
又例如1000000B最低位为1的是bit7,所以OSUnMapTbl[10000000B] = 7,及OSUnMapTbl[128]也就是上面OSUnMapTbl第9行第一列为7.


X = OSUnMapTbl[OSRdyGrp];
Y = OSUnMapTbl[OSRdyTbl[X]];
最高优先级为X*8+Y
 

1.      任务优先级表是按照由左至右,由上至下的顺序增长的,且优先级号越小优先级越高。

2.      任务优先级存储在一个字节型数组里,数组大小为8,其还有一个行表,即一个字节单元,用于确定在数组的哪行有任务。

3.      任务优先级由一个字节的低6个bit组成,其最低优先级为2^6-1 = 63(优先级范围为0~63),其中高3bit对应行表,低3bit对应数组中某字节单元。

4.      位掩码OSMapTbl[8],下标0~7对应值00000001、00000010、00000100、00001000、00010000、00100000、01000000、10000000,其作用是屏蔽其他bit值,下标0~7对应行表(高3位)和优先级表(低3位)。

5.      OSUnMapTbl[]数组用于查找最高优先级,其经过精心设计。

首先,找行表值在OSUnMapTbl[]中的对应位置的值x

然后,找优先级表第x行值在OSUnMapTbl[]中对应位置的值y

—查找方法:由于行表值为8bit,则高4bit对应OSUnMapTbl[]中行值,低4bit对应OSUnMapTbl[]中列值;对应优先级表查找方法同行表查找方法。

最后,prio = x<<3 + y。

注:OSUnMapTbl[]数组构造方法:

--由优先级表的构造,即越靠左越靠上的优先级越高可知:

1.低4bit无值,那么就高4bit的最低为1值的位确定-例:0000-0, 0001-4, 0010-5,0011-4……

2.低4bit有值,那么就低4bit的最低为1值的位确定-例:00000000-0,10010001-0,00111010-1,00001011-0……

3.由1和2有第1列值为0,4,5,4,6,4,5,4,7,4,5,4,6,4,5,4;第2列全为0,第3列全为1,第4列全为0,第5列全为2,第6列全为0,第7列全为1,第8列全为0,第9列全为3,第10列全为0,第11列全为1,第12列全为0,第13列全为2,第14列全为0,第15列全为1,第16列全为0。


目录
相关文章
|
自然语言处理 搜索推荐 API
GPT-4o mini:探索最具成本效益的语言模型及其在开发中的应用
【8月更文第5天】随着自然语言处理技术的快速发展,语言模型正变得越来越强大且易于访问。OpenAI 最新发布的 GPT-4o mini 模型以其卓越的性能和极具竞争力的价格,迅速成为了业界关注的焦点。作为开发者,您是否已经开始探索这个“迄今为止最具成本效益的小模型”?本文旨在鼓励开发者分享使用 GPT-4o mini 及其他大型语言模型的经验,并探讨如何有效地利用这些工具来提升开发效率和创新能力。
371 0
|
存储 关系型数据库 MySQL
【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程
【MySQL】在 Centos7 环境安装 MySQL -- 详细完整教程
|
11月前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
弹性计算 Java 网络协议
……企业搭建门户网站需要考虑的事情就很多了?
企业门户网站不同于普通网站,它不仅是品牌形象的展示,还集品牌宣传、销售、服务、互动、数据营销等多功能于一体。企业搭建门户需考虑多地访客的访问速度、定制开发及高昂成本。为解决这些问题,中小企业转向云服务,如阿里云提供的解决方案,利用云效流水线自动化构建和发布,通过ROS快速创建ECS,结合DNS解析和CDN加速,实现高效低成本的部署。此方案简化了上线的流程,但完整的开发还包括设计、开发、测试等环节在本解决方案中没有体现。
423 1
……企业搭建门户网站需要考虑的事情就很多了?
|
负载均衡 网络性能优化
EMQ如何保证消息不重复消费?
EMQ(Erlang MQTT Broker)通过以下机制来保证消息不重复消费
1089 2
|
云计算
知域互联科技有限公司和阿里云商标什么关系?
知域是不是第三方服务商?不是,知域互联科技有限公司是阿里云子公司,专门为商标服务成立的。阿里云商标注册是不是委托给第三方服务商了?阿里云的商标代理名称为:知域互联科技有限公司,知域的大股东是深圳阿里云计算技术有限公司,所以大家放心选择阿里云商标
2384 0
知域互联科技有限公司和阿里云商标什么关系?
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理:实现智能问答系统的关键技术
自然语言处理在实现智能问答系统中起着重要作用。通过文本预处理、信息检索、语义理解和答案生成等关键技术,我们可以构建高效准确的智能问答系统,为用户提供便捷的信息获取方式。随着深度学习等技术的发展,智能问答系统的性能还将得到进一步提升,为人们提供更加智能化的服务。
1110 0
|
存储 算法 Java
Qt三方库开发技术:二维码生成、识别以及条码识别
Qt三方库开发技术:二维码生成、识别以及条码识别
Qt三方库开发技术:二维码生成、识别以及条码识别