ucos3ucos任务调度度的方式有多少张

uCOS-II优先级任务调度在PowerPC上的移植和优化
> uCOS-II优先级任务调度在PowerPC上的移植和优化
uCOS-II优先级任务调度在PowerPC上的移植和优化
μC/OS是Jean J.Labrosse开发的实时多任务内核,最初是为Motorola 8位处理器68HC11写的。在后来的相关著作中,作者将代码移植到了PC上,以便于更多的读者学习。μC/OSII继承了μC/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU上,成为在嵌入式领域非常有影响力的RTOS。然而,由于该实时内核是为8位CPU设计的,对于那些具有算法硬件指令的CPU,仅做移植是很不够的。1 基于的一个基于的实时多任务内核的机制需要实现下面三个核心的处理功能:◆ 将任务置于就绪态;◆ 将任务取消就绪态;◆ 找出最高优先级的就绪态任务。在32位机上运行64个任务,可使用两个32位的整型变量数组OSRdyTbl [2],建立一个64位的任务就绪态向量;每一位表示对应优先级的任务是否处于就绪态,例如OSRdyTbl [0]的第4位为1表示优先级为4的任务处于就绪态。构造如下的三个函数,用来完成设置任务就绪、取消任务就绪和寻找当前最高优先级的就绪任务。上述代码可在任何处理器上实现所需的功能,没有考虑任何的优化和改进。通过这样的原理性函数,可以更好地理解多任务内核的。 寻找最高优先级就绪态任务的函数调用频率高,其执行时间直接影响内核的任务切换延迟时间,影响系统实时性。上述寻找最高优先级的就绪态任务的代码,随当前就绪任务的优先级不同,其循环次数也不同,导致其运行时间不确定。2 μC/OS的任务调度实现方法μC/OS和μC/OSII是为8位CPU写的,采用8位机算法,支持64个任务。使用8个字节的OSRdyTbl全局数组,表示所有任务的就绪态信息:1为任务就绪,0为非就绪。数组第一个字节的b0位代表64个任务中优先级最高的任务,最后一个字节的b7位代表优先级最低的空闲任务,永远为1。当OSRdyTbl 数组的数据不为0时(表示对应的8个任务中至少有1个进入就绪态),另一个单字节全局变量OSRdyGrp 中的相应位要置1。当任务状态发生变化时,需更新OSRdyGrp和OSRdyTbl中对应的位。寻找最高优先级的就绪任务时,μC/OS使用了预先固化的256字节的对照表OSUnMapTbl,给出特定字节值的最低位1所在位的信息。查表算法避免了逐位检测各优先级位引起的执行时间的不确定性,程序简单,执行速度快,与就绪任务多少和优先级无关。对于取值0~63的任务优先级,μC/OS将其划分成高3位的Y和低3位的X,并保存在其任务控制块TCB的OSTCBX和OSTCBY中,其对应的OSUnMapTbl的值保存在OSTCBBitY和OSTCBBitX变量中,以提高运算速度。为了避免函数调用所带来的额外开销,μC/OS直接用语句实现如下的三部分功能。① 设置任务进入就绪态OSRdyGrp |= ptcb?&OSTCBBitY;OSRdyTbl[ptcb?﹥OSTCBY] |= ptcb?&OSTCBBitX;② 设置任务退出就绪态。y = OSTCBCur?&OSTCBY;OSRdyTbl[y] = ~OSTCBCur?&OSTCBBitX;if (OSRdyTbl[y] == 0) {OSRdyGrp = ~OSTCBCur?&OSTCBBitY;}③ 寻找最高优先级的就绪态任务。以OSRdyGrp的值做偏移量,查OSUnMapTbl表,得到1个0到7的数Y,作为优先级高3位,再根据Y的值,找出OSRdyTbl中对应的字节,并且再次查OSUnMapTbl表,得到1个0到7的数X,作为优先级低3位的值,通过将Y左移3位再加上X的值,得到就绪任务中优先级最高的那个。y = OSUnMapTbl[OSRdyGrp];OSPrioHighRdy = (INT8U)((y
3) + OSUnMapTbl[OSRdyTbl[y]]);μC/OS的任务调度算法采用了以空间换时间的策略,将特定字节值的最低位1所在位的信息预先计算并保存到表中,运行时通过查表快速得到;每个任务的TCB中除了保存优先级信息本身外,还使用额外的4个字节保存优先级的高低3位和对应的OSUnMapTbl值,以避免运行时实时计算这几个值所带来的延迟。这些措施增加了系统ROM和RAM的开销。
电机保护器相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一&>&任务调度(uCOS2)
任务调度(uCOS2)
上传大小:462KB
从最底层的代码开始续说uCOS2是如何实现任务调度的
综合评分:0(0位用户评分)
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
QIAOQIAOLOVEMOMO
综合评分:
积分/C币:0
ganwei0609
综合评分:
积分/C币:3
万幸的石头
综合评分:
积分/C币:3
hualingxin
综合评分:
积分/C币:3
dreamgirl55555
综合评分:
积分/C币:3
综合评分:
积分/C币:5
综合评分:
积分/C币:3
wuzhaozhen
综合评分:
积分/C币:3
综合评分:
积分/C币:3
archer239915
综合评分:
积分/C币:3
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
任务调度(uCOS2)
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
wuwuhuizheyisheng
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
任务调度(uCOS2)分享一个关于ucosII任务调度很详细的讲解贴 - uCOS-II论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
分享一个关于ucosII任务调度很详细的讲解贴
15:31:54  
网址: & && && && && && && && &题目:uCOS-II中的任务切换-图解多种任务调度时机与问题
已退回1积分
17:29:43  
沙发 路过路过路过
08:26:38  
学习下~~~~~~~~~~~~~
23:02:24  
学习下~~~~~~~~~~~~~
08:41:09  
学习下,~~~~~~~~~
15:35:55  
学习下········
等待验证会员
17:20:25  
谢谢分享!谢谢分享!谢谢分享!
23:34:02  
23:17:21  
好好学习。。。。。。。。。。。。。
18:30:32  
这在学习UCOS,希望能有所帮助
22:13:08  
在UCOS中任务的却换分两种一种是任务自身挂起然后进行任务却换,另外一种是中断进行任务却换!
任务却换的原理就是,把任务堆栈放入单片机开辟的堆栈复制来复制去。任务堆栈复制进去就是要运行的,把单片机开辟堆栈复制给任务。就是要却换到其他任务去了!
17:33:13  
xue xi le xiexie
22:35:53  
顶楼主,,,,,
17:39:08  
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司uCOS-II优先级任务调度在PowerPC上的移植和优化-嵌入式系统-与非网
&&C/OS是Jean J.Labrosse开发的实时多任务内核,最初是为Motorola 8位处理器68HC11写的。在后来的相关著作中,作者将代码移植到了PC上,以便于更多的读者学习。&C/OSII继承了&C/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU上,成为在嵌入式领域非常有影响力的。然而,由于该实时内核是为8位CPU设计的,对于那些具有算法硬件指令的CPU,仅做移植是很不够的。
1 基于优先级的任务调度
一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:
◆ 将任务置于就绪态;
◆ 将任务取消就绪态;
◆ 找出最高优先级的就绪态任务。
在32位机上运行64个任务,可使用两个32位的整型变量数组OSRdyTbl [2],建立一个64位的任务就绪态向量;每一位表示对应优先级的任务是否处于就绪态,例如OSRdyTbl [0]的第4位为1表示优先级为4的任务处于就绪态。构造如下的三个函数,用来完成设置任务就绪、取消任务就绪和寻找当前最高优先级的就绪任务。
上述代码可在任何处理器上实现所需的功能,没有考虑任何的优化和改进。通过这样的原理性函数,可以更好地理解多任务内核的任务调度。
寻找最高优先级就绪态任务的函数调用频率高,其执行时间直接影响内核的任务切换延迟时间,影响系统实时性。上述寻找最高优先级的就绪态任务的代码,随当前就绪任务的优先级不同,其循环次数也不同,导致其运行时间不确定。
2 &C/OS的任务调度实现方法
&C/OS和&C/OSII是为8位CPU写的,采用8位机算法,支持64个任务。使用8个字节的OSRdyTbl全局数组,表示所有任务的就绪态信息:1为任务就绪,0为非就绪。数组第一个字节的b0位代表64个任务中优先级最高的任务,最后一个字节的b7位代表优先级最低的空闲任务,永远为1。当OSRdyTbl 数组的数据不为0时(表示对应的8个任务中至少有1个进入就绪态),另一个单字节全局变量OSRdyGrp 中的相应位要置1。当任务状态发生变化时,需更新OSRdyGrp和OSRdyTbl中对应的位。
寻找最高优先级的就绪任务时,&C/OS使用了预先固化的256字节的对照表OSUnMapTbl,给出特定字节值的最低位1所在位的信息。查表算法避免了逐位检测各优先级位引起的执行时间的不确定性,程序简单,执行速度快,与就绪任务多少和优先级无关。
对于取值0~63的任务优先级,&C/OS将其划分成高3位的Y和低3位的X,并保存在其任务控制块TCB的OSTCBX和OSTCBY中,其对应的OSUnMapTbl的值保存在OSTCBBitY和OSTCBBitX变量中,以提高运算速度。为了避免函数调用所带来的额外开销,&C/OS直接用语句实现如下的三部分功能。
① 设置任务进入就绪态
OSRdyGrp |= ptcb?&OSTCBBitY;
OSRdyTbl[ptcb?﹥OSTCBY] |= ptcb?&OSTCBBitX;
② 设置任务退出就绪态。
y = OSTCBCur?&OSTCBY;
OSRdyTbl[y] &= ~OSTCBCur?&OSTCBBitX;
if (OSRdyTbl[y] == 0) {
OSRdyGrp &= ~OSTCBCur?&OSTCBBitY;
③ 寻找最高优先级的就绪态任务。以OSRdyGrp的值做偏移量,查OSUnMapTbl表,得到1个0到7的数Y,作为优先级高3位,再根据Y的值,找出OSRdyTbl中对应的字节,并且再次查OSUnMapTbl表,得到1个0到7的数X,作为优先级低3位的值,通过将Y左移3位再加上X的值,得到就绪任务中优先级最高的那个。
y = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((y && 3) + OSUnMapTbl[OSRdyTbl[y]]);
&C/OS的任务调度算法采用了以空间换时间的策略,将特定字节值的最低位1所在位的信息预先计算并保存到表中,运行时通过查表快速得到;每个任务的TCB中除了保存优先级信息本身外,还使用额外的4个字节保存优先级的高低3位和对应的OSUnMapTbl值,以避免运行时实时计算这几个值所带来的延迟。这些措施增加了系统ROM和RAM的开销。
3 利用&数出前导零数目&指令实现任务调度
PowerPC是Motorola 、IBM和Apple三家公司于20世纪90年代初期联合设计的32位CPU。Freescale(其前身是Motorola半导体部)发展了针对汽车电子的MPC5xx系列单片机及后续基于e200内核的MPC5xxx系列单片机;更高端的e500、e600内核是用于通信领域的MPC6xxx、7xxx和8xxx系列。
下面对&C/OS任务优先级调度算法的改进和优化是在MPC5554单片机上实现的。
PowerPC处理器具有一条&数出前导零数目& 的指令cntlzw(count leADIng zero word),可以以硬件指令方式实现优先级的多任务调度算法。这条指令也可用于图像处理和算法加密的场合。该指令数出一个32位寄存器中前置零的数目,例如,返回0表示b0不为零,即没有前导零;返回3表示b3不为零,b3位的前面从b0到b2共有3个零;返回32表示RS寄存器中所有的位都为零。(在PowerPC架构中,最高位MSB表示为b0,低位MSB根据位宽表示为b7、b15或b31。)
利用这条指令,用汇编语言改写寻找最高优先级的就绪任务的函数,则不需要进行循环移位判断,可以直接从64个任务中找出优先级最高的那个任务。代码如下:
在这段代码中,首先判断前32个任务是否有处于就绪态的,如果没有的话,再对后32个任务进行判断。由于优先级最低的空闲任务总是处于就绪态,所以后32个任务总能返回一个有效值。该代码在前32个任务有就绪态时运行7条指令,在前32个任务均没有就绪时需要执行10条指令;而&C/OS原有的代码编译出来的汇编程序,则需要运行15条指令。
使用这个方法的另一个好处是不再需要使用256字节的OSUnMapTbl表,任务控制块TCB也不需要使用OSTCBX、OSTCBY和OSTCBBitY、OSTCBBitX变量,每个ECB中也不再需要OSRdyGrp,这也减少了对ROM和RAM的占用。
4 改进扩展任务数的优先级调度性能
当对&C/OSII支持的任务数进行扩展时,按照&C/OSII原有的做法,需要按照高低字节分别查找OSUnMapTbl对照表。任务数为256时,寻找最高优先级就绪任务的函数将需要运行约35条指令。数出前导零数目的指令在这种情况下的作用将更加显著,对于32位PowerPC处理器,精心设计的代码可以做到仅需10条指令就将任务数扩展到1024个。
此时OSRdyGrp扩展为32位,OSrdyTbl扩展成32个32位的数组。从OSRdyGrp得到的前导零数目,就是任务优先级高5位的值,乘以4可以得到该字的相对偏移地址;在OSRdyTbl中,定义高位对应高优先级任务,低位对应低优先级任务,则其前导零数目就是任务优先级低5位的值,和高5位的值移位相加就得到完整的任务优先级。通过将OSRdyGrp和OSRdyTbl定义成结构体,利用结构体首地址的相对寻址来分别读取其数值,可以减少一次取地址的操作。
寻找最高优先级就绪态的最终代码如下:
在64位的PowerPC 更有cntlzd(Count Leading Zero Double word)指令,一次就可以找出64个任务中优先级最高的那个,就更没有必要使用&C/OS?II中的算法了。
RTOS实时内核&C/OS和&C/OS?II中,任务调度算法巧妙,性能优异,在嵌入式应用领域很有影响力,被移植到各种CPU上。然而由于是为8位CPU设计的,对于那些具有优先级硬件算法指令的16/32/64位CPU,&C/OS?II的软件算法就完全失去了优势。应该利用这类CPU的特有指令,优化任务调度算法,使RTOS的实时性达到最佳。对于这类处理器,仅移植&C/OS?II软件算法是很不够的,应该利用相关硬件算法指令。
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
PowerPC当年异常强大,曾经是Xbox的处理器,是Mac的处理器,占据了服务器的半壁江山;当时刚刚接触CPU时,知道PowerPC是第一个做出多核心,第一个主频上4GHz,拥有单核心多线程(迄今还没有被AMD掌握,AMD的单模块双线程不如共享核心的超线程技术)。
发表于: 16:06:09
对 PowerPC 体系结构家族树的所有分支来说,PowerPC 体系结构和应用级编程模型是通用的。
发表于: 16:45:43
二十世纪九十年代,IBM(国际商用机器公司)、Apple(苹果公司)和Motorola(摩托罗拉)公司开发PowerPC芯片成功,并制造出基于PowerPC的多处理器计算机。PowerPC架构的特点是可伸缩性好、方便灵活。
发表于: 16:44:35
与uCos见面还是大学的时候,老师让我为毕业设计选一个课题,要求有关嵌入式实时操作系统,于是开始在网上搜索,顺理成章的就发现了uCos,于是开始了uCos之路,但后来由于硬件平台的问题,毕设没有用uCos,而用了另外一个不开源的。
发表于: 17:40:42
巨大的市场价值背后是一片混乱的RTOS景象,“简单、唯美”的东西何处去寻找?这是让很多业内人士思考的一个问题,在12月16日,与非网记者参加了一场名为“2017 RT-Thread开发者大会”,这款有十余年历史的国产RTOS令人印象深刻。
发表于: 17:12:54
提到嵌入式的概念,一时间脑容量已经容纳不下,转到驱动的设计刚刚好,习惯将一件事分层次去做,驱动设计亦是如此,很多人做工程时因为项目的时间紧张,直接想到如何去实现,甚至直接跳到工具上去,学习编程语言。
发表于: 15:25:40
最新半导体和电子元件的全球授权分销商贸泽电子 (Mouser Electronics) 即日起备货Renesas Electronics的RX130系列32位单片机。
发表于: 17:08:36
据日本经济新闻此前报道透露,苹果正与清华紫光集团旗下的长江存储科技公司就 NAND Flash 采购进行协商。
发表于: 09:12:37
鉴于互联的设备需要支持更多的硬件资源,操作系统,软件工具及应用,物联网开发者面临的需求不断增长。正如我们在其他市场领域所看到的,虚拟化是满足这些多样化需求的一个不二选择。
发表于: 13:58:00
三星电子今天发布了一款全新的SSD固态硬盘,型号“PM883”,最大特点是第一次用上了LPDDR4内存作为缓存颗粒。PM883面向数据数据中心市场,采用标准的2.5寸SATA规格,主控方案未知(估计是三星自家的),闪存是三星64层3D V-NAND颗粒,容量4TB、8TB两种可选。
发表于: 10:45:05
与非门科技(北京)有限公司 All Rights Reserved.
京ICP证:070212号
北京市公安局备案编号: 京ICP备:号轻松一扫,精彩不停
扫描下载APP
正在学习:
感谢你的评价,我们会继续努力!
恭喜,你已学完本节课程!
感谢你的评价,我们会继续努力!
写点什么吧,你的感受对其他同学有很大帮助噢
字数限250字以内
【孕妇必备】快乐准妈妈系列音乐胎教新方法
【奥尔夫教学】亲子音乐会让六一更精彩
【孕妇必备】准妈妈音乐坊之节拍律动
购买后可以学习整个课程
&课程信息&
课程价格:0.00元
购买人数:13人
学生满意度:0%
直播倒计时:09小时52分15秒
上课时间:
线下课倒计时:09小时52分15秒
扫码下载APP
UCOSIII时间片轮转调度
(1)《例说STM32》《原子教你学STM32》《精通STM32F4》《STM32F7原理与应用》等嵌入式畅销书籍作者。
(2)正点原子系列开发平台总设计师。
(3)广州市星翼电子科技有限公司技术总监。
该课程由浅入深详细讲解了UCOSIII实时操作系统使用方法。从RTOS背景知识,到UCOSIII任务管理,到任务见通信,讲解十分详细。是学习嵌入式实时操作系统UCOSIII的好教程。
第1章UCOS背景知识和移植
RTOS背景知识
UCOSII在STM32F103上移植
UCOSII在STM32F407上移植
UCOSIII在STM32F407上移植
第2章UCOSIII任务管理
UCOSIII任务管理(上)
UCOSIII任务管理(中)
UCOSIII任务管理(下)
UCOSIII任务创建
UCOSIII任务挂起和恢复
UCOSIII时间片轮转调度
第3章UCOSIII任务间通信和其他功能
UCOSIII信号量和互斥信号量(上)
第15讲 UCOSIII信号量和互斥信号量(下)
UCOSIII系统内部任务
UCOSIII软件定时器
UCOSIII存储管理
课程暂无资料
课程暂无评价
该机构的同类课程
该机构的热门课程}

我要回帖

更多关于 ucosii任务调度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信