《嵌入式物联网应用技术实践教程》_第 10 章 Contiki 开发基础.pptVIP

  • 0
  • 0
  • 约1.94万字
  • 约 59页
  • 2026-02-13 发布于广东
  • 举报

《嵌入式物联网应用技术实践教程》_第 10 章 Contiki 开发基础.ppt

10.3Contiki的主要数据结构#definePROCESS_BROADCASTNULL//广播进程/*保存待处理事件的成员变量*/ev=events[fevent].ev;data=events[fevent].data;receiver=events[fevent].p;if(receiver==PROCESS_BROADCAST){for(p=process_list;p!=NULL;p=p-next){if(poll_requested)do_poll();call_process(p,ev,data);}}上一页下一页返回10.3Contiki的主要数据结构10.3.3数据结构之etimer在Contiki中,Contiki有一个clock模块和一系列timer模块:timer、stimer、ctimer、etimer和rtimer。clock模块提供一些处理系统时间的函数,还有一些用来阻塞CPU的函数。timer模块的实现以clock模块为基础。timer和stimer提供最简单的形式来判断一段时间是否到期。timer使用clocktick来判断。stimer使用秒来判断,可以判断更长的时间间隔。timer和stimer可以使用在中断中。etimer用于在一段时间后向Contikiprocesses发送event。etimer可使Contikiprocesses在等待一段时间的同时,可以继续做其他的工作,或者进入低功耗模式。上一页下一页返回10.3Contiki的主要数据结构1.etimer结构体etimer提供一种timer机制以产生timedevents,可以理解成etimer是Contiki的一种特殊事件。当etimer到期时,会给相应的进程传递事件PROCESS_EVENT_TIMER,从而使该进程启动。etimer结构体源码如下:structetimer{structtimertimer;structetimer*next;structprocess*p;};structtimer{clock_time_tstart;clock_time_tinterval;};typedefunsignedintclock_time_t;timer仅包含起始时刻和间隔时间,所以timer只记录到期时间。其通过比较到期时间和新的当前时钟,从而判断该定时器是不是到期。上一页下一页返回10.3Contiki的主要数据结构2.timerlist全局静态变量timerlist指向系统第一个etimer,timerlist如图10-3所示。staticstructetimer*timerlist;10.3.4进程、事件、etimer关系进程process、事件event_data、etimer都是Contiki的核心数据结构,理清这三者的关系有助于对系统的理解。1.事件与etimer的关系事件可以分为同步事件、异步事件,也可以分为定时器事件、内部事件、外部事件。etimer属于定时器事件的一种,可以理解成Contiki系统把etimer单列出来,以方便管理(由etimer_process系统进程管理)。上一页下一页返回10.3Contiki的主要数据结构2.进程与etimer的关系etimer与process还不是一一对应的关系,一个etimer必定绑定一个process,但process不一定非得绑定etimer。etimer只是一种特殊事件。3.进程与事件的关系当有事件传递给进程时,就新建一个事件加入事件队列,并绑定该进程,所以一个进程可以对应于多个事件(即事件队列有多个事件跟同一个进程绑定),而一个事件可以广播给所有进程,即该事件成员变量p指向空。当调用do_event()函数时,将进程链表的所有进程投入运行。上一页返回10.4启动一个进程process_startprocess_start()函数用于启动一个进程,将进程加入进程链表(事先验证参数,确保进程不在进程链表中),初始化进程(将进程状态设为运行状态及将lc设为0),给进程传递一个PROCESS_EVENT_INIT事件,让其开始执行(事先参数验证,确保进程已被设为运行态并且进程的函数指针thread不为空),事实上是执行进程结构体中的thread函数指针所指的函数,而这恰恰

文档评论(0)

1亿VIP精品文档

相关文档