从昨天折腾到今天,终于将WSNDemo测试成功。
从ASF中创建例程的步骤就不重复了。创建好LWMesh-WSNDemo-Application例程后,我们可以在项目管理器中看到还带有pdf应用笔记和WSNmonitor监视软件。AS6将这么多东西都打包进去了,难怪速度比较慢。
在config.h中,我们可以看到下面的定义
#if APP_ADDR == 0x0000
#define APP_CAPTION "Coordinator"
#define APP_NODE_TYPE 0
#define APP_COORDINATOR 1
#define APP_ROUTER 0
#define APP_ENDDEVICE 0
#elif APP_ADDR < 0x8000
#define APP_CAPTION "Router"
#define APP_NODE_TYPE 1
#define APP_COORDINATOR 0
#define APP_ROUTER 1
#define APP_ENDDEVICE 0
#else
#define APP_CAPTION "End Device"
#define APP_NODE_TYPE 2
#define APP_COORDINATOR 0
#define APP_ROUTER 0
#define APP_ENDDEVICE 1
#endif
APP_ADDR是0,就是Coordinator,小于0x8000是Router,否则才是End Device。因为只有两个SAM R21,所以只能一个设置成End Device,另一个设置为Coordinator。分别设置APP_ADDR为0和大于0x8000(这里设置为0x9012了),编译并分别下载到两个SAM R21中。下载后立刻就可以看到,随着End Device每两秒发一次数据(LED闪一次),Coordinator上的LED也同步闪一次,说明它们的之间无线通信已经连上。
再安装WSNMonitor,这是一个Java程序。
使用这个软件前,需要进行参数设置。这里很关键,我就是在这里卡了一天才发现问题。点击File菜单下的Connect或者直接点工具栏上的第一个按钮,就进行参数设置。
首先要指定Protocol目录,我们需要将它指定到WsnMonitor软件下的protocol目录。如果我们通过编辑栏右边的按钮去指定,会遇到一个坑,它会自动在目录名的最后添加.null,需要手工将它删除才行。
然后在选择串口和设置串口参数。波特率要设置为38400,因为单片机是这样设置的。此外流控也必须设置,这是第二个坑,选择xon/xoff或者hardware都可以,就是不能选择none。
选择好后点击ok就开始联机了。如果没有错误,就可以看到下面的画面。如果没有看到,就说明你的设置错了,请在检查一下。
当然我们也可以用其它串口软件,用HEX方式截取数据。可以看到数据包中 12 90 就是刚才设置的End device地址。
shaoziyang 2015-1-4 21:52
潜龙思瑞 2015-1-4 20:48
ash_riple_768180695 2010-8-2 17:31
用户1303485 2010-7-30 22:50
ash_riple_768180695 2009-8-2 08:35
用户1395232 2009-7-31 21:13
用户1395232 2009-7-31 21:08
用户131284 2008-7-30 13:04
ash_riple_768180695 2008-1-13 19:19
谢谢“钱德拉”的回复,这一补充很是精采。
用户128735 2008-1-13 11:25
关于“测不准原理”,最近刚好碰到一个bug和其相关,记录在此全当是看了博主文章后的实践心得吧:
写了一个发包模块,因考虑到外用逻辑分析仪的引脚设置起来太麻烦,所以采用signaltapII,调试了5次之后终于发包正确了,自认为没问题了就打了个包存档,还跟老大汇报说OK了。结果集成到他的工程以后发现发的包是错的,我又回头看我的工程发的包明明是没问题的。搞了半天发现,我还是带着signaltapII测的,忽然想起楼主说的“测不准原理”,于是去掉signaltapII编译果然发的包是错的,重新加上signaltapII编译后又是好的,而且看里面的波形也看不到哪里逻辑有问题。
折腾了很久,最后的解决办法是:将编译选项的full ncremental complation给off掉,去掉sigaltapII编译后测发包,是错误的。然后加上signaltapII再编译,这时发包还是错误的了。好,带着signaltapII编译的情况下bug也出现了!接下来的事情就好办了,这时signaltapII抓出来的波形里面已经暴露出明显的逻辑错误了,改代码,编译,发包测试OK。然后再去掉signaltapII,再测,还是OK。于是这才算是真正OK了。
总结起来就是楼主说的几种情况之一:加了signaltapII后bug不出现了。希望其他兄弟引以为鉴,千万不要忘了去掉signaltapII再测试一遍!
至于为什么将编译选项的full ncremental complation给off掉后编译结果就比较真实,原因我还不太清楚,初步猜想可能是:不off掉的话是增量编译,不如完整编译的结果好,在此基础上添加的siganltapII的结果也不完全可信;一旦完整译过一次之后,内部逻辑和节点数据库都是可信的,那么在此基础上添加的siganltapII的可信度也会更高。以后如果找到针对于此的altera文档我在贴上来吧,兄弟们如果实在没办法的话可以用我这个土办法试一试。