最近开始真正的接触TinyOS的官方文档了。经过了几天的学习,虽然感觉有了一点领悟,但是目前掌握的东西很少。于是把自己在学习文档的过程中的一点笔记放到博客,能随时让自己检讨一下学习进度,同时希望也能有更多的人一起交流。
第二章:模块和TinyOS执行模型
1、模块和状态()
2、接口,命令,时间(Interface, Commands, and Events):call调用command,signal调用event。
在一个component中,provides的interface中的command函数必须被实现,uses总的interface中的event函数必须被实现(在implementation中实现)
3、 TinyOS执行模型:任务(Tasks)
Task类型的函数指明组件并不立即调用它,而是在与该task对应的post处才开始运行。
4、内联函数:仅在command和event下,某组件可以调用其他组件的函数。某些函数不能被其他组件命名或调用。
5、分布操作(Split-Phase Operations):将长的操作分开执行,以获得较高的执行效率,而且少用系统资源。
第三章:节点—节点广播通信
1、message_t:(tos/types/message.h)消息缓存。TinyOS中众多与广播通信接口所用的消息缓存。其成员不透明,用accessor和mutator才可访问,如Packet, AMPacket等接口。
2、基本通信接口(tos/interfaces目录下面):Packet、Send、Receive、PacketAcknowledgements、RadioTimeStamping。
3、Active Message接口:AM类型和以太网帧中帧类型的租用类似,指明此数据的类型信息。在tos/interface目录下有AMPacket 和AMSend接口。
4、相关组件:(tos/system目录下):AMReveiverC, AMSenderC, AMSnooper, AMSnoopingReceiverC, ActiveMessageAddressC.
5、命名包装(Naming Wrappers):ActiveMessageC和平台相关,如:CC2420ActiveMessagesC.
6、include相关问题:
如:include <Timer.h>表明Timer.h位于头文件标准目录:tos目录及其子目录下。
Include "aa.h":告诉预编译其现在本目录下寻找aa.h,若没有再去标准目录下寻找头文件。
在Makefile里面用—I标记向编译器指明不在标准目录下的头文件。
7、编写程序时一定要定义消息的数据结构。
8、nx_前缀表示数据为外部类型的大顶端数据,小顶端前缀为nxle_。
9、AMSenderC提供了虚拟的使用广播的方法。每个AMSender的使用者都有一个深度为1的队列,所有的队列都是平等的。
10、使用message_t的方法:如例,message_t pkt;
BlinkToRadioMsg *btrpkt=(BlinkToRadioMsg *)(call Packet.getPayload(&pkt, NULL));
此时,BlinkToRadioMsg便是指向pkt数据区的指针。通过对BlinkToRadioMsg成员指向的地址进行操作就可以实现对message_t的操作。
11、将程序中的变量放在task中进行操作,则可省去使用临界区之烦。
12、在configuration文件中进行配线时,注意AMSenderC和AMReceiverC的类型必须相同。