新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式操作系统任务切换方法对比分析

嵌入式操作系统任务切换方法对比分析

作者:时间:2011-07-29来源:网络收藏

2.2 与调度
μC/OS-II是可抢占实时多内核,它总是运行优先级最高的就绪,不支持时间片轮转调度法,每个任务的优先级要求不一样,且是唯一的。它有5种状态,如图2所示。

本文引用地址:http://www.eepw.com.cn/article/150419.htm

b.JPG


当一个任务在运行状态中时,如果没有关闭中断,就有可能被中断打断,去执行中断服务子程序ISR。执行完后内核要判断此时是否有更高优先级,新的任务就绪,如果有则原有的任务被抢占,实现了任务的
当一个任务在运行状态中时,调用OSTimeDly()或OSTimeDlyHMSM()函数,该任务进入等待状态,一直到延时时间到,这2个函数立即强制执行任务,让下一个优先级最高的就绪任务运行。当然,如果运行的任务需要等待某一事件的发生,可以调用一些函数(如OSFlag Pend()、OSSemPend()、OSMutexPend()、OSMboxPend()、OSQPrnd()等)挂起该任务,来实现任务的切换。
实际的任务切换是调用OS_TASK_SW()函数。OS_TASK_SW()是一个宏,是在μC/OS-II从低优先级切换到高优先级任务时须用到的。OS_TA-SK_SW()总是在任务级代码中被调用。另一个函数OSIntExit()用在中断服务子程序ISR中。当中断任务子程序使更高优先级任务进入就绪态时,OSintExit()完成任务切换功能,任务切换只是简单地将处理器的寄存器保存到将被挂起的任务的堆栈中,并且从堆栈中恢复要运行的更高优先级的任务。
c.JPG
μC/OS-II总是运行进入就绪态任务中优先级最高的任务,确定哪个任务优先级最高,以及下面该哪个任务运行。这一工作是由调度器完成的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。该工作由函数OSSched()完成。中断级的调度由OS-intExt()完成。代码如下:
d.JPG

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭