首先,你应该也知道,ECO时钟是用BLESS使用的,即广播,连接,扫描这些都是用这个ECO时钟做的事情,IMO时钟则是用来做为CPU的时钟使用,这是一个大前提,以下这幅时钟图也可以看出:
问题一回答:
这个CYPRESS BLE要进入低功耗模式是有条件的,不能随便就直接把时钟关了,至于什么时候可以进入深度睡眠也是有前提的,参考下图所示:
从上图看出,只要BLESS在 CYBLE_BLESS_STATE_ECO_ON或者CYBLE_BLESS_STATE_DEEPSLEEP情况下才能进入深度睡眠,否则不可以。
问题二回答:
CyBle_EnterLPM(CYBLE_BLESS_DEEPSLEEP);这个时候ECO时钟已经被你关掉了,CySysPmDeepSleep();这个时候IMO时钟也被你关掉了,如果正常使用你如果不加以判断直接调用这两个API放在死循环里就会我刚要起来就关掉了,导致ECO和IMO始终都没有震动起来。
问题三回答:
CyBle_Start(AppCallBack)与CyBle_Stop()是相对的,如果睡前调用了CyBle_Stop()之后,醒来就一定要CyBle_Start(AppCallBack),否则BLESS将无法进行。
总结:睡眠的实质就是关掉时钟,跟其他的关系不大。但是不能随意关时钟,要看条件符不符合,否则就会出现异常