因仑“3+1”工程特种兵精英论坛

标题: 新手求教,关于Z-STACK的OSAL层中的事件捕获 [打印本页]

作者: 张衍波    时间: 2015-10-27 18:22
标题: 新手求教,关于Z-STACK的OSAL层中的事件捕获
在Z-STACK中有个系统抽象层,其中main函数中的代码如下

do {
      if (tasksEvents[idx])  // Task is highest priority that is ready.
      {
        break;
      }
    } while (++idx < tasksCnt);

    if (idx < tasksCnt)
    {
      uint16 events;
      halIntState_t intState;

      HAL_ENTER_CRITICAL_SECTION(intState);
      events = tasksEvents[idx];
      tasksEvents[idx] = 0;  // Clear the Events for this task.
      HAL_EXIT_CRITICAL_SECTION(intState);

      events = (tasksArr[idx])( idx, events );

      HAL_ENTER_CRITICAL_SECTION(intState);
      tasksEvents[idx] |= events;  // Add back unprocessed events to the current task.
      HAL_EXIT_CRITICAL_SECTION(intState);
    }

求教下高手,tasksEvents[idx]用于捕获事件,那么事件中是如何被捕获的?如果说捕获事件后,进入相关任务的处理函数,我还能兴许明白事件的捕获,在相关的处理函数中,osal_set_event( destination_task, SYS_EVENT_MSG ); 大多都调用了事件的捕获,并把tasksEvents这个指针的里面包含的内容加了标记位,也就是非0了。但是在初始化后,tasksEvents里面的内容清0,如果我要捕获一个事件,它又从哪里置位呢?求大神指导下。举个例子也行,网上的资料别贴,我看了大部分了。

{
        tasksEvents[task_id] |= event_flag;
  }转载




欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4