首页 理论教育 打造自己的TinyOS平台

打造自己的TinyOS平台

时间:2023-06-28 理论教育 版权反馈
【摘要】:上一节简单说明了TinyOS系统中的平台的概念,利用集成的平台通常可以快速的搭建针对具体应用的无线传感器网络。本节通过一个简单的示例说明如何新建一个TinyOS平台。在命令窗口输入以下命令:会出现以下提示信息:出现以上问题的原因是用户还没有在TinyOS系统中定义这个新建的平台,通俗点说就是TinyOS系统还不认识这个名为yamp的平台。

打造自己的TinyOS平台

上一节简单说明了TinyOS系统中的平台的概念,利用集成的平台通常可以快速的搭建针对具体应用的无线传感器网络。当然,由于TinyOS中包含的平台功能毕竟有限,很可能不能满足现实应用的需求,此时,当需要一种新的硬件节点时,就相应地需要建立新的平台抽象。本节通过一个简单的示例说明如何新建一个TinyOS平台。

在建立新的平台之前,需要给平台取一个名字,并创建存放平台代码的目录。这里将新的平台取名为yamp,在上节中已经介绍过,平台的代码存放在“tinyos-2.x/tos/platforms”目录下,因此,用户可以在命令窗口中输入以下命令:

1).platform文件

每个平台目录下都应该包含一个名为“.platform”,新建的yamp的目录下也不例外。该文件中包含了该平台的基本编译信息,这个以“.”作为前缀的文件中包含以下内容:

以上代码中的第一条语句是把该平台需要用到的其他代码目录添加到“include”路径下。其中,%T指代TOSDIR环境变量。前文已经提到,平台目录是底层编译的入口目录,因此,需要在这个入口处进一步指明其他需要进行编译的文件的具体路径。

上述代码中的第二条语句使用@opt包含了传递给nesC编译器的一些具体编译参数。

2)hardware.h文件

除了“.platform”之外,每个平台目录下还需要一个名为“hardware.h”的文件。该文件中定义一些平台相关的常量、管脚名称以及其他头文件等,例如,这个例子中包含了msp430hardware.h。当对该平台的应用进行编译时,该文件会被默认进行编译,无须程序员额外说明。通过输入以下内容建立hardware.h。

该文件将位于“tos/chips/msp430”下的“msp430hardware.h”中。由于在.platform文件中已经增加了上述目录,因此此处只需要给出文件名称即可。hardware.h中还定义了一些管脚的名称。例如说明了红色Led与5.4号通用I/O接口绑定在一起

该头文件还实现了一些其他的重要功能,例如通过包含msp430hardware.h,实现了原子语句的中断禁用(nesC语句中原子语句包括的代码段本质上等同于__nesc_atomic_start()and__nesc_atomic_end()),微处理器的休眠功能等。

此外,每个平台还都必须有一个名为“platform.h”的文件,即使该文件没有任何内容。

3)配置编译环境

在“tinyos-2.x/apps/null”目录下有一个名为“null”的应用,顾名思义,null应用是一个不进行任何操作的空应用,它的目的就是为了对平台进行测试。在命令窗口输入以下命令:

会出现以下提示信息:

出现以上问题的原因是用户还没有在TinyOS系统中定义这个新建的平台,通俗点说就是TinyOS系统还不认识这个名为yamp的平台。要使系统认识yamp这个名字,需要在“tinyos-2.x/support/make/”目录下创建名为“yamp.target”的文件,并输入以下内容:(www.xing528.com)

上述代码中第一行指出平台名称为“yamp”,第二行使yamp平台包含msp处理器的文件(make/msp/msp.rules),最后两行为编译yamp平台上的应用程序提供编译规则。

在创建了yamp.target文件后回到“tinyos-2.x/apps/null”目录下重新键入make null,这次将会得到如下的编译信息。

此时,终于得到了一个真正意义上的编译错误,这说明系统已经识别了yamp平台。发生错误的原因是由于编译器没有找到“PlatformC”这个组件。由于特定硬件的初始化是由每个平台的PlatformC提供的,这是每个平台不能缺少的组件。因此,创建“tos/platforms/yamp/PlatformP.nc”并输入以下内容:

接着创建“tos/platforms/yamp/PlatformC.nc”,并输入以下内容:

现在,再次执行make yamp,如果依然得到如下的编译错误信息:

通过输入以下命令:

这次将会得到编译正确通过的信息:

4)让Blink在新建的平台上运行

通过以上步骤,已经完成了新建yamp平台的基本操作,但更为重要的是,我们需要在该平台上完成应用程序的开发。这里通过掩饰如何让Blink应用在yamp平台上工作来说明如何在新建平台上进行应用的开发。

Blink应用是非常简单的程序,只是控制LED灯的闪烁。下面进入Blink所在的目录并运行命令:make yamp,此时会得到如下的编译错误信息:

从以上信息中可以看出编译器无法在编译组件LedsC时找到PlatformLedsC组件。通过该组件的名字可以看出这是一个与平台有关的组件,因此需要在yamp平台中定义该组件。

为什么一定需要一个与平台相关的组件来链接Led呢?这是因为在最底层,led灯的驱动操作在不同的平台是不一样,它取决于具体连接的管脚以及执行点亮/关闭操作的输出电平等等。而在Blink应用中,程序员并不关注具体的平台,因此,就需要在平台中隐藏底层的操作差异,从而向上提供统一的Led操作命令。PlatformLedsC组件中相关代码如下:

接下来就可以在Blink目录下编译yamp平台了,虽然yamp是一个虚拟的平台,但可以确定的是这种平台需要工作在具有MSP430x1611微处理器的节点上,并且Led连接到微处理器的5.4-5.6管脚,这与telos和Tmote节点的连接方式是一致的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈