回答

收藏

ucos查询某任务的当前状态

#开源分享 #开源分享 3424 人阅读 | 0 人回复 | 2014-11-11

本帖最后由 gongyuan073 于 2014-11-11 09:21 编辑

在实际使用ucos过程中总有需要查询某一任务当前状态的情况, 例如若要将某任务休眠最好先检测是否已经被休眠等. 这里贴出一个自己写的一个方法不知道适合不适合希望大家提提意见:
  1. /**********************************************************************************************************
  2. * func        :         OSTaskChk
  3. * desc        :通过任一任务的优先级来查询该任务当前的状态
  4. * input        : 任务的优先级
  5. * note: 该方法尽量不要对创建mutex的任务使用
  6. * return:
  7.         OS_ERR_PRIO                                        Task to query not exists
  8.         OS_ERR_TASK_NOT_EXIST                Task to query is assigned to a Mutex
  9.         OS_STAT_RDY                 Ready to run        
  10.         OS_STAT_SEM                                        Pending on semaphore
  11.         OS_STAT_MBOX                                Pending on mailbox
  12.         OS_STAT_Q                                        Pending on queue
  13.         OS_STAT_SUSPEND                                Task is suspended
  14.         OS_STAT_MUTEX                                Pending on mutual exclusion semaphore
  15.         OS_STAT_FLAG                                Pending on event flag group
  16.         OS_STAT_MULTI                                Pending on multiple events
  17.         OS_STAT_PEND_ANY                        (OS_STAT_SEM | OS_STAT_MBOX | OS_STAT_Q | OS_STAT_MUTEX | OS_STAT_FLAG)
  18. **********************************************************************************************************/
  19. INT8U OSTaskChk(INT8U prio)
  20. {
  21.         OS_TCB Task_tcb;
  22.         INT8U ret = 0;
  23.         
  24.         ret = OSTaskQuery(prio, &Task_tcb);
  25.         
  26.         if (ret == OS_ERR_PRIO)                         //Task to query not exists
  27.         {
  28.                 return OS_ERR_PRIO;
  29.         }
  30.         
  31.         if (ret == OS_ERR_TASK_NOT_EXIST)        //Task to query is assigned to a Mutex
  32.         {
  33.                 return OS_ERR_TASK_NOT_EXIST;
  34.         }
  35.                                        
  36.         return Task_tcb.OSTCBStat;                        //ret == OS_ERR_NONE        
  37. }
复制代码
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条