因为项目要使用,我学了一些TinyOS的编程,现在看来还算可以用,所以就将我一路上遇到的问题和我解决问题方法记下,权当备忘。如果对你有用的话,我会非常高兴。
1、TinyOS开发环境配置
老实说,TinyOS的环境配置方法网上有不少,比较权威的是www.tinyos.net上的详细讲解,非常详细,特别是对Ubuntu的用户而言入门简单。
然而,事情并非全如网站上所言,即使依照网站上的配置方法,我也遇到了不少问题。当然,并不一定每个人都会遇到同样的问题,而且很可能大部分人都不会遇到这些问题。
其中一个比较严重的问题正是伴随着方便的Ubuntu配置而来的。
使用网站上所提供的两部安装配置方法安装TinyOS后,你会发现Telos系列可以正常的编译,而MICA系列却已编译就报出长长的错误列表。经过我的检查,发现Telos系列可以编译是因为这个系列使用MSP430处理器,而MICA系列使用AVR的ATM128处理器则无法编译。这是因为上述两步安装法会自动配置好MSP430的交叉编译工具,而其AVR交叉编译支持却存在问题,安装完后会发现完全找不到需要的库文件和头文件。
本来我是打算自己编译AVR-GCC、AVR-LIBC的源码来解决(我实际也是这么做的),但是结果因为我资质愚钝,配了半天也没有搞定。最后我选择了一种投机取巧的方法——下载网站上配好的虚拟系统(xubuntos)……
的确投机取巧,不过这个保证可以用,-_-|||
2、关于寄存器的定义
如果你去翻看TinyOS库文件的内容(/opt/tinyos-xxx/tos/),你就会发现里面常常会用到一些寄存器名(类似宏的写法,用全部大写字母标识,例如MSP430的计时器寄存器TBR和ATM128的计时器1的寄存器TCNT1等),然而你可能找遍库文件目录也找不到哪里有这些寄存器的定义(可以找到它们的存储数据类型的定义,一边是typedef一个int8_t之类的)。
事实上,你在编译过一次简单的程序(例如示例程序Blink),就可以在build目录对应平台的子目录中找到一个文件app.c。如果你检查这个文件的内容,会发现里面包含了所有你可以使用的寄存器的定义(它们都是volatile变量,而且用__asm直接指定地址)。如果需要参照或者查看自己可以使用的寄存器,可以到app.c文件中寻找。
3、关于MICAZ+MIB520
用USB连接MIB520基座后,你会发现MIB520在/dev/目录下占据了两个USB终端位置,其中编号较小的那个是编程下载时使用的,另一个则用于PC和其上的传感器(例如MICAZ)串行通信使用。即如果你使用HplAtm128UartC的Uart0接口与PC进行通信,则收发数据都通过编号较大的USB终端进行。
Telos系列可以提供精确的32khz时钟,而MICA系列的计时器无法提供精确的32khz计数器,MICA系列实际提供的计数器的频率随处理器时钟变化而变化,一般为31.7khz或者约28.8khz。
近期评论