邻的一级节点发送到目的地址。同样,为了回收路由表空间,可以终止路由表中的那些已经无用的路径记录。
路由表的容量表明一个设备路由表拥有一个自由路由表记录或者说它已经有一个与目标地址相关的路由表记录。在文件“f8wConfig.cfg”文件中配置路由表的大小。将MAX_RTG_ENTRIES设置为表的大小(不能小于4)。 4.3.2路由发现表格
路由器设备致力于路径发现,保持维护路径发现表。这个表用来保存路径发现过程中的临时信息。这些记录只在路径发现操作期间存在。一旦某个记录到期,则它可以被另一个路径发现使用。这个值决定了在一个网络中,可以同时并发执行的路径发现的最大个数。这个可以在f8wConfig.cfg文件中配置MAX_ RREQ_ENTRIES。 4.4、路径设置快速参考
设置路由表大小 MAX_RTG_ENTRIES,这个值不能小于4 (f8wConfig.cfg文件)
设置路径期满时间 ROUTE_EXPIRY_TIME,单位秒。设置为零则关闭路径期满(f8wConfig.cfg文件)
设置路径发现表大小 MAX_RREQ_ENTRIES,网络中可以同时执行的路径发现操作的个数
从零开始学习ZStack之8(2009-03-23 20:40:03) 标签:it
分类:WSN学习
近段时间比较忙,几乎都快荒废了Z-Stack的学习了,把以前学的都快忘记了,这就是非专业技术的痛苦啊!!学习刚好有点眉目,突然意外中断停下,当再一次学习的时候突然发现:以前学的都忘了8成了!郁闷啊!今天真不知道从什么地方下手学习了,所以就针对最近客户比较关心的问题做点介绍,这样有针对性、有目的性的学习可能最适合现在的我了,不然从头把以前那些所谓的笔记看一遍,可能今天晚上又没了,指不定明晚以及后晚以及后后晚?都没时间,不然老是看以前的笔记没有进展就麻烦了!呵呵! 今天只解决1个问题:TI提供的例子程序的表演及功能介绍。
因为最近问这些的客户比较多,特别又是刚入手的朋友,对Z-Stack非常迷糊的时期,如果能够跑通几个例子、看几个演示,那么可以大大提高学习兴趣;另外如果知道某个例子的大致功能及实现,那么在去看具体实现过程目的性就非常明确。 首先来看看TI究竟有哪些例子:
可以看出其例子是非常丰富的。
GenericApp,Location,SampleApp,SimpleApp,HomeAutomation,SerialApp,Transmit, ZLOAD。这样看来还是不少的。其中SampleApp例子已经在前面的学习中有所涉及,可以说前面的所有学习都是基于这个例子的,所以这里就不测试它了。 Location是定位的测试例子,这里我的硬件是不够的,所以也不做测试。其他我都做点测试,能成功的就成功,不能成功的就失败,这个我也没办法,呵呵!!!!!!!! 1、GenericApp
工程打开等我就不多说了,自己去找,如果连这些我都还说,那么我以前的东西是白学了。硬件连接中?????????????????..
当我用两个节点分别烧写入DB的协调器和路由器,从我的经验看来,他们分别能建立网络和加入网络,但是从表象上几乎看不见数传现象,尽管我按了每个节点的按键,也仅仅是本节点的LED在改变。唯独有点数传感觉的是:按键右键对方有反应就是了,至于具体什么反映我觉得没必要说明白,大家试试就知道了。 所以还决定看看程序来判断这个例子的功能。
大约浏览了下,这个例子似乎还与设备的绑定有关系,因为在按建处理程序中发现: if ( keys & HAL_KEY_SW_2 ) {
HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );
// Initiate an End Device Bind Request for the mandatory endpoint dstAddr.addrMode = Addr16Bit;
dstAddr.addr.shortAddr = 0x0000; // Coordinator ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(), GenericApp_epDesc.endPoint,
GENERICAPP_PROFID,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList,
FALSE ); }
很明显这里按键2(右键)是发送绑定请求的命令。 if ( keys & HAL_KEY_SW_4 ) {
HalLedSet ( HAL_LED_4, HAL_LED_MODE_OFF );
// Initiate a Match Deion Request (Service Discovery) dstAddr.addrMode = AddrBroadcast;
dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR; ZDP_MatchDescReq( &dstAddr, NWK_BROADCAST_SHORTADDR, GENERICAPP_PROFID,
GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, GENERICAPP_MAX_CLUSTERS, (cId_t *)GenericApp_ClusterList, FALSE ); }
显然按键4(左)是初始化一个匹配描述符请求,也就是发现服务,或者叫自动寻求匹配设备。
这就不怪我按键有反映了!
而且在发送数据和接收数据处理函数发现: void GenericApp_SendTheMessage( void ) {
char theMessageData[] = \
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID,
(byte)osal_strlen( theMessageData ) + 1, (byte *)&theMessageData, &GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) {
// Successfully requested to be sent. } else
{
// Error occurred in request to send. } }
居然发送的是一个字符串“Hello World”。
void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {
switch ( pkt->clusterId ) {
case GENERICAPP_CLUSTERID: // \#if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, \#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data ); #endif break; } }
接收数据处理函数里居然要通过液晶显示,本人这里的液晶暂时没有移植过来,因为暂时还不具备那个实力,怪不得看不到发送数据的状况!
这里本人就自作聪明的把以前SampleApp例子里面的一句话加过来了: void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {
switch ( pkt->clusterId ) {
case GENERICAPP_CLUSTERID: // \
HalLedBlink( HAL_LED_4, 4, 50, (500) ); #if defined( LCD_SUPPORTED )
HalLcdWriteScreen( (char*)pkt->cmd.Data, \#elif defined( WIN32 )
WPRINTSTR( pkt->cmd.Data ); #endif break; } }
麽想到啊,这么一加居然就有反应了,o(∩_∩)o?!我不愧是天才的接班人啊!
其实这里很简单的了,就是接收到数据后闪烁4下灯,间隔0.5S。因为从: if ( events & GENERICAPP_SEND_MSG_EVT ) {
// Send \ GenericApp_SendTheMessage(); // Setup to send message again
osal_start_timerEx( GenericApp_TaskID, GENERICAPP_SEND_MSG_EVT, GENERICAPP_SEND_MSG_TIMEOUT ); // return unprocessed events
return (events ^ GENERICAPP_SEND_MSG_EVT); }
这里可以看出,这个例子很明显仅仅是个发送周期信息的例子。所以LED4就周期性的闪烁4下,当然是协调器发送,路由器闪烁,路由器发送,协调器闪烁。
但是这例子里体现了绑定的概念,应该说是从基本功能上很齐全的一个例子,而且在ZSTACK上实现无线网络数传,没有任何多余的功能。所以该例子是一个典型的ZSTACK模板,也就是为用户提供了一个通用模板可以通过这个建立自己的应用。关于如何在这个例子上建立、修改成自己的工程和应用项目详细见文档:
Create New Application For The CC2430DB_F8W-2005-0033_.pdf 这个例子就到此结束了,否则不然就很难把下面的弄玩了! 2、SimpleApp
这个例子我基本跑通了,可是鉴于时间的关系,没有来得及打字了,所以就留到下一次了,时间真是如流水啊-------------------快!