Contiki是一个小型、开源、极易移植的多任务电脑操作系统。它专门设计以适用于一系列的内存受限的网络系统,包括从8位电脑到微型控制器的嵌入系统。它的名字来自于托尔·海尔达尔的康提基号。Contiki只需几千字节的代码和几百字节的内存就能提供多任务环境和内建TCP/IP支持。作为基础的内核以及大部分的核心功能是瑞典计算机科学研究所的网络内嵌系统小组的Adam Dunkels开发的。程序代码量只有几K,存储器的使用量也只有几十Kb。因为嵌入式系统资源有限,故而开发出Contiki OS来适应它,由于uIPv6协议栈的原因,所以占用了很小的系统资源,许多资源有限的网络和设备都可以使用它。Contiki OS 运行原理如下:
1、搭建开发环境
InstantContiki是官方基于Ubuntu配好的开发环境,具体做法是在http://sourceforge.net/projects/contiki/下载InstantContiki,直接在VMware Workstation虚拟机中打开即可。

安装和使用 VMware Workstation 虚拟机可以参照笔者这篇博客:手把手教你搭建Linux开发环境(VMware+Ubuntu)(一)——安装VMware虚拟机和Ubuntu
安装好虚拟机,打开 Contiki OS 开发环境, 进入开发环境的Password默认是user:
进入开发环境后界面如下:
因为 Contiki OS 是开源的,你可以安装 git 下载 Contiki OS 源码,源码地址:https://github.com/ljrcore/contiki
2、简单的编译举例
打开终端,进入contiki 开发的文件夹,可以看到如下目录:
- core目录下是Contiki的核心源代码,包括网络(net)、文件系统(cfs)、外部设备(dev)、链接库(lib)等等,并且包含了时钟、I/O、ELF装载器、网络驱动等的抽象。
- cpu目录下是Contiki目前支持的微处理器,例如arm、avr、msp430等等。如果需要支持新的微处理器,可以在这里添加相应的源代码。
- platform目录下是Contiki支持的硬件平台,例如mx231cc、micaz、sky、win32等等。Contiki的平台移植主要在这个目录下完成。这一部分的代码与相应的硬件平台相关。
- apps目录下是一些应用程序,例如ftp、shell、webserver等等,在项目程序开发过程中可以直接使用。使用这些应用程序的方式为,在项目的Makefile中,定义APPS = [应用程序名称]。在以后的示例中会具体看到如何使用apps。
- examples目录下是针对不同平台的示例程序。Smeshlink的示例程序也在其中。
- doc目录是Contiki帮助文档目录,对Contiki应用程序开发很有参考价值。使用前需要先用Doxygen进行编译。
- tools目录下是开发过程中常用的一些工具,例如CFS相关的makefsdata、网络相关的tunslip、模拟器cooja和mspsim等等。
其中 examples 文件夹中有许多官方的编程举例,我们来举例说明,找到hello_world这个例子,有如下文件:![]()
先看看hello-world.c:
//引用contiki的api
#include "contiki.h"
//标准设备输入输出库
#include <stdio.h> /* For printf() */
/*---------------------------------------------------------------------------*/
//声明进程
PROCESS(hello_world_process, "Hello world process");
//系统初始化的时候自动启动这个进程
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------------------------------*/
//hello_world进程实现
PROCESS_THREAD(hello_world_process, ev, data)
{
//进程开始
PROCESS_BEGIN();
//通过串口输出Hello,world
printf("Hello, world\n");
//进程结束
PROCESS_END();
}
Makefile 如下:
#添加定义的头文件
DEFINES+=PROJECT_CONF_H=\"project-conf.h\"
#项目的名称
CONTIKI_PROJECT = hello-world
#编译所有相关的项目
all: $(CONTIKI_PROJECT)
#定义目录变量
CONTIKI = ../../..
#引用编译规则
include $(CONTIKI)/Makefile.include
使用make命令进行编译,并生成了如下文件:

437

被折叠的 条评论
为什么被折叠?



