笔者之前研究过一段时间 Contiki OS ,万事开头难,入门时会走不少弯路,现在将此过程分享出来。首先介绍一下 Contiki OS:

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

git 的用法,可以参考笔者的另一篇博客: Linux下如何快速使用GitHub

2、简单的编译举例

此过程需要一点Linux操作基础,还不会Linux命令的同学,可以参考笔者这篇博客:Linux初学者接住了—Linux常用命令

打开终端,进入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

此过程需要一点 vim 基础,不会的同学,可以参考笔者这篇博客: 手把手教你搭建Linux开发环境(VMware+Ubuntu)(三)——Ubuntu下vim编辑器的安装、配置和使用

//引用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,worldprintf("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命令进行编译,并生成了如下文件:

3、下载程序到开发板(以CC2538开发板为例)

上面生成的hello-world.bin文件可以下载到开发板上,下载方法有三种,分别是在Ubuntu下使用J-Link下载、在Ubuntu下使用串口下载和在Windows下使用J-Link下载:

方法一:Ubuntu下使用J-Link下载

(1)下载官方JLink-V8驱动,下载地址为:http://www.segger.com/j-link-older-versions.html,我下载的是“Software and documentation pack for Linux V4.84d, TGZ archive 32-bit version”,即JLink_Linux_v484e_i386.tgz
(2)在Ubuntu下解压,可以阅读README,按照步骤进行相关配置,执行命令如下:

sudo tar -zxvf JLink_Linux_v484e_i386.tgz

(3)复制解压后JLink_Linux_v484e_i386文件夹内的JLink.rulesetc目录下,执行命令如下:

cp 99-jlink.rules /etc/udev/rules.d/

(4)将库文件复制到/usr/lib目录下,执行命令如下:

cp libjlinkarm.so.* /usr/lib

(5)J-Link连接好cc2538模块后,运行可执行文件JLinkExe,然后进行相关配置,执行命令如下:

./JLinkExe
exec device=CC2538SF53 #不同开发板device不同
erase

(6)下载程序执行命令如下:

loadbin hello-world.bin,0x00200000

(7)退出下载时执行命令q退出即可。

此时重启或复位cc2538模块即可完成下载。

方法二:Ubuntu下使用串口下载

Ubuntu下使用串口下载时需要用到USB转串口模块,以下载bin文件到cc2538模块为例,PC和cc2538模块通过USB转串口模块连接好以后,Ubuntu下配置执行命令如下:

ls /dev/ttyUSB*
sudo chmod 777 /dev/ttyUSB0

打开开发板开关,进入bootloader模式,以下载hello-world.bin文件为例,执行以下命令:

make hello-world.upload

重启或复位cc2538模块即可完成下载。

方法三:Windows下使用J-Link下载

因为程序生成的bin文件在Ubuntu中,所以使用此方式下载需先将Ubuntu中的bin文件拷贝到共享文件夹中。

Ubuntu和windows共享文件的方法请参照笔者这篇博客:手把手教你搭建Linux开发环境(VMware+Ubuntu)(二)——安装VMwareTools并设置共享文件夹

Windows下使用J-Link下载的环境界面如下图:

J-Link环境配置方法如下:
(1)下载Windows版的J-Link驱动程序安装包,运行J-Link驱动程序安装包,一路NEXT;
(2)在Options菜单中选择Project Settings,General设置选择Connetion to J-Link 用USB连接模式;
(3)配置Target interface相关选项设置;
(4)CPU选项卡设置目标CPU的类型;
(5)设置完毕后在File菜单中选择Open data file,打开需要烧录的bin文件;
(6)PC和cc2538模块通过J-Link连接成功后,先擦除,后下载。

4、查看结果

将开发板与电脑连接,使用串口调试工具,即可看到实验现象。

Contiki OS 开发快速入门相关推荐

  1. Zephyr OS 开发极速入门

    Zephyr OS 开发极速入门 Zephyr OS简介 zephyr 开发环境搭建 更新软件源 安装依赖包 克隆zephyr代码仓库 安装必要的python3依赖工具 安装CMake 安装 zeph ...

  2. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  3. ​HealthKit开发快速入门教程之HealthKit数据的操作

    ​HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知 ...

  4. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  5. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为&qu ...

  6. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  7. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  8. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  9. Transform组件C#游戏开发快速入门

    orm组件C#游戏开发快速入门大学霸 Transform组件C#游戏开发快速入门 组件(Component)可以看作是一类属性的总称.而属性是指游戏对象上一切可设置.调节的选项,如图2-8所示.本文选 ...

最新文章

  1. hcg值小于0.1_电容的Q值
  2. WIN32 Inline HOOK
  3. 结婚率连7年下降,数据揭秘单身背后复杂逻辑
  4. oracle修改表字段
  5. 《嵌入式设备驱动开发精解》——导读
  6. 二维burgers方程_二维Burgers方程的RKDG有限元解法
  7. 20个响应式网页设计中的“神话”误区
  8. uniapp防抖操作
  9. php 类的属性与方法的注意事项
  10. 二叉树节点为某一值的路径
  11. JAVA中各种简写全称整理
  12. monty python读音-Monty Python
  13. [python]pytest实现WEB UI自动化
  14. 布谷鸟哈希函数的参数_布谷鸟算法详细讲解
  15. JAVA计算机毕设题目大全
  16. python实现虚拟键盘
  17. 计算机中的量子力学,从量子力学解读宇宙:我们也许存在于计算机虚拟的世界中!...
  18. 201771010112罗松《面向对象程序设计(java)》第一周学习总结
  19. 基于cesium的三维管线系统综述
  20. Linux下创建和删除用户

热门文章

  1. 解决DataList控件无缝滚动图片(转)
  2. 完成动态根据类别动态填充区域颜色
  3. MySQL 数据库命令
  4. [译] 写给大家看的 Cache-Control 指令配置
  5. 25行代码实现Promise函数
  6. JPA入门到精通 - JPA入门
  7. VM页面中遍历枚举类
  8. 影响数据库性能的因素
  9. python --闭包学习
  10. android开发小技巧:实现listview异步加载图片