微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > zigbee路由节点无法睡眠原因

zigbee路由节点无法睡眠原因

时间:10-02 整理:3721RD 点击:

项目的一个需求是要实现路由节点睡眠,我看了一些文章,说是“目前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,无法休眠。

请问为什么会出现这种现象,路由节点不能组网具体是哪些函数出了问题?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top