查看: 2898|回复: 0

ucos查询某任务的当前状态

[复制链接]
  • TA的每日心情
    奋斗
    2014-2-18 12:52
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-11-11 09:20:13 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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. }
    复制代码
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-25 10:12 , Processed in 0.119499 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.