打印

ucos事件标志组的问题

[复制链接]
3072|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
溪孟|  楼主 | 2013-9-25 16:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ucos事件标志组的问题

关于ucos事件标志组的一个问题:可不可以在多个不同任务中对同一个事件标志组变量调用OSFlagPend啊?然后在一个任务中调用OSFlagPost满足上面所有等待的任务?,我用keil仿真不行啊?为什么呢?网上搜的都是一个任务Pend多个任务Post的情况?求解

就是下面运行完1的时候不是应该跳到task_2么?但是程序是继续向下执行2的。。。为什么啊?很纠结啊?如果不能多个任务Pend一个OS_FLAG_GRP变量,那要OS_FLAG_NODE干什么呢?求大神啊!

任务优先级0 《1 《2
static void task_0( void *p_arg )
{        
        INT8U err;
        INT8U newstatus;
//        OS_FLAGS flags;        

        for(;;)
        {
                newstatus = OSFlagPost( EngineStatus, 0x02, OS_FLAG_SET, &err );//这里 ,1
                newstatus = OSFlagPost( EngineStatus, 0x01, OS_FLAG_SET, &err );//2
        //        OSFlagDel( EngineStatus, OS_DEL_ALWAYS, &err );
//                 err = OSMboxPostOpt( CommMbox, (void *)&CommRxBuf[0], OS_POST_OPT_BROADCAST );

                OSTimeDly( 50 );
        }
        
}

static void task_1( void *p_arg )
{
        INT8U err;
        void *msg;
        INT8U newstatus;
//        OS_FLAGS value;
//        OS_FLAGS flags;

        for(;;)
        {        
                OSFlagPend( EngineStatus, 0x01, OS_FLAG_WAIT_SET_ANY, 50, &err );
               
               
               
        //        value = OSFlagAccept( EngineStatus, 0x01,OS_FLAG_WAIT_SET_ANY, &err );
        //        flags = OSFlagQuery( EngineStatus, &err );
               
        //        msg = OSMboxPend( CommMbox, 10, &err );
                        
                OSTimeDly( 50 );
        }
}

static void task_2( void *p_arg )
{        
        INT8U err;
        void *msg;

        for(;;)
        {
                OSFlagPend( EngineStatus, 0x02, OS_FLAG_WAIT_SET_ANY, 50, &err );
        //        msg = OSMboxPend( CommMbox, 10, &err );

                OSTimeDly( 50 );
        }        
}

相关帖子

沙发
ayb_ice| | 2013-9-26 14:41 | 只看该作者
使用没有限制,但只能有一个任务被激活。

典型的用法是:

某个事件发生就发送相应的标志1
某个事件发生就发送相应的标志2
可以是同一个任务也可以中多个任务
。。。


处理任务等待事件(1个事件或多个事件,可以是与逻辑,或者或逻辑),等到后即处理

使用特权

评论回复
板凳
lxp1413801| | 2013-9-30 17:21 | 只看该作者
有几个地方不解:1、为什么OSFlagPend( EngineStatus, 0x01, OS_FLAG_WAIT_SET_ANY, 50, &err );下面还有OSTimeDly( 50 );
2、flag清除在什么地方
可能的原因keil设置了优化,吧keil的优化去掉,在OSFlagPend下面加几个nop之类的代码用ulink跟踪一下看看,或者注意观察

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

6

帖子

0

粉丝