查看: 650|回复: 2

[原创DIY] ucosii 关于同时等待多个事件的问题

[复制链接]

2

主题

0

好友

159

积分

童生

Rank: 2

  • TA的每日心情
    难过
    2014-7-18 13:21
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2014-5-29 10:44:03 |显示全部楼层
    想在一个任务里同时等待多个事件,每个事件过来会根据不同的触发事件执行不同的功能  这个用信号量该怎么实现呢?
    回复

    使用道具 举报

    93

    主题

    18

    好友

    9623

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    2015-6-30 10:20
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    论坛版主职务勋章 爱板会员勋章 活跃会员勋章 发帖机器勋章

    发表于 2014-5-29 11:12:31 |显示全部楼层
    这个问题很好
    常规的解决方法就是事件标志组管理
    在《嵌入式实时操作系统μCOS原理与实践第二版》的137页开始是事件标志组管理的内容
    例如一个任务A,要等待4个事件全部发生才就绪
    就可以使用事件标志组


            os_err = OSTaskCreate((void (*)(void *)) App_TaskPrio5,  /* 任务                              */
                              (void          * ) 0,
                              (OS_STK        * )&App_TaskPrio5Stk[APP_TASK_STK_SIZE],
                              (INT8U           ) 5);

    static  void  App_TaskPrio5(void *p_arg)        //¸ßÓÅÏȼ¶ÈÎÎñ£¬ÓÅÏȼ¶5
    {


            INT8U  os_err;
            processflag=0x0F; //标志为 00001111
        while(1)
            {   
                    printf("时间:%d开始请求事件标志\r\n",OSTimeGet());

                    OSFlagPend (pFlagGroupDataProcess,
                          processflag,                                 //00001111
                          OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,  //要求4个事件全部发生
                          0,
                          &os_err);  
                    printf("事件发生",OSTimeGet());
                    处理事件的代码
            }       
    }
    中断服务程序中提交事件
    例如收到AA,设置标志位0
                BB                    1
                CC                    2
                DD                   3
    那么AA BB CC DD全部都收到了,任务就就绪了
    oid USART1_IRQHandler(void)        //´®¿Ú1ÖжϷþÎñ³ÌÐò
    {
            u8 Res,perr;
            OSIntEnter();
            if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
            {
                           
                    Res =(uint16_t)(USART1->DR & (uint16_t)0x01FF);
                    switch(Res){
                    case 0xAA:
                       OSIntEnter();
                       LcdPrintf(10,line,BLUE,WHITE,"ʱ¼ä:%d,»ñµÄÁËAA£¡",OSTimeGet());
                       lineadd;

                       OSFlagPost (pFlagGroupDataProcess,
                          0x01,
                          OS_FLAG_SET,
                         &perr);
                       OSIntExit();
                       break;
                    case 0xBB:
                       OSIntEnter();
                                       LcdPrintf(10,line,BLUE,WHITE,"ʱ¼ä:%d£¬¶àµÄÁËBB£¡",OSTimeGet());
                       lineadd;
                       OSFlagPost (pFlagGroupDataProcess,
                          0x02,
                          OS_FLAG_SET,
                         &perr);
                       OSIntExit();                
                       break;
                    case 0xCC:

                                       LcdPrintf(10,line,BLUE,WHITE,"ʱ¼ä:%d£¬¶àµÄÁËCC£¡",OSTimeGet());
                       lineadd;
                       OSFlagPost (pFlagGroupDataProcess,
                          0x04,
                          OS_FLAG_SET,
                         &perr);
                       OSIntExit();                
                       break;
                    case 0xDD:
                       OSIntEnter();
                       LcdPrintf(10,line,BLUE,WHITE,"ʱ¼ä:%d£¬¶àµÄÁËDD£¡",OSTimeGet());
                       lineadd;
                       OSFlagPost (pFlagGroupDataProcess,
                          0x08,
                          OS_FLAG_SET,
                         &perr);
                       OSIntExit();                
                       break;
                    default:
                       ;               
                    }                       
            }       


    国际著名屌丝,嵌入式系统书籍作者,亮点嵌入式创始人
    博客:亮点新浪博客
    淘:brightpoint.taobao.com
    回复

    使用道具 举报

    97

    主题

    9

    好友

    4266

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    2015-11-30 08:37
  • 签到天数: 220 天

    [LV.7]常住居民III

    发表于 2014-5-29 13:46:52 |显示全部楼层
    帮项         
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-3 21:53 , Processed in 0.196537 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部