现在遇到的情况就是,在休眠模式下,我就只开启一个终端节点,怎么让它在固定的时间下搜索协调器,搜不到就进入休眠。这个时间我看了TI论坛,是说改#define BEACON_REQUEST_DELAY这个变长,但是实际好像没什么效果 本帖最后由 lin1413969042 于 2014-1-13 11:16 编辑
TI ZStack支持beacon嘛?我貌似记得不支持,TIMAC支持
淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
这个功能好像Z-Stack目前不支持的,需要你自己编程序来实现。自己定义一个定时器,时间到就停止搜索网络。
停止搜索网络在哪设置啊,我再osal_start_system()中加了ZDApp_stopjoiningcycle(),但是好像没起作用,也调用了osal_pwrmgr_powerconserve();功耗还是很大,怎么把功耗降下来,
这个我有研究过,如果不配置DEV_HOLD,设备会一直加网,直到有网络。如果想要设备隔一段时间再加网,可以参照下面的做法(需要注意的是,我只验证了设备会按照设定的时间起来加网,并不能说明降低了功耗)。
#define NWK_INIT_fAIL_MAX 5
UINT16 ZDApp_event_loop( uint8 task_id, UINT16 events )
{
……
if ( events & ZDO_NETWORK_INIT )
{
static uint8 initFailCounter = 0;
// Initialize apps and start the network
devState = DEV_INIT;
osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );
//by asura 20140901
if(initFailCounter++ >= NWK_INIT_fAIL_MAX )
{
osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 60000 );
initFailCounter = 0;
return(events ^ ZDO_NETWORK_INIT);
}
ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
// Return unprocessed events
return (events ^ ZDO_NETWORK_INIT);
}
……
}
这样更改以后,设备上电会首先尝试5次加网,如果都失败,其后就会每1分钟起来加网一次。
另外,由于osal_start_timerEx()第二个参数为uint16类型的,这样就限制了延迟时间的大小,我想问下,怎么设置5分钟或更长时间的延迟?
最新的协议栈中osal_start_timerEx函数的时间参数已经是32位的了,可以定义更长时间的定时器了。