UCOSII中的任务切换原理介绍

1、多任务的引入

之所以引入多任务,主要在于提高程序运行的效率。多任务的过程,能够有效地发挥交换式任务的运作效率。类似的,由于一个任务里面也有瓶颈的地方,为了把瓶颈的地方抠出来,让它不影响整体效果,引入线程概念,各自为政,充分发挥各自效能;然而为了让各自协调执行,必须管理各个线程;概念引入只是其一,如何管理是其二(宝马车快,必须有好的刹车作保障)。

2、切换机制

需要任务切换时,就必须尽快切换(虽然由于优先级问题,仍然是本任务,但仍需相应一下);而一些处理器提供的中断机制就刚好满足这个需求,从而奠定了切换的基础。中断分为软中断和硬中断。所谓的软中断就是可有程序自身触发的中断(例如,SWI);而硬中断则是硬件本身检测到中断触发信号而强制触发中断。众所周知,任务就是一个个死循环,没有切换则一直执行程序。而切换又分为两类:自身切换(类似于自废武功)和强制切换(类似于暴力实施)。任务的自身切换是由程序自身触发的,从而使用软中断;强制切换则是达到允许执行时间后,而由硬件强制切换的,从而使用硬中断。
任务的自身切换则是因为任务本身知道自身在等待某个消息,而不想让CPU在自己身上空运行而触发中断;从而任务切换程序里面 OS_Sched() 就是调用的软中断OS_TASK_SW();
任务的强制切换则是因为任务本身的运行寿命到达限制,CPU强制切换到别的任务,让其他任务有执行的机会。从而负责强制切换的为定时器中断( interrupt  66 void OSTickISR(void)),其内部调用函数(void  OSTimeTick (void))便负责任务切换的具体事务。
然而,不管软中断也好硬中断也罢,它们只是手段;最根本的就是任务堆栈的切换(改变SP的指向)。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值