你好,游客 登录 注册 搜索
背景:
阅读新闻

TinyOS之Blink

底层I/O指定分析

[日期:2012-12-31] 来源:Linux社区  作者:eddy_liu [字体: ]

对于TinyOS的I/O分析最好的一个分析例子就是apps/Blink。控制Led闪烁的接口Leds来自于模块LedsC。该模块(LedsC)位于Tos/System/LedsC.nc文件中定义。实际上Leds接口的实现是在同目录下的LedsP.nc文件中完成的。而从开始到这个阶段都还完全没有涉及到底层I/O的指定。其实从LedsC.ncLedsP.nc文件所在的目录(System)看,也很容易理解:这里的接口实现也只是单纯的通过系统调用完成的,和底层的硬件I/O是完全隔离的。那么下面我们来看看,底层的I/O是在哪儿指定的呢?

在文件Leds.nc中可以看到模块PlatformLedsC的引入,该模块提供了接口les0led1led2(实际上均为GeneralIO接口的别名)。该模块(PlatformLedsC)位于Tos/Platforms/Telosa/PlatformLedsC.nc中(笔者的应用平台是tmote,至于为什么该文件在telosa平台目录下,这个要看makefile才能讲的清楚了)。而在模块PlatformLedsC中提供的接口les0led1led2(实际上均为GeneralIO接口的别名)来自于 模块Led0ImplLed1Impl Led2Impl(模块Msp430GpioC()的别名)。模块Msp430GpioC()tos/chips/msp430/pins/Msp430GpioC.nc中定义实现。本来以为这里应该是定义了最底层的I/O指定,实际上这里也只是中间的一步而已。在该文件中很容易发现,Msp430GpioC()模块提供的接口是通过接口HplMsp430GeneralIO来实现的。那现在的问题是接口HplMsp430GeneralIO又是由谁具体来实现的呢?

要解决这个问题我们还要回到文件Tos/Platforms/Telosa/PlatformLedsC.nc中,在这里引入了模块HplMsp430GeneralIOC,同时指定接口来自这个模块。模块HplMsp430GeneralIOC实际位于tos/chips/msp430/pins/HplMsp430GeneralIOC.nc,但实际的接口提供者是同目录下的HplMsp430GeneralIOP模块。这个模块可以算是底层I/O指定的终极模块文件了。到这里我们的底层I/O挖掘之旅就算是完整的结束啦。

总结下,I/O的调用层次:apps/Blink -> Tos/System/LedsC.nc -> Tos/Platforms/Telosa/PlatformLedsC.nc -> tos/chips/msp430/pins/Msp430GpioC.nc -> tos/chips/msp430/pins/HplMsp430GeneralIOC.nc

ps:在本范例中分析的tinyOS源码版本为2.1.1

linux
【内容导航】
第1页: 底层I/O指定分析 第2页:Platform初始化分析
相关资讯       TinyOS  Blink 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款