zigbee路由节点无法睡眠原因
项目的一个需求是要实现路由节点睡眠,我看了一些文章,说是“目前ZigBee协议里面,节点进行收发数据的时刻都是随机的,所以路由器必须处于活动状态来转发终端节点的数据,或者等待其他终端唤醒以后来请求数据。所以路由器不支持低功耗模式。”
我在路由节点主循环里强制加入睡眠,打开了POWER_SAVE,
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?
{
halSleep(50);
//osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
}
#endif
貌似进不了睡眠,请问具体问题出在哪里?是因为主任务一直在执行吗?
我在主任务里试了试添加强制睡眠halSleep函数:
if (idx < tasksCnt)
{
uint16 events;
halIntState_t intState;
HAL_ENTER_CRITICAL_SECTION(intState);
events = tasksEvents[idx];
tasksEvents[idx] = 0; // Clear the Events for this task.
HAL_EXIT_CRITICAL_SECTION(intState);
events = (tasksArr[idx])( idx, events );
HAL_ENTER_CRITICAL_SECTION(intState);
tasksEvents[idx] |= events; // Add back unprocessed events to the current task.
HAL_EXIT_CRITICAL_SECTION(intState);
halSleep(50);
}
发现在halSleep参数取1-99之间时可以强制休眠,并且通过z-sensor可以看到其和协调器组网;取大于100的数时,也可以强制休眠,但z-sensor上无法看到其和协调器组网;取很大的数时,如1000,无法休眠。
请问为什么会出现这种现象,路由节点不能组网具体是哪些函数出了问题?