TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2642R: TI RTOS两任务间通过事件同步问题

Part Number:CC2642R

我在程序中,建立了任务A和任务B,这两任务间通过事件触发/传递信息,现在遇到一个不解之迷,请指教。程序如下:

#define A_EVT_K    Event_Id_00  
#define A_ALL_EVENTS        ( A_EVT_K )
Event_Handle ATskEvtHandle;

static void A_taskFxn(UArg a0, UArg a1)  
{
     Event_Params AEvtParams;     Event_Params_init(&AEvtParams);
     Event_construct(&ATskEvtStruct, &AEvtParams);   
     ATskEvtHandle = Event_handle(&ATskEvtStruct);
     for (;;)   
     {
            uint32_t events;
            events = Event_pend(ATskEvtHandle, Event_Id_NONE, A_ALL_EVENTS,ICALL_TIMEOUT_FOREVER);
            if(events)
            {
                     if(events&A_EVT_K)
                     {
                              打印A语句;
                     }
            }
      }
}

//以下是task B里调用的函数
void BCallBack(uint8_t value)
{
           RealTimeValu= value;
          Event_post(ATskEvtHandle,A_EVT_K);

           打印B语句
}

问题描述:如果A、B两任务优先级相同或B优先级高于A,只打印B语句,不能打印出A语句。如果A任务优先级高于B,只打印A语句,不能打印B语句。

但是如果把任务B里调用的这个函数,放到任务A中定时调用,却可以实现事件正确传递(A、B语句都能打印出来)

不知道什么原因,请帮忙分析解答一下,谢谢

Kevin Qiu1:

我需要检查一下,预计下午回复

,

Kevin Qiu1:

参考下面event的使用示例:

https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_Bluetooth_synchronization.html

另外可以使用链接中的工具监控任务运行状态:

https://dev.ti.com/tirex/content/simplelink_academy_cc13xx_cc26xxsdk_5_40_00_00/modules/rtos/tirtos_basics/tirtos_basics.html

,

Janet xu:

可是这个例子,是从软件中断里(优先级更高)把事件传给任务A。我从中断里传事件给任务A也是完全可以的。现在问题是,用户自己创建了两个任务(比如公司里两个人开发同一个项目),这两任务之间,用事件传递信息不理想

,

Janet xu:

是不是两个任务之间进行事件同步,只能是Event_post;放在高优先级的任务里,Event_pend放在低优先级里?谢谢

,

Kevin Qiu1:

不是优先级的问题,是只有单个任务可以挂起在 Event 对象上:

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1012853/cc1310-ti-rtos-event

赞(0)
未经允许不得转载:TI中文支持网 » CC2642R: TI RTOS两任务间通过事件同步问题
分享到: 更多 (0)