nesC——模块和配件的细节总结

模块和配件的细节总结
0.关于模块:
(1)默认的代码实现
<1>模块能为使用的接口命令或事件a指定默认的代码实现
<2>模块不能为提供的接口命令或事件a指定默认的代码实现
<3>如果a未与任何命令或事件进行绑定,就会执行默认的实现
<4>默认的命令或事件在定义时以default作为前缀
举例:

tinyos之nesC

继续来谈谈对tinyos和nesC的理解,当然了,是比较肤浅的见解
1.nesC的编程框架
nesC可以看成是C的一种方言。。。个人观点~~请无视==!
组件:分为module和configuration
module实现具体程序逻辑,configuration负责连接各个组件
接口:可以看成一些函数声明的集合。组件之间只能通过接口交流
接口具有双向性
接口一般在组件中实现
module分两类:
1.提供接口(provider):接口的提供者必须实现接口的所有命令
2.使用接口(user):接口的使用者必须实现接口的所有事件
举例:接口StdControl:
相应接口文件:里面只是StdControl的声明(这和JAVA是相似的)
接口提供者(组件):如果一个组件要具有开关一个元器件的功能,那它就应该提供StdControl,并实现它的命令
接口使用者(组件):如果一个组件要使用该元器件,则需要调用上述组件的StdControl接口,它就需要实现StdControl的事件,即当事件发生时做什么
由上述例子可见:很多组件可以提供同一个接口,当然它们的内部代码(功能)是不同的,这也是需要在configuration中连接的原因,个人感觉连接很像电子设计中的布线。。
2.本质上为什么要进行连接?
下面是个人的一些初步理解,错误之处请大牛指出
和标准c一样,nesC也有命名空间,不同在于,nesC的命名空间都是局部的,它没有一个全局的命名空间,组件内部的变量和函数都是私有的,所以说组件沟通的唯一方法是通过接口。
连接的本质也在这里,因为没有全局的命名空间,因此无法实现像标准c那样的连接(函数名在外部是无效的),甚至于像c++那样的动态绑定(函数指针实现),所以nesC通过configuration显式地连接,把调用名与具体实现关联。当然了,这样的连接是静态的。
3.关于命令和事件的一点看法:
接口的提供者实现命令,触发相应事件。当使用者调用的命令完成,该命令(在提供者内部)触发相对应的事件,并以某种方式(早上看的比较乱,居然忘了。。)向上到达使用者。
早上数据结构课上机,本来想的挺好,写好的程序给他看下就走人,结果人太多,他一个一个看,到12点还没轮到我。。好惨。不过正好利用这段时间看了下tinyos programming的一部分,受益匪浅,不知道为什么很多东西到现在又忘了,看来有些原理性的东西得再看。然后晚上本来想找个好点的编辑环境,发现实验室给的xubuntu的vim已经增加了nesC的语法高亮,哈哈,考虑周全,省心多了~~

面向TelosB的tinyos编程基础

1.数据类型

支持float与double类型,但在nx类型网络数据包中不支持。
2.通常在XXX.h中定义数据包格式
XXX.h内容:
#ifdef MODELNULL_H
#define MODELNULL_H
enum{Constant1=256,Constant2=0×93};
typedef nx_struct tobase{
nx_uint16_t nodeid;
nx_uint16_t data;
}tobase_t;
#endif
复习一下c语言枚举类型:http://blog.csdn.net/jidanit/article/details/2652848 这篇博文写的很不错
3.Command 和函数类似,调用时用call。Command也可能有返回值
4.event 也和函数类似。但是用signal调用
5.输出leds
(1)TelosB正面,usb向左,3个LED灯从左向右依次为RGB。
(2)leds的常用Command:
led0Off() 使灯灭
led0On() 使灯亮
led0Toggle() 灯的状态取反

tinyos初体验

今天开始学习tinyos
1.xubuntu集成了tinyos
2.几个文件:(XXX代表工程名)
XXXAppC.nc 对程序的一个总体的结构上的说明。
XXXC.nc 程序主文件,其中的event void Boot booted()函数相当于C中的main()函数
makefile 这个无需说明,大家都明白~。当然,注意里面的语法
COMPONENT=XXXAppC //表示XXXAppC是描述工程整体结构的文件
include $(MAKERULES)
echo了一下这个变量,发现如下

vi了一下,发现是一份较长的默认makefile,好吧,不看了~~
3.编译器ncc(这个编译器是第一次听说,,类似gcc吧)
如何编译源文件?
答:make telosb
4.写入TelosB节点
motelist 查看当前与系统连接的telosb设备。
假设com5和com7都连接了telosb设备,如何将程序写入com5的设备,并编号为3?
答:make telosb reinstall,3,bsl,4
reinstall 表示不需要再次编译,直接写入设备
数字3表示给节点编号为3.这个编号被传到程序中是一个常量TOS_NODE_ID
bsl.后面的数字表示写入指定设备(设备com号减1)
注意:如果只有一个设备,直接 make telosb reinstall,3 将其编号为3即可
5.关于TelosB节点:
靠近usb端的按键:reset键
远离usb端的按键:user键
大概先这些吧,开发环境基本了解了,总体感觉TelosB节点和单片机差不多,不过感觉TelosB更高级一些