在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;
}转载 |