Contiki学习笔记:新事件产生及事件处理

5152阅读 0评论2011-10-27 Jelline
分类:嵌入式

摘要:

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


一、事件加入及处理

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

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

  3. typedef unsigned char process_num_events_t;

二、新事件产生

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

  1. static process_num_events_t snum;
  2. snum = (process_num_events_t)(fevent + nevents) % PROCESS_CONF_NUMEVENTS;
  3. events[snum].ev = ev;
  4. events[snum].data = data;
  5. events[snum].p = p;
  6. ++nevents;

三、 处理事件

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

上一篇:Contiki学习笔记:时钟中断处理程序Systick_isr
下一篇:Contiki学习笔记:protothread状态