查看: 1194|回复: 0
打印 上一主题 下一主题

新手求教,关于Z-STACK的OSAL层中的事件捕获

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-27 18:22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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;
  }转载
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表