随笔分类 - Contiki
无线传感器网络操作系统
摘要:5、第五部分 (1) 保证CONTIKI变量有定义 (2) 如果是在Darwin操作系统上,定义变量AROPTS。 没用这个操作系统,不理。 注:Darwin是由蘋果公司於2000年所釋出的一個開放原始碼作業系統。Darwin是Mac OS X和iOS操作環境的作業系統部份。 (3) 如果变量UIP
阅读全文
摘要:4、第四部分 (1) 自定义函数,$(1)表示调用oname这个函数的第一个参数,patsubst是make内置函数,即模式字符串替换函数。 oname函数实现的功能是: 将第一个参数中符合%.s模式的替换成%.o 再继续将上述结果中符合%.c模式的替换成%.o 也就是把所有 .s 和 .c文件名替
阅读全文
摘要:3、第三部分 这里我们假设TARGET为native (1) 定义OBJECTDIR变量为obj_native,这个是存放object文件的目录 定义LOWERCASE和UPPERCASE变量,分别存放字母的小写,大些。 TARGET_UPPERCASE看名字就知道,应该是将native转换为NAT
阅读全文
摘要:2、第二部分 这里的usage,targets,savetarget,savedefines都是伪目标。 和all不同,这些伪目标不会被执行,除非显式指定这些目标。 这里有两个目标savetarget,savedefines前边我们提过。 通过命令 make TARGET=esb savetarge
阅读全文
摘要:二、Makefile.include 1、第一部分 (1) 含义: 如果没有定义CONTIKI变量,make停止运行。 并产生一个致命的错误信息,CONTIKI not defined! You must specify where Contiki resides。 hello-world这个例子在
阅读全文
摘要:一、主控Makefile 这里以hello-world例子为主线,从其工程Makefile开始,解析整个build过程。 (1)CONTIKI_PROJECT = hello-world 定义变量CONTIKI_PROJECT为 hello-world (2)all: $(CONTIKI_PROJE
阅读全文
摘要:The Contiki build system http://contiki.sourceforge.net/docs/2.6/a01796.html 先看官方文档的说明,对contiki的构建系统有个总体的概览。 The Contiki build system The Contiki buil
阅读全文
摘要:一、协议栈 主要有两大网络协议栈,uIP和Rime这两大协议栈(network stack): The uIP TCP/IP stack, which provides us with IPv4 networking。 The uIPv6 stack, which provides IPv6 net
阅读全文
摘要:Contiki源码结构 apps目录下,用于存放Application,也就是我们的应用程序放在这个目录下。如webserver,webrowser等,如下图所示。 core目录是contiki操作系统的内核所在。 其中cfs是contiki file system interface 模块,pro
阅读全文
摘要:一、rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with predictable execution times) 数据结构: 1、rtimer_init rtim
阅读全文
摘要:Ctimer 提供和Etimer类似的功能,只是Ctimer是在一段时间后调用回调函数,没有和特定进程相关联。 而Etimer是在一段时间后发送PROCESS_EVENT_TIMER事件给特定的进程。 一、Ctimer数据结构 全局变量ctimer_list: 采用库LIST来实现链表的各种操作。
阅读全文
摘要:一、Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事件。 Etimer模块调用clock_time获得当前系统的时间。 The Contiki etim
阅读全文
摘要:一、Timer API The Contiki timer library provides functions for setting, resetting and restarting timers, and for checking if a timer has expired. An app
阅读全文
摘要:一、functions for handling system time 这些函数都是platform dependent的,我们是在stm8中实现的。 其中我们的clock_time_t是unsigned long型的,在stm8中unsigned long是32bit,最大数值是42949672
阅读全文
摘要:Contiki有一个clock模块和一系列timer模块:timer,stimer,ctimer,etimer,和rtimer。 一、clock模块 clock模块提供一些处理系统时间的函数,还有一些用来阻塞CPU的函数。 timer模块的实现以clock模块为基础。 二、timer和stimer模
阅读全文
摘要:之前都是从各个模块开始看起,从底层开始看起。应该改变一下思路,从高往下看,站得高看得远。 一、Main函数 源码:contiki-release-2-7\platform\stm32test\contiki-main.c 主函数中,关于进程的操作: 先对进程进行初始化process_init()。
阅读全文
摘要:一、事件相关数据结构 1、事件结构体 其中process_event_t和process_data_t的定义: 所以event_data结构体中的ev是一个unsigned char型数据,标识事件的类型。 (1)事件标识ev 其中0-127为用户进程内使用,128-255用于不同进程之间的通信。
阅读全文
摘要:一、HelloWorld例子 二、PROCESS PROCESS_THREAD(name, ev, data);一步一步展开之后为: PT_THREAD看protothread机制 这条语句相当于声明一个函数process_thread_hello_world,而这个函数就是进程执行实体函数。在后续
阅读全文
摘要:本文涉及到的Protothread机制知识,在http://www.cnblogs.com/songdechiu/p/5793717.html 一、进程类型 进程类型主要有协同式(cooperative)和抢占式(preemptive)两种。 协同式进程,要等其他进程运行完进程实体函数(进程不一定运
阅读全文
摘要:一、概述 很多传感器操作系统都是基于事件驱动模型的,事件驱动模型不用为每个进程都分配一个进程栈,这对内存资源受限的无线传感器网络嵌入式系统尤为重要。 然而事件驱动模型不支持阻塞等待抽象语句,因此程序员通常用状态机来实现控制流,但这都很复杂。 例子:一个假想的MAC层协议 用状态机实现: 实现上述代码
阅读全文