查看: 2962|回复: 2

ucosii 关于同时等待多个事件的问题

[复制链接]
  • TA的每日心情
    难过
    2014-7-18 13:21
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

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

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [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:
                       ;               
                    }                       
            }       


    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.7]常住居民III

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

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 06:55 , Processed in 0.120031 second(s), 19 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.