- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ucos优先级位图算法分析.doc
Ucos优先级位图算法详解
By lynn
/liuyunjay66
1. ucos任务相关简介
在实时操作系统中,由于系统不可能太庞大,因此任务数量也不会太大,ucos中共有64个优先级(0~63级,数字越小优先级越高)。因为是实时系统,所以对应每个任务就分配一个优先级。
2.二进制和十进制的转换数学基础
这里先介绍一个数学知识,二进制如何变为十进制,比如 十进制26,其8位二进制表示为当十进制为0~63时,前两位无作用,所以只看后6位,011 010.怎么计算成十进制呢?很简答:如下所示
这个过程就是,把这个十进制数,分为两个部分,高三位和低三位,这个十进制数的大小就等于高三位的十进制*8+第三位的十进制数。高三位的011=3 ,低三位的010=2.所以26=3*8+2.=(011)3+(010).即将高三位左移三位就是*8再加上低三位。所以下面要介绍的算法也是这个数学方法。
3..整个过程的流程
1.创建任务并分配优先级
2.通过算法,操作系统对创建了的任务即就绪任务进行标记。并通过标记来查找当中任务中优先级最高的任务
3.调用调度函数进行调度,让最高优先级任务运行。
3..1任务的优先级怎么创建的。
我们先来看一下,ucos中创建任务的函数原型:
INT8U OSTASKCeate(void (*task)(void *pd),void *pdata,os_stk *ptos,INT8U prio),从这个函数可以看出,最后一个参数就是优先级,所以结论是,在创建任务的同时就要确定任务的优先级,并且是该优先级是8位的(0~2^8-1),这里也可以看出为什么会有64个优先级。
因为用户可以指定任务的优先级,但实时操作系统最大的好处就是高优先级的任务可以抢占低优先级的任务,那怎么实现的呢?通过优先级实现
既然用户在调用系统函数创建任务的同时指定了任务的优先级,一旦创建了任务,该任务就会立即成为就绪状态,操作系统就会将该任务的优先级标志位置位,相当于做个记号,操作系统心里就会想,哦,这个优先级的任务已经就绪了,同样创建了其他的任务,操作系统都会在某个地方做好标记表明对应优先级的任务已经就绪,然后在调度函数的调度下进行调度,那么在哪个地方做个标记呢?既然是实时操作系统,操作系统考什么算法去查找优先级最高的任务呢?
3.2 ucos怎么实现就绪状态任务优先级的标定
什么是优先级的标定:就是操作系统要知道哪个任务已经就绪了,然后就在这些就绪了的任务里面切换调度。所以第一步就是要知道哪些任务就绪了,然后就可以操作了。
这里要先介绍两个数据结构,:OSRdyGrp、OSRdyTbl[]。这两个变量协同完成优先级的标定。
OSRdyGrp:优先级就绪组
这是一个8位的变量。每一个变量对应于OSRdyTbl[]中的一行(实际上是一个元素,但也可以理解为一行)。
OSRdyTbl[]:优先级就绪表
这是一个数组,有8个成员,每个成员都是8位的变量,所以就可以构成了8*8的矩阵了。所以64个优先级都是标定在这个数组中的。
他们的关系如图:
从上图可以明显看出,这个图有64个空格(64个位),每个空格对应一个数字,该数字就是优先级的标号,但是这个是人为的标上的,实际上这是64个空格,现在要做的事情就是将就绪任务的优先级相对应的标号置1,表示这个优先级任务就绪了,比如刚创建了一个任务,它的优先级是7,所以往表格中数字为7的空格写入1.就表明该优先级的任务就绪了,可以被调度了。另外当所有需要创建任务都创建完毕后,各个就绪任务的相应数字空格都会置1,表明这些任务都就绪了,比如,现在创建了5个任务,优先级分别为4,7,9,10,24.所以在创建完这些任务后,这个优先级就绪表中的相对应的数字空格都会被置1.要特别注意上图的优先级顺序,0的优先级最高,63的优先级最低。
那到底怎么往空格里置1的呢?
这里就要分析这个优先级就绪表了,
1.这个表的数据结构是数组,也就是说,这个数组有8个成员,每个成员都是8位的变量。
2.是通过二级查找实现对就绪任务的标定的。这里可以理解为一个矩阵,找某个数,肯定是先找行,再找列。从而找到这个元素位置。思想就是这个。
怎么找行呢?这里的一个变量OSRdyGrp,是一个8位的变量。每一位对应上图的一行,当某一位置1时,就表明就绪表对应的行有就绪任务,然后再查找列,就可以找到哪个任务就绪了。现在举个列子来说明:
创建了一个任务,它的优先级为 prio=11.(这是用户指定的),此优先级用二进制表示(8位):最前面两位无用处,前面已说过
00 001 011。那么怎么在对应的OSRdyTbl[]优先级就绪表中进行标定呢?
1. 把这个二进制数分为两个部分:
您可能关注的文档
最近下载
- 《质量评估流程》课件.ppt VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
- 2024年数智工程师职业鉴定考试复习题库(含答案).docx VIP
- (完整版)建筑施工技术交底范本(大全) .pdf VIP
- 水运工程大体积混凝土温度裂缝控制技术规范_JTS-T 202-1-2022.pdf
- 设备供货、安装、调试、验收方案.docx VIP
- 《水利水电工程施工图审查技术导则》.pdf VIP
- 《木材学》——李坚 木材学笔记(完整).doc VIP
- 《公路水泥混凝土路面施工技术规范》_(JTGF30-2015).pdf VIP
- 小学生数学学习自查习惯现状调查报告.pdf VIP
文档评论(0)