《第2章--Contiki操作系统课件.ppt》由会员分享,可在线阅读,更多相关《第2章--Contiki操作系统课件.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2章 Contiki操作系统第第2章章 Contiki操作系统操作系统2.1 概述概述2.2 特点特点2.3 安装安装2.4 Contiki目录结构目录结构2.5 Contiki操作系统运行原理操作系统运行原理2.6 Cooja仿真工具举例仿真工具举例第2章 Contiki操作系统2.1 概述概述第2章 Contiki操作系统Contiki操作系统是一个开源的、高度可移植的多任务操作系统,适用于互联网嵌入式系统和无线传感器网络,完全采用C语言开发,可移植性好,对硬件要求极低,能够运行在各种类型的微处理器及电脑上。Contiki是开源操作系统,适用于BSD协议,即可以任意修改和发布,无需任何版
2、权费用,因此已经应用在许多项目中。Contiki操作系统还提供了可选的任务抢占机制,基于事件和消息传递的进程间通信机制。Contiki操作系统内部集成了两种类型的无线传感器网络协议栈:uIP和Rime。第2章 Contiki操作系统2.2 特特 点点第2章 Contiki操作系统Contiki操作系统因具有以下特点而适合于无线传感器网络。1事件驱动(Event-driven)的多任务内核Contiki操作系统基于事件驱动模型,即多个任务共享同一个栈(stack),而uCOS、FreeRTOS、Linux等系统则是每个任务分别占用独立栈。2低功耗无线传感器网络协议栈Contiki操作系统提供完整
3、的IP网络和低功耗无线网络协议栈,对于IP协议栈,支持IPv4和 IPv6两个版本,IPv6还包括6LoWPAN帧头压缩适配器,ROLL RPL无线网络组网路由协议、CoRE/CoAP应用层协议,还包括一些简化的Web工具,如Telnet、Http和Web服务等。3集成无线传感器网络仿真工具Contiki操作系统提供了无线传感器网络仿真工具Cooja,可以在该仿真环境下研究无线传感器网络协议。仿真测试后,下载协议程序到节点上进行实际测试,有利于发现问题,减少调试工作量。4集成Shell命令行调试工具无线传感器网络中节点数量多,节点的运行维护是一个难题,Contiki操作系统提供多种交互方式。基
4、于文本的命令行接口是类似于Unix命令行的Shell工具,用户通过串口输入命令可以查看和配置传感器节点的信息,控制其运行状态,是部署、维护中实用而有效的工具。第2章 Contiki操作系统5基于Flash的小型文件系统CFSContiki操作系统实现了一个简单、小巧和易于使用的文件系统,称为Coffee File System(CFS),它是基于Flash的文件系统,用于在资源受限的节点上存储数据和程序。6集成功耗分析工具Contiki操作系统提供了一种基于软件的能量分析工具,能够自动记录每个传感器节点的工作状态、时间,并计算出能量消耗,在不需要额外硬件或仪器的情况下完成对网络级别的能耗分析。
5、Contiki操作系统的能耗分析机制既可用于评价传感器网络协议,也可用于估算传感器网络的生命周期。7开源免费Contiki操作系统采用BSD授权协议,用户可以下载代码用于科研和商业用途,并且可以任意修改代码,无需任何专利以及版权费用,是彻底的开源软件。尽管是开源软件,但是Contiki操作系统的开发十分活跃,一直在持续不断的更新和改进之中。第2章 Contiki操作系统2.3 安安 装装第2章 Contiki操作系统目前,Contiki操作系统开发小组将Contiki源码托管到github中。为了方便开发,我们需要将Contiki操作系统的源码部署到本地。Cotniki源码默认环境为Linux
6、操作系统,本节还将介绍在Windows系统下的环境部署。2.3.2 Windows系统下Contiki安装Windows操作系统是目前使用最广泛,也是人们最熟悉的操作系统之一。将Contiki部署在Windows系统下将大大减小Contiki开发的难度。本小节将介绍如何在Windows下使用IAR for 8051集成开发工具配置部署Contiki操作系统开发环境。第2章 Contiki操作系统2.3.3 Cooja仿真工具Cooja是无线传感器网络仿真工具,能够在电脑上进行协议仿真,进入/cooja目录即可启动Cooja。首次启动Cooja时,需要安装相应的软件,按照提示进行安装,安装完成后
7、重新运行命令即可。第2章 Contiki操作系统2.4 Contiki目录结构目录结构第2章 Contiki操作系统Contiki安装完成以后,用资源管理器打开contiki的目录,可以看到Contiki操作系统源码的目录结构。1core文件夹core文件夹是Contiki操作系统的核心代码目录,包含了Contiki中与硬件无关的代码、网络协议栈、硬件驱动程序的头文件等。第2章 Contiki操作系统1)sys文件夹sys文件夹包含Contiki操作系统内核的所有代码,用于实现任务调度、事件驱动、定时器等相关功能,是操作系统的核心文件。2)net文件夹net文件夹包含了一系列的文件,以及 ma
8、c、rime、rpl三个子目录,是Contiki中与网络协议相关的代码,包括IPv4、IPv6、6Lowpan、RPL等基于IP的网络层代码,以及MAC层协议。此外,Contiki还包含了rime协议栈。第2章 Contiki操作系统3)cfs文件夹cfs文件夹是coffe file system的缩写,是Contiki上的一个小型的基于Flash存储器的文件系统。4)ctk文件夹ctk文件夹是The Contiki Toolkit的简写,该目录中的代码为Contiki操作系统提供图形化的操作界面。5)dev文件夹dev文件夹包含了Contiki操作系统中一些常用的驱动程序的头文件定义,以及驱
9、动程序中与硬件无关的代码,用户移植Contiki时根据这些头文件定义的api函数编写驱动程序。6)lib文件夹lib文件夹包含了Contiki操作系统以及其他程序用到的一些常用库函数。7)loader文件夹loader是一个小型动态加载模块,它允许用户在需要的时候动态加载应用程序,从而提高灵活性。8)头文件头文件contiki.h包含Contiki相关的所有头文件,contiki-lib.h包含了常用库的头文件,contiki-net.h包含了net 相关的头文件,contiki-verson.h包含了当前Contiki的版本号字符串。第2章 Contiki操作系统2cpu文件夹cpu文件夹包
10、含了与微控制器移植相关的代码,包括寄存器定义、Contiki内核与硬件相关的代码(如时钟、定时器等)、微控制器的驱动程序。3platform文件夹platform文件夹包含与电路板相关的移植代码和驱动。电路板中包含核心微控制器,还包括各类外围通信器件、传感器器件。4apps文件夹apps文件夹包含了许多Contiki操作系统上的应用程序。5tools文件夹tools文件夹包含调试、开发、下载等相关的各类程序。6examples文件夹examples文件夹包含了许多Contiki编程示例代码,用户编程时可以参照这些程序,或者直接在这些代码中进行修改。7regression-tests文件夹reg
11、ression-tests文件夹包含了多个在Cooja下进行仿真模拟的项目示例。第2章 Contiki操作系统2.5 Contiki操作系统运行原理操作系统运行原理第2章 Contiki操作系统Contiki操作系统是基于事件驱动的,系统的运行过程可以理解为不断处理事件的过程。Contiki操作系统整个运行通过事件触发完成,一个事件绑定相应的进程。系统启动以后,首先执行main()函数,进行硬件初始化,接着初始化进程,然后启动系统进程和指定的自启动进程,最后,函数process_run()进入处理事件的死循环,首先遍历执行完所有高优先级的进程,然后转去处理事件队列中的事件,处理该事件之后,需先
12、满足高优先级进程才能转去处理下一个事件。第2章 Contiki操作系统2.5.1 ProtothreadContiki操作系统使用Protothread轻量级线程模型,即所有进程共用一个栈。当进程数量很多的时候,由栈空间省下来的内存是相当可观的。为了保存断点,Protothreads用一个2字节静态变量存储被中断行,下一次该进程获得执行权时,进入函数体后通过switch语句跳转到上一次被中断的地方。1保存断点Contiki操作系统保存断点是通过保存行数来完成的,在被中断的地方插入编译器关键字_LINE_,编译器便自动记录所中断的行数。宏LC_SET包含语句case_LINE_,用于下次恢复断点
13、,即下次通过 switch 语言便可跳转到case的下一条语句。2恢复断点被中断程序再次获得执行权时,便从该进程的函数执行体调用,按照Contiki操作系统的编程规则替换,函数体的第一条语句便是PROCESS_BEGIN宏,该宏包含一条switch语句,用于跳转到上一次被中断的行,从而恢复执行。2.5.2 进程控制块Contiki操作系统用一个结构体来描述整个进程的细节,使用链表将系统的所有进程组织起来。第2章 Contiki操作系统Contiki操作系统定义了一个全局变量process_list作为进程链表的表头,还定义了一个全局变量process_current用于指向当前进程。成员变量
14、next指向下一个进程,最后一个进程的next指向NULL。1成员变量thread进程的执行体,即进程执行实际上是运行该函数。2成员变量ptContiki操作系统进程是基于线程模型Protothreads的,所以进程控制块需要一个变量来记录被中断的行数。第2章 Contiki操作系统2.5.3 进程调度Contiki操作系统只有两种优先级,由进程控制块中的变量needspoll标识,默认值是0,即普通优先级。要想将某个进程设为更高优先级,可以在创建之初指定needspoll为1,或者运行过程中通过设置该变量从而动态提升其优先级。在实际的调度中,优先运行最高优先级的进程,而后再去处理一个事件,随
15、后再运行所有高优先级的进程。创建进程(还未投入运行)以及进程退出(此时进程还没从进程链表中删除)时,进程状态都为PROCESS_STATE_NONE。第2章 Contiki操作系统1进程初始化系统启动后需要先将进程初始化,通常在主函数main()中调用函数process_init(),进程初始化主要完成事件队列和进程链表初始化,将进程链表头指向NULL,当前进程也设为NULL。2创建进程创建进程实际上是定义一个进程控制块和进程执行体的函数,PROCESS宏实际上声明了一个函数并定义了一个进程控制块,新创建的进程next指针指向NULL,进程名称为Hello world,进程执行体函数指针为pr
16、ocess_thread_hello_world_process,保存行数的pt为0,状态为0,优先级标记位needspoll也为0。PROCESS定义了结构体并声明了函数,还需要实现该函数,通过宏 PROCESS_THREAD来实现。宏PROCESS_BEGIN包含switch(process_pt-lc)语句,这样被中断的进程将再次获得执行并可通过 switch 语句跳转到相应的case,即被中断的行。3启动进程函数process_start()用于启动一个进程,首先判断该进程是否已经在进程链表中,然后将进程加到链表,给该进程发一个初始化事件PROCESS_EVENT_INIT。第2章 C
17、ontiki操作系统函数process_start()将进程状态设为PROCESS_STATE_RUNNING,并调用PT_INIT宏将保存断点的变量设置为0,调用process_post_synch给进程触发一个同步事件。进程运行由call_process()函数实现,call_process()函数首先进行参数验证,即进程处于运行状态并且进程的函数体不为NULL,接着将进程状态设为PROCESS_STATE_CALLED,表示该进程拥有执行权。接下来,运行进程函数体,根据返回值判断进程是否结束或者退出,若是则调用exit_process()将退出进程,否则将进程状态设为PROCESS_ST
18、ATE_RUNNING,继续放在进程链表。4进程退出进程运行完成或者收到退出的事件都会导致进程退出。第2章 Contiki操作系统2.5.4 事件调度Contiki操作系统将事件调度机制融入到线程Protothreads机制中,每个事件绑定一个进程(广播事件例外),进程间的消息传递也是通过事件来传递的。Contiki操作系统用无符号字符来标识事件,它定义了10个事件(0 x800 x8A),其他的供用户使用。Contiki操作系统用一个全局的静态数组存放事件,通过数组下标可以快速访问事件。系统还定义了另外两个全局静态变量nevents和fevent,分别用于记录未处理事件的总数和下一个待处理的
19、位置。第2章 Contiki操作系统2事件调度Contiki操作系统中的事件没有优先级,采用先到先服务策略,每一次系统轮询(process_run函数)只处理一个事件。do_event()函数用于处理事件,首先取出该事件,更新总的未处理事件总数及下一个待处理事件的数组下标。然后判断事件是否为广播事件,若是,先运行高优先级的进程,然后再调用call_process()函数去处理事件。3事件处理实际的事件处理是在进程的函数体thread中进行的,call_process()函数会调用thread()函数执行该进程。第2章 Contiki操作系统2.5.5 定时器Contiki操作系统提供了5 种定
20、时器模型。(1)timer:描述一段时间,以系统时钟嘀嗒数为单位;(2)stimer:描述一段时间,以秒为单位;(3)ctime:定时器到期,调用某函数,用于Rime协议栈;(4)etime:定时器到期,触发一个事件;(5)rtimer:实时定时器,在一个精确的时间调用函数。下面简单介绍etimer的相关细节,其他定时器模型与此类似。1etimer组织结构etimer作为一类特殊事件存在,与进程绑定。2添加etimeretimer调用etimer_set函数将etimer添加到timerlist中。etimer_set首先设置etimer成员变量timer的值,然后调用add_timer()函
21、数,以便定时器时间到了可以得到更快的响应。第2章 Contiki操作系统3etimer管理Contiki操作系统用一个系统进程etimer_process管理所有的etimer定时器。第2章 Contiki操作系统2.6 Cooja仿真工具举例仿真工具举例第2章 Contiki操作系统(1)启动Cooja(2)新建仿真第2章 Contiki操作系统(3)单击命令按钮“Create”,打开Contiki操作系统的网络仿真器窗口(4)在网络中创建传感器节点(5)编译节点上加载的源程序第2章 Contiki操作系统(6)如果编译出现错误则需修改源程序,否则单击命令按钮“Create”建立发送节点。(7)利用同样的方法,再建立网络中的第二个节点,其上加载的程序为单播接收程序第2章 Contiki操作系统(8)在“Simulation control”窗口中单击命令按钮“Start”开启仿真过程。(9)仿真结束后可在文件菜单中保存仿真脚本文件,以便以后使用。