用户如何自己控制低功耗模式和蓝牙开关配合问题

我想实现用户自己控制低功耗-Shutdown模式(不是TMOS根据有无Event进行睡眠和RTC唤醒),蓝牙关闭;然后RTC 5s后唤醒或者按键唤醒,蓝牙开启,调了一周了也没有成功,请求帮助!

用户自己控制低功耗shutdown模式可以参照我们PM的例程去进行修改,使用的是按键唤醒,如果需要rtc唤醒可参考此链接:

https://www.cnblogs.com/debugdabiaoge/p/15900477.html


您提供的资料我看了,是非ble的例程,现在我遇到的问题是开启ble后如何实现RTC和按键唤醒,不是TMOS根据有无Event进行睡眠和RTC唤醒


既然你使用的不是蓝牙协议栈自己调用的睡眠,那么将PM中关于shutdown和gpio唤醒的代码移植到ble工程里就可以实现了,什么时候想要shutdown,那么调用PM中对应的函数就可以进入,goip唤醒也是如此,关于rtc唤醒,链接中有举例和说明。


移植后与TMOS_SystemProcess( )无法协调工作的。 在tmos休眠唤醒后,有什么函数能暂停或延时休眠?待处理完毕后再进入休眠。


无法协调工作的话就存在逻辑上设计的问题,tmos调用睡眠时会进一个lowpower函数,在这个函数里去执行睡眠,如果你不想睡,那么可以在里面置个flag来决定睡眠还是不睡眠。

emobile_2022-06-13_16-57-13.png




果然好用,多谢!

image.png

但有个问题,就是else的 返回值返0,还是3,对tmos运行有影响没? 还有我加上flag后,恢复睡眠后广播会中断,还请指教!


如果觉得返回值会有影响,那么可以在这边加判断直接退出,目前测试恢复睡眠后仍可以搜到广播,如果广播不继续了,那么可以重新使能下广播试试

emobile_2022-06-13_18-03-11.png



我加完睡眠的标志后,出现了2种现象:

  1. 广播正常,但连接一次后失败,广播停止。

  2. tmos周期事件运行一分钟左右会自动停止。按键后又会运行,广播也会继续,但一分钟左右又停止

image.png

这是按键唤醒后的代码,帮我看看问题出现在哪呢?多谢!



tmos任务是禁止在中断中调用的,另外就是wakeup_flag是否用volatile修饰。

使用579测试广播正常,连接正常,通讯正常。



已解决,多谢!


蓝牙睡眠的控制,除了在CH57X_LowPower()函数加标志位以外,还有其它办法没?

这种方法运行例程的小点程序还可以,一旦程序复杂了,就总死机,很脆弱!

image.png


在蓝牙代码中去实现低功耗,目前使用这种方法是最好的,

不然的话就可以使用我们的tmos去执行你的任务,将你的任务竟可能拆分,然后拉大连接间隔去解决。


多谢解答!另外我问一下,ble的协议栈在ram中是否占了将近16K,如果再加上我的程序占用,超过了16K,而睡眠时,只保留了16K,把我程序多出来的丢失了,所以唤醒时就死机了! 有这种可能没?


协议栈(BLE_MEMHEAP_SIZE)在ram中默认占用了8k,这个是可以调整的,最低不要低于6k,如果自己占用的ram很大,超过了16k,又需要使用低功耗,那么建议使用ch582,睡眠保持ram32k。


多谢


只有登录才能回复,可以选择微信账号登录