本文参考:
http://blog.csdn.net/xukai871105/article/details/9204101
 
1.基本概念
 
1) instant contikit    Ubuntu contiki linux 安装包
 
2) SDCC   8051 C 交叉编译器
 
2.安装instant contiki
2.1 下载Instant Contiki
    文件大小约为2.0G,解压后约为5.0G,请下载之前准备好硬盘空间。
2.2 安装VMWare Player
    VMWare Player为免费软件,可以放心使用。
2.3. 进入Instant Contiki.
    请注意,密码为user
2.4 剩余问题
    【未安装SDCC】
    Instant contiki其实就是ubuntu,在ubuntu的基础上安装了cooja和msp430的编译环境,可以说instant contiki是一个完善的开发环境,但是并没有安装SDCC,而CC2530正需要SDCC的支持才可以完成编译。
    【无法设置共享目录】
    需要解决共享目录问题,否则instant contiki的make生成的hex文件无法通过smartRF Flash Programmer下载至目标板,为了解决这个问题需要安装vmware-tools。(或者设置共享目录,通过复制粘贴也可以实现”共享“)
 
3.定制SDCC
    在开始定制SDCC之前,有以下几点需要说明,这也是上文提到的细节错误。如果不熟悉linux中从源代码安装软件,可以尝试从源代码安装python,源代码安装apache,练习两次那么安装SDCC就熟练多了。
    【1】使用sudo apt-get install sdcc指令安装SDCC,在instant contiki中无法完成cc2530的编译,所以需要下载SDCC的源代码进行编译,这个过程本质为一个定制SDCC的过程。
    【2】下载的并不是安装包,而是SDCC的源代码。简单的说这些SDCC的源代码可以编译成一个SDCC安装包。
    【3】关于SDCC的版本编号,建议安装7100版本,虽然最新的版本为8447,但是实际安装的过程存在问题。
            contiki-wiki中说明,SDCC的版本7102到8719存在问题,最新可用的版本为8737(截止2014年4月)。
    【4】关于文件目录。在下面的具体过程中需要多次切换文件目录,一般的情况下第三方软件下载于opt目录。
 
3.1 必要的前提准备
3.1.1 安装Boost C++ Libraries
    指令:sudo apt-get install libboost-graph-dev
3.1.2 安装srecord 
    指令:sudo apt-get install srecord
    以上两个部分安装的过程中都有可能出现下载速度非常缓慢的情况,如果您今天心情好,可以耐心等待;如果您今天心情不好,请改天再试试。如果你实在无法忍受请修改ubuntu软件源
 
3.2 下载SDCC源代码
3.2.1 调整目录至opt
    在下载SDCC源代码之前,最好把目录调整为opt。(SDCC源代码包随便您放在哪里目录)
    指令:cd /opt
3.2.2 通过SVN命令下载SDCC
    接着使用svn命令获得位于sourceforge的sdcc源代码,其中7100为版本号,建议使用该版本
    指令:sudo svn co -r 7100 https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc/
    【特别注意】SDCC的版本7102到8719存在问题,最新可用的版本为8737(截止2014年4月)
    【技巧提示】虽然在控制台中无法使用ctrl-c和ctrl-v,但是可以使用右击+paste,这样可以加快输入的速度并避免错误。
    【技巧提示】SVN为版本库管理工具,相关的工具还包括HG和GIT。
    下载完之后,可以在opt/sdcc目录下看到以下文件:
 

图1 opt/sdcc文件夹内容

3.3 配置SDCC
    需要修改两处配置文件,个人喜欢使用gedit。
3.3.1 修改MODELS配置
    指令:sudo gedit /opt/sdcc/device/lib/incl.mk
    将最后一行
    MODELS = small medium large
    替换为
    MODELS = small large huge
    替换结果如图所示:
 
图2 修改iMODELS
3.3.2 修改TAGETS配置
    指令:sudo gedit /opt/sdcc/device/lib/incl.mk
    将某行
    TARGETS += models small-mcs51-stack-auto
    替换为
    TARGETS += models model-mcs51-stack-auto
    【技巧提示】如果找不到该行可以通过search搜索以下。
    替换结果如图所示:
 
图3 修改TAGETS
 
3.4 配置三步曲——configure、make、make install
    开始之前需要使用cd命令把路径转移至opt/sdcc,以便进行configure和make。在开始这三部曲之前,最好先对这三个过程有所了解。(以下3点来自百度知道)
    【1】 配置sudo ./configure 
./configure命令就是执行当前目录的名为configure的脚本,主要的作用是对即将安装的软件进行配置。
    【2】编译sudo make
make的基本用处是自动根据makefile里的指令来编译源文件。
    【3】 安装sudo make install
make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径——默认/usr/local/bin
 
3.4.1 configure
    该步骤的主要作用使得SDCC仅支持8051,而禁止对其他MCU的支持。输入以下指令,由于指令较长建议使用paste。
指令: 
sudo ./configure --disable-gbz80-port --disable-z80-port --disable-ds390-port \
  --disable-ds400-port --disable-pic14-port --disable-pic16-port \
  --disable-hc08-port --disable-r2k-port --disable-z180-port \
  --disable-sdcdb --disable-ucsim
    由于指令较长,使用了'\"实现续行功能。”./“代表当前路径,configure为一个可执行文件,后面的若干disable为设置参数,即静止其他类型的MCU。
 
3.4.2 make
输入指令:sudo make
 
3.4.3 smake install
指令:sudo make install
 
3.5 验证安装
    安装完成需要验证以下安装是否正确,可以回到home目录,输入以下命令:
    指令:sdcc -v
    查看SDCC版本编号,如果SVN操作时输入的版本号为7100,此时查看到的版本也应为7100。
    指令:which sdcc
    查看SDCC该可执行文件路径。该路径应该为/usr/local/bin/sdcc
 
图4 检查SDCC是否安装成功
 
4.执行三部曲——编译、下载和运行
    如果SDCC安装成功,那么contiki就会变得非常简单。和IAR环境下开发一样,首先需要编译工程以便生成hex文件,然后使用smartRF Flash Programmer下载该hex文件至目标板,之后便可通过串口调试助手等工具观察程序运行情况。
4.1 编译
 
 
    在编译之前,需要使用cd命令调整目录至/contiki/example/cc2530dk
    cd ~/contiki/examples/cc2530dk
    【技巧提示】 ''~"为home,其实为/home/user。(2014年4月,我当时真的纠结好久,的确不明白~波浪线的用处,好囧)
 
 
    接着便是编译文件,例如编译blink-hello
    make blink-hello
    初次编译时间可能比较长,下图为编译结果和生成的hex文件。
 
 
图5 编译结果
 
图6 生成HEX结果
 如果编译通不过 设置环境变量
用 export 命令确认你的 PATH 是否包含以下目录(太重要了, 这问题搞了我几天)
没有的话 在  /etc/profile  最后一行加上如下语句
export PATH="/usr/local/sdcc/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
4.2 下载
    该步骤可以回到windows中,如果设置共享目录可以把hex文件转移至共享目录,若没有设置共享目录,可以直接复制hex文件,然后在windows某文件中粘贴。PS:虽然复制粘贴的方式如此简单,但是刚上手linux的时候连这个都不敢尝试,总想着通过某种指令完成操作,例如复制文件,粘贴文件,解压缩文件。后来发现这些操作在ubuntu中和windows中几乎是一样的,非常方便。
    接着便可通过smartRF Flash Programmer下载hex文件,操作如下图所示:
 
 
图7 下载HEX至目标板
 
4.3 运行
    通过串口调试助手观察结果。简单的说,blink-hello.c中定义了两个任务,一个任务每4S运行一次,另一任务每1S运行一次,两个任务均通过串口打印数据。该例子主要演示contiki中protothread机制如何实现任务的并发(或者达到类似并发的效果)。运行结果如下图所示,代码会在以后的博文中分析。请注意,波特率需要设定为115200-8-N-1。
 
图8 运行结果
 

6LowPan 开发之开山篇的更多相关文章

  1. 【DevOps】团队敏捷开发系列--开山篇

    随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发-测试-发布)模式已经不能满足快速交付的需求.2009 年左右 DevOps 应运而生,开发运维一体化,通过自动化工具与流程让整个软件开发构建.测 ...

  2. Struts2开山篇【引入Struts、自定义MyStruts框架】

    前言 这是Strtus的开山篇,主要是引入struts框架-为什么要引入struts,引入struts的好处是什么-. 为什么要引入struts? 首先,在讲解struts之前,我们来看看我们以前写的 ...

  3. WCF开山篇__图片传输

    WCF开山篇__图片传输   一.  简介 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序接口,可以翻译为Windows通讯接口,它是. ...

  4. GoLang 开山篇

    GoLang 开山篇 1.Golang 的学习方向 Go语言,我们可以简单的写成Golang. 2.GoLang 的应用领域 2.1 区块链的应用开发 2.2 后台的服务应用 2.3 云计算/云服务后 ...

  5. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  6. 【转载】Android Metro风格的Launcher开发系列第二篇

    前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如 ...

  7. Python开发【第二篇】:初识Python

    Python开发[第二篇]:初识Python   Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  8. .Net魔法堂:史上最全的ActiveX开发教程——部署篇

    一.前言 接<.Net魔法堂:史上最全的ActiveX开发教程——发布篇>,后我们继续来部署吧! 二. 挽起衣袖来部署   ActiveX的部署其实就是客户端安装ActiveX组件,对未签 ...

  9. .Net魔法堂:史上最全的ActiveX开发教程——发布篇

    一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程——开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包  C#开发的Activ ...

随机推荐

  1. .NET Framework 系统要求

    .NET Framework 3.5对操作系统的要求 .NET Framework 4 对操作系统的要求 .NET Framework 4.5对操作系统的要求

  2. AVL模板

    感谢此博客 #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define de(x) cout &l ...

  3. How to implement multiple constructor with different parameters in Scala

    Using scala is just another road, and it just like we fall in love again, but there is some pain you ...

  4. spring mvc: log4j插件 log日志的输出

    准备: log插件:log4j <!-- log日志插件 --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...

  5. vim 的寄存器

    If you've been following my series on Vim, it should be clear now that Vim has a pretty clear philos ...

  6. 设计模式--命令模式C++实现

    命令模式C++实现 1定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求队列或者记录请求日志,可以提供命令的撤销和恢复功能 2类图 角色描述: Receiver接受者角色,就 ...

  7. HDU 4828 逆元+catalan数

    Grids Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Subm ...

  8. yii2高级模板安装

    通过 Composer 安装 如果还没有安装 Composer,在 Linux 和 Mac OS X 中可以运行如下命令: curl -sS https://getcomposer.org/insta ...

  9. es6环境中,export与import使用方法

    前言 参考自阮一峰大神的教程:http://es6.ruanyifeng.com/?search=export&x=6&y=5#docs/module#export-命令 声明:如有问 ...

  10. SSM整合AOP,日志框架和拦截器

    前言 日志是所有系统必不可少的部分,而AOP在MVC通常用于监控方法调用,可以生成一个traceid,记录从用户调用到底层数据库的数据链路,帮助监控和排查问题. AOP 现在做一个简单的前置切面,用来 ...