追梦人
分类: LINUX
2010-01-23 17:49:22
1.任务状态
一个任务通常是一个无限的循环。一个任务看起来像其它的C函数一样,有函数返回类型,任务返回类型必须定义为void型,有形式参数变量,但是任务是绝不会返回的。任务可以在一次执行完毕之后被删除,并不是任务代码被删除,只是内核不会再理会该任务的代码,该任务再也不能运行了。
RTOS内核控制下的任务状态装换上,在任一给定时刻,任务状态一定是在这六种状态之一。
僵死状态(OS_STAT_DORMANT)指任务驻留在程序空间中,还没有交给RTOS管理,把任务交给RTOS管理通过函数taskStart()来实现,任务一旦被创建就处于僵死状态,通过taskStart()使任务进入就绪态。任何任务的创建可以是多任务运行之前,也可以使动态地被一个运行着的任务建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。一个任务可以通过taskDelete()返回到僵死状态,也可以通过调用该函数使另一个任务进入僵死状态。
正在运行的任务可以通过调用函数taskSleep()使自身主动放弃CPU控制权,休眠一段时间,这个任务进入睡眠态,等待这段时间过去,下一个优先级最高的就绪态任务立即获得CPU的控制权。等待的时间过去以后,系统服务函数OSTimeTick()使处于睡眠状态的任务进入就绪态。
正在运行的任务等待某一事件时要等待,当任务因等待事件被阻塞,下一个优先级最高的任务立即得到CPU的控制权。当事件发生了,被挂起的任务进入就绪态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。
正在运行的任务是可以被中断的,除非该任务将中断关了,或者RTOS将中断关了。被中断了的任务就进入了中断服务态(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,RTOS要判定,被中断的任务是否还是就绪态任务中优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行,否则原来被中断了的任务才能继续运行。
连载中