您现在的位置: 主页 > 嵌入式操作系统 > UC/OS ii > ucos ii的任务在何时切换
本文所属标签:
#ucos#   
为本文创立个标签吧:

ucos ii的任务在何时切换

来源: 网络用户发布,如有版权联系网管删除 2016-06-06 

ucos ii的任务在何时切换 标签: ucosii cotex-m3 stm32学习 初学操作系统 it
刚才在做实验的时候,发现:当有一个任务没有进入延时的时候,这个任务就会一直执行不会挂起。就算有高优先级的任务已经准备好了,得等低优先级的任务执行完,或处于就绪态的时候,才能响应高优先级的的任务。所以任务里必须要有ucos ii系统里的延时函数,否则,没有延时函数的某优先级的任务会一直执行。
有人会想到,不用ucos ii系统里的延时函数可不可以?例如用:
x=65530;
while(x--);
这种延时的方法。
这个,虽然有延时的效果,但系统默认为语句的执行而已,并不能使该任务在进入延时的时间里释放CPU的控制权。
大家都知道,进入延时的时候,该任务并没有对任何的外设进行控制,所以延时对于CPU来说是浪费资源,但在延时的时候能让CPU去执行其它的任务或做其它的操作,那就能达到高效利用CPU的资源。当该任务的延时时间到的时候,该任务就会处于就绪态,这样就由任务的高低决定是否马上返回到该任务来。
所以,想执行多个任务的时候,就必须利用系统里的延时函数,否则多个任务就变得无意义了。
但有一种情况比较特殊,当在一个任务里创建另一个任务时(不管被创建的任务的优先级怎样),系统会将当前任务挂起,执行被创建的任务,当被创建的任务因为被阻塞或延时被挂起时,才会跳回当前的任务继续执行。所以当一个任务处于就绪态时,执行它的情况,目前本人碰到两种情况:
1、它并不在正在执行的低优先级的任务里创建,所以只有当它是处于就绪态的最高优先级的任务时,低优先级的任务被挂起后,才被执行。
2、任务A被任务B创建时,系统会马上挂起任务B,转而去执行任务A,只有当任务A被阻塞或延时被挂起时,系统将会执行处于就绪列表里的最高优先级的任务。
如果当前任务利用OSMutexPend(mutex,0,&err)函数申请互斥信号量时,如果该互斥信号量被占用;那么系统将会把当前任务挂起,然后执行最高优先级的任务。
注意:当高优先级的任务挂起的时间不够时,处于就绪态的低优先级的任务将得不到CPU的使用权,可能被创建后,就一直在就绪列表时,但不能被执行。


              查看评论 回复

游客   2018-08-26 20:57:42
多任务系统中一般不管这个任务什么时候切换的,当自己不用时要用sleep把实际片段给让出来
1楼 回复本楼


嵌入式交流网主页 > 嵌入式操作系统 > UC/OS ii > ucos ii的任务在何时切换
 

"ucos ii的任务在何时切换"的相关文章

网站地图

围观()