TinyOS 2.x提供了3种基本的存储类型:小数据对象存储、循环的日志存储以及大数据对象存储。TinyOS 2.x也提供了相应的接口与组件来对底层的存储服务进行抽象。
通过一些相关接口(/tos/interfaces)与类型定义(/tos/types),我们可以大致了解到存储系统的功能。几个重要的相关文件包括:BlockRead、BlockWrite、Mount、ConfigStorage、LogRead、LogWrite和Storage.h,而组件ConfigStorageC、LogStorageC和BlockStorageC为上述接口提供了具体实现。
在不同的硬件平台,同一存储抽象的组件虽然名字相同,但实际的实现代码却可能不同。这看起来虽然繁琐,不过不用担心,因为TinyOS的编译系统会自动包含相关芯片的正确驱动。在应用开发环节,程序员不需要担心这些相关驱动的文件位置,只需知道这些组件的名称即可。
如果读者对这些特定芯片的存储驱动比较好奇,以Mica2/MicaZ节点上的Atmel AT45DB系列flash存储为例,可以试着去了解它们的具体实现:
下面是M25Pxx系列flash存储和Intel imote2节点flash存储的具体实现。
M25Pxx系列flash:(www.xing528.com)
Intel imote2节点的flash:
在TinyOS 2.x系统中,编译时可以用XML文件来说明flash芯片的分卷情况。这个XML文件,称作卷表(volume table),它指明了卷的名称、大小以及在flash中的起始地址。每个卷只能提供一种存储类型(如配置存储、日志存储或块存储)。存储类型定义了flash存储体上数据的物理布局。以下是一个卷表实例:
该卷表定义了CONFIGLOG卷,其大小为65536B,起始位置为0B;而PACKETLOG卷的大小为65536B,起始位置则为65536B,因为前面的65536B属于CONFIGLOG卷。此外,该卷表还定义了131072B的SENSORLOG卷和524288B的CAMERALOG卷。
具体应用程序的卷表必须放在该程序的目录下,且必须命名为volumesCHIPNAME.xml,其中CHIPNAME为flash存储芯片的名称。例如,Twlos节点使用的是ST微电子公司的M25P系列flash存储体,其芯片驱动可以在“tos/chips/stm25p”目录中找到。因此,一个基于Telos平台且使用存储功能的应用程序都需要一个名为volumes-stm25p.xml文件。
注意:卷表中的size参数必须是flash芯片可擦写单元的倍数,而不同flash芯片可擦写单元的字节数可能各有不同。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。