关闭
搜索
搜索
本版
帖子
用户
热搜:
程序员
简洁模式
高级模式
用户组: 游客
消息
提醒
新听众
我关注的
帖子
道具
勋章
任务
设置
退出
请
登录
后使用快捷导航
没有帐号?
立即注册
设为首页
收藏本站
开启辅助访问
切换到窄版
登录
or
立即注册
快捷导航
搜索
首页
论坛
BBS
MCU单片机技术
程序员交流
UCOS II 学习之 优先级管理
[复制链接]
作者:
sjkb861
版块:
›
灌水·股票·程序员大本营·工作之余需要点阳光·我们不只是工程师
›
IT业界资讯
发布时间:
2019-2-20 07:13:07
1664
0
返回列表
sjkb861
当前离线
新手上路
新手上路, 积分 6, 距离下一级还需 44 积分
新手上路
新手上路, 积分 6, 距离下一级还需 44 积分
积分
6
发消息
楼主
电梯直达
sjkb861
发表于 2019-2-20 07:13:07
|
只看该作者
|
倒序浏览
|
阅读模式
《嵌入式实时操作系统uCOS-II》中对于优先级管理讲了整整三页,猛的一度不禁让人一头雾水,感觉似乎用到了一种玄而又玄的神奇算法,却不知道到底讲了什么。仔细读又读了很多遍,才发现UCOS II 中优先级管理的巧妙的算法核心思想实际上很简单——即人工提前计算,以减轻处理器的工作量。
本文分为两部分介绍UCOS II的优先级管理机制,第一部分为原理,第二部分为具体代码实现,不涉及具体编程的话就可以先跳过去,等有需要了再回来查找。
UCOS II 要不断执行当前就绪态优先级最高的任务,那么最简单的方法就是建立一个有顺序的表,位于表的前端优先级高,表的后端优先级低,然后在表中填入响应的任务,位于前端的任务优先执行。在采用计算机语言表达时,我们可以用一个64位的数,每一位表示一个优先级,最低位表示最高优先级,当前位置位表示这个优先级有可以执行的任务。
那么问题来了,在查找优先级最高的任务时,最简单的办法就是遍历——从表的最前端开始查找,执行遇到的第一个任务。遍历虽然简单,但是速度慢,查找时间不定。UCOS II 有64个优先级,所以在最坏情况下需要计算64次才能找到当前需要执行的任务。这在要求响应速度高的场合是不能接受的。
为了解决这个问题,UCOS II 将优先级分成八组,从0-8第一组,9-15第二组......以此类推,当每一组存在就绪的任务时,这一组的标志位就置位。这样做有两个优点,第一,大部分嵌入式处理器不是64位,常用32位或16位,这样可以把64位长数转化为8个8位的数进行储存。第二,提升了查找速度,从原来最多查找64次,变成最多查找16次就可以找到,即先查找标志位中优先级最高的组,最多查8次,然后查组内优先级最高的位置,最多8次。
现在的问题变成了如何获取一个8位数的最低为1的数的位置,比如0x24,即二进制0010 0100最低非0位置为3;0x28,即二进制0010 1000最低非0位置为4。UCOS II的解决办法就是提前计算:由于八位数存在256种可能,那么提前计算好所有可能,并且将其编入一张表中。把需要查询的八位数作为序号,计算出的数值作为结果填入,当需要查询的时候只需要将八位数作为数组的地址即可返回结果,这样对优先级组进行一次查表,组内进行一次查表,两次计算即可返回当前可执行任务最高优先级。
在UCOS II中,OSMapTbl[X]是一个位的数组,即之前的查找表,OSRdyTbl[Y]为8位char型数组,Y为优先级组序号,对应的值为每一个优先级组内的八个优先级,OSRdyGrp是一个unsigned char型数,每一位为该优先级组标志位。
64位优先级占用一个可以用一个char型变量prio表示,3/4/5位为优先级组组编号,0/1/2位为具体组内编号即:
y = OSMapTbl[OSRdyGrp]
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
收藏
0
相关帖子
•
Linux负载均衡算法有瑕疵,修复后性能将提升一倍
•
Linux入门:Linux进程检测与控制
•
Linux里面最重要的命令之一find
•
编程小短文:find,让你随心所欲查找整块磁盘的任意文件
•
Linux之父怒删工程师提交的补丁,称“太蠢了”网友:怼得好!
•
linux内核调度算法--快速找到最高优先级进程
•
linux中find命令根据文件名字来查找
•
Ansible自动化工具安装、配置和快速入门指南|Linux中国
•
这些Linux的“自动化”技巧,教你轻松完成任务
•
解决STM32单片机常见问题
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
表情
@朋友
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
linux
快速回复
返回顶部
返回列表