终端节点低功耗后如何用看门狗
在终端节点低功耗后,看门狗还能工作 ,这时候功耗是如何保证的嘞?
这一点没弄明白工zstack作机制。还望大神们指点。
从论坛上借鉴的方式,我是在这里喂狗的:
void osal_start_system( void )
{
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop
#endif
{
osal_run_system();
#ifdef WDT_IN_PM1
WD_KICK();
#endif
}
}
谢谢
PM1,不是所谓的低功耗,这时高速晶振还是运行的,所以看门狗还是运行,进入PM2或PM3后,看门狗是不工作的。
你好 TY:
1.编译选项使能了POWER_SAVING, 没有显式调用halSleep就不会进入PM2 吗?
2.但是我显式调用halSleep(5000)后,看门狗还是可以正常工作(板子没有复位判断),这个调用后应该是进入PM2吧。
关系还是没弄明白,谢谢解答。
(1)使能POWER_SAVING以后,协议栈会根据一系列判断自动进入PM2或或PM3模式。不要显式调用halsleep。你可以debug,代码跟踪看是什么原因,系统没有进入低功耗。
(2)进入低功耗后,看门狗只是不计数,你从低功耗唤醒后,看门狗由于晶振恢复,还是可以继续计数的。
你好 TY
请问在代码跟踪中如何确认休眠模式进入了PM2或者PM3?
由于没有设备检测具体电流,还请指导个其他方式可以可靠的获知当前cc2530的运行状态。
谢谢你解答,低功耗后看门狗也停就非常好的解决了我的疑问。
debug可以看到判断条件是否允许进入PM2或3
osal_pwrmgr_powerconserve() - > OSAL_SET_CPU_INTO_SLEEP()-> halSleep()
在halSleep()里面,如下判据:
halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;
你好 TY:
在我使能看门狗调试低功耗时候,遇到了栈的问题,论坛上有其他人提到过类似的问题但是貌似没有找到合适的解法(也许只是我没找到 J):
The stack pointer for stack 'IdataStack' (currently IData:0x07) is outside the stack range
这个问题是在我使能看门狗后,连接调试器随便走一个断点后,会产生这个错误然后片子复位,不调试时候或者没有走到断点时候不出现该问题。去掉看门狗编译选项后,调试程序又和以前一样了,该单步单步,该断点断点,正常运行。
需要增加栈大小吗?是在general option->stack配置后还有其他相应要修改的吗?
在cc2530上设置栈可以在什么范围,有什么约束,没有整体宏观的把握我不能乱动设置,目前栈使用的是默认值。
IDATA:0xC0
PDATA:0x80
XDATA:0x300
再次感谢。
你debug的时候是要关看门狗的,仿真停了,看门狗还是动的。所以就复位了,然后报错了。
啊。 一语中的!谢谢。
不过报的错为啥是stack的错嘞, 弄得我百思不得解,辗转一晚上睡不好啊。哈哈
正常做出来用的时候,推荐使能看门狗吗?
另外,如果真需要增加栈大小的话,还请指导下上一条里的问题。
谢谢