CC2538之Contiki3.0实验:1-Contiki初探-新建空工程 编译
2016-01-07 16:04
330 查看
contiki3.0网页doxygen: http://www.hopnetwork.com/contiki/index.html
博客帖子已经介绍了TinyOS编程和实验例程;下面将来啃一下我一直特别排斥的Contiki
首先不管Contiki那些概念;先编写一个空代码,类似大家初学编程的时候 空工程;
在contiki-3.0\examples\cc2538cb目录下新建一个文件夹,命名null;新建一个c文件,命名test_null.c 加入:
先不介绍基本的概念;让我们继续;先怎么也让他编译过去再说;
新建一个Makefile文件;加入:
OK!现在来编译,启动shell,进入null目录,输入命令:make TARGET=cc2538cb然后轻敲回车,等待编译
不出意外应该会有一个“warning 我是菜鸟”在shell上;打印这个纯粹是知道了这个文件确实被编译了;
下面咱们懒人一把,在编译命令省去平台,null目录下面新建一个Makefile.target加入:
现在再来编译一次,命令输入和第一次变化了,不需要指定平台了,直接输入命令:make 就行了,好了,懒人法成功!
总觉得这个例程代码空荡了点,编译了也不想下载到板子玩,也罢,cc2538cb有三个led,咱们把它全部点亮玩玩,修改代码:
去除#warning再次编译,生成后可以下载到板子看看三个LED灯貌似被不小心点亮了!
呵呵,玩笑开到这里,下面让我们学习一下这个例程:先来看看Makefile文件:
CONTIKI_PROJECT = test_null 大家可以回忆一下TinyOS的例程Makefile的编写应该就明白了,声明编译App/工程,可以有多个,用空格符分隔
all: $(CONTIKI_PROJECT) 照着抄写就行
CONTIKI = ../../.. 指定contiki的根目录;当前目录是contiki-3.0\examples\cc2538cb\null,往前退三级,正好退到contiki-3.0目录
include $(CONTIKI)/Makefile.include 和上一句配合,指定Makefile.include 文件路径
Makefile.target文件
TARGET = cc2538cb 指定平台,像作者这类懒人专属,编译命令省去TARGET=?
test_null.c 文件;我们看到了好像有点和C语言开发有点陌生的东西;Contiki的Process protothread
来看看contiki-3.0\core\sys\process.h中部分:
AUTOSTART_PROCESSES在contiki-3.0\core\sys\autostart.h中
有关Contiki的PT网上介绍实在是很多,再者本身确实也是C语言,我就不啰嗦了;需要参考文档百度网盘contiki protothreads官方说明.pdf;大家需要注意看这篇文档的5.3部分;在PROCESS_THREAD中不要有switch的代码;可以自己去测试编写后的编译看看报出什么;文档原文依赖编译器检测,大部分的编译器并不会报错....
我们现在使用了Contiki瞎写了一份几乎没有任何作用的代码,下一次我将给大家编写一次类似TinyOS的视频传感器部分;了解Contiki和TinyOS的事件驱动机制;
博客帖子已经介绍了TinyOS编程和实验例程;下面将来啃一下我一直特别排斥的Contiki
首先不管Contiki那些概念;先编写一个空代码,类似大家初学编程的时候 空工程;
在contiki-3.0\examples\cc2538cb目录下新建一个文件夹,命名null;新建一个c文件,命名test_null.c 加入:
#include "contiki.h" PROCESS(test_null, "我是菜鸟"); AUTOSTART_PROCESSES(&test_null); PROCESS_THREAD(test_null, ev, data) { PROCESS_BEGIN(); #warning 我是菜鸟 PROCESS_END(); }
先不介绍基本的概念;让我们继续;先怎么也让他编译过去再说;
新建一个Makefile文件;加入:
CONTIKI_PROJECT = test_null all: $(CONTIKI_PROJECT) CONTIKI = ../../.. include $(CONTIKI)/Makefile.include
OK!现在来编译,启动shell,进入null目录,输入命令:make TARGET=cc2538cb然后轻敲回车,等待编译
不出意外应该会有一个“warning 我是菜鸟”在shell上;打印这个纯粹是知道了这个文件确实被编译了;
下面咱们懒人一把,在编译命令省去平台,null目录下面新建一个Makefile.target加入:
TARGET = cc2538cb
现在再来编译一次,命令输入和第一次变化了,不需要指定平台了,直接输入命令:make 就行了,好了,懒人法成功!
总觉得这个例程代码空荡了点,编译了也不想下载到板子玩,也罢,cc2538cb有三个led,咱们把它全部点亮玩玩,修改代码:
#include "contiki.h" #include "dev/leds.h" PROCESS(test_null, "我是菜鸟"); AUTOSTART_PROCESSES(&test_null); PROCESS_THREAD(test_null, ev, data) { PROCESS_BEGIN(); leds_on(LEDS_ALL); PROCESS_END(); }
去除#warning再次编译,生成后可以下载到板子看看三个LED灯貌似被不小心点亮了!
呵呵,玩笑开到这里,下面让我们学习一下这个例程:先来看看Makefile文件:
CONTIKI_PROJECT = test_null 大家可以回忆一下TinyOS的例程Makefile的编写应该就明白了,声明编译App/工程,可以有多个,用空格符分隔
all: $(CONTIKI_PROJECT) 照着抄写就行
CONTIKI = ../../.. 指定contiki的根目录;当前目录是contiki-3.0\examples\cc2538cb\null,往前退三级,正好退到contiki-3.0目录
include $(CONTIKI)/Makefile.include 和上一句配合,指定Makefile.include 文件路径
Makefile.target文件
TARGET = cc2538cb 指定平台,像作者这类懒人专属,编译命令省去TARGET=?
test_null.c 文件;我们看到了好像有点和C语言开发有点陌生的东西;Contiki的Process protothread
来看看contiki-3.0\core\sys\process.h中部分:
#if PROCESS_CONF_NO_PROCESS_NAMES #define PROCESS(name, strname) \ PROCESS_THREAD(name, ev, data); \ struct process name = { NULL, \ process_thread_##name } #else #define PROCESS(name, strname) \ PROCESS_THREAD(name, ev, data); \ struct process name = { NULL, strname, \ process_thread_##name } #endif #define PROCESS_THREAD(name, ev, data) \ static PT_THREAD(process_thread_##name(struct pt *process_pt, \ process_event_t ev, \ process_data_t data)) #define PROCESS_BEGIN() PT_BEGIN(process_pt) #define PROCESS_END() PT_END(process_pt)
AUTOSTART_PROCESSES在contiki-3.0\core\sys\autostart.h中
#if ! CC_NO_VA_ARGS #if AUTOSTART_ENABLE #define AUTOSTART_PROCESSES(...) \ struct process * const autostart_processes[] = {__VA_ARGS__, NULL} #else /* AUTOSTART_ENABLE */ #define AUTOSTART_PROCESSES(...) \ extern int _dummy #endif /* AUTOSTART_ENABLE */ #else #error "C compiler must support __VA_ARGS__ macro" #endif
有关Contiki的PT网上介绍实在是很多,再者本身确实也是C语言,我就不啰嗦了;需要参考文档百度网盘contiki protothreads官方说明.pdf;大家需要注意看这篇文档的5.3部分;在PROCESS_THREAD中不要有switch的代码;可以自己去测试编写后的编译看看报出什么;文档原文依赖编译器检测,大部分的编译器并不会报错....
我们现在使用了Contiki瞎写了一份几乎没有任何作用的代码,下一次我将给大家编写一次类似TinyOS的视频传感器部分;了解Contiki和TinyOS的事件驱动机制;
相关文章推荐
- C和C++中存储区域详解(栈、堆、全局...)
- 文件IO java
- 如何控制UITextField的拷贝、剪切面板
- Photos(PHAssetChangeRequest)
- ios ShareSDK进行短信分享(没有UI版)
- 关于iOS 委托 代理 协议 的理解
- python-杨辉三角
- Strassen矩阵乘法 分治与递归
- Java中如何把一组对象按照其某一个属性值进行排序?
- [学习记录][css]字体
- 自定义View时,用到Paint Canvas的一些温故,PropertyAnimation中的ValueAnimator(动画四,“大大姐”的旋转跳跃no.2)
- 参数配置
- 架构之路(4):测试驱动
- chmod只修改子目录或文件的权限
- 自定义View时,用到Paint Canvas的一些温故,PropertyAnimation中的ValueAnimator(动画四,“大大姐”的旋转跳跃no.2)
- android效果背景虚化
- JAVA线程锁-读写锁
- (转)PHP排序算法的复习和总结
- < meta > 元素
- Unable to resolve target 'android-14'解决方法