本文介绍了Contiki系统怎么产生新事件,以及怎样处理事件。

1. 事件加入及处理

理解以下内容,先注意下如下两个全局静态变量:

static process_num_events_t nevents; /*未处理的事件总数*/
static process_num_events_t fevent;  /*标识下一个要传递的事件的位置,事实上是数组的下标*/

typedef unsigned char process_num_events_t;

2. 新事件产生

将事件加入到事件队列主要由process_post()函数完成,详情见博文《系统进程etimer_process》2.3节,代码精简后如下:

static process_num_events_t snum;
snum = (process_num_events_t)(fevent + nevents) % PROCESS_CONF_NUMEVENTS;
events[snum].ev = ev;
events[snum].data = data;
events[snum].p = p;
++nevents;

3. 处理事件

事件处理由do_event()函数完成,do_event()把下一个事件 (fevent指向的事件)从事件队列里取出来,然后传递给其对应的监听进程。把fevent往前移一位置(即++),把nevents减1。详情见博文《深入理解process_run函数》2.2节。

本文系Spark & Shine原创,转载需注明出处本文最近一次修改时间 2022-03-20 20:42

results matching ""

    No results matching ""