首页 > 技术文章 > 任务学习-ucos

itloverhpu 2013-06-21 13:59 原文

1.任务(task)也称作一个线程;

2.一个任务有5种状态:休眠,就绪,运行,挂起,被中断

    休眠:任务驻留在程序空间中,还没有交给ucos管理,把任务交给ucos 是通过调用OSTaskCreate()或OSTaskCreateExt()两个函数之一实现的。

            任务一旦确立将进入就绪状态。一个任务可通过调用OSTaskDel()返回到休眠状态,即被删除,或通过调用该函数让另外一个任务进入休眠状态。

    就绪:如果一个任务所等待的资源除CPU外已全部获得,则处于就绪状态。如果该任务的优先级最高,则马上执行。

    运行:任何时候只有一个在运行;正在运行的任务可能会因为等待某一个任务而进入等待状态,此时下一个优先级更高的进入了就绪状态被赋予了CPU

             的控制权,即任务级切换。

    挂起:即正在运行的任务需要等待某一事件或时间延迟的发生。当任务因等待事件被挂起时,下一个优先级更高的立即得到CPU的控制权。

            当其等待的事件发生了,该被挂起的任务重新进入就绪状态。事件发生的报告可能来自另一个任务,也可能来自中断服务子程序。

    被中断: 正在运行的任务可以被中断,除非该任务关闭中断,或ucos关闭中断。被中断了的任务即进入了中断服务状态。响应中断时,

              正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个时间的发生,而使一个

              或多个任务进入就绪状态。此时,中断服务子程序返回之前,ucos要判定被中断的任务是否还是就绪态任务中优先级最高的。

              如果更高的进入了就绪状态,则他会运行,否则原来的继续运行。 

3.任务操作函数集

4.任务的特点:每一个任务都是死循环,如下:

   void rs485CheckTask(void *pdata)

{
  uart1_init();
  commCmdInit();
  while(1){          
 //死循环
  cmdCheckPorc();
  OSTimeDlyHMSM(0,0,0,100);
    }
}

5.内核负责每个任务的调度    

推荐阅读