CH57x,CH58x,CH59x等BLE芯片的休眠回调作用及使用方法
简介:
在芯片工作期间,如果程序不是所有时刻都有任务在运行,因此在系统空闲期间,这些工作电流其实是浪费掉的,加入一些处理可以控制芯片在无tmos任务运行时使其进入低功耗,等到有任务需要执行前(1ms-1.2ms)提前唤醒。在BLE蓝牙库中,就有这么一项低功耗处理机制:由于tmos时钟源来自于低速时钟,在休眠期间低速时钟会保持运转,并且由于我们每次配置tmos任务的运行时间时,都会传入一个时间参数给协议栈,因此任意时刻,蓝牙库内部都是知道这些任务应该在什么时刻执行,并且哪些时间点是没有任务需要执行的,于是在我们初始化蓝牙库阶段,可以注册一个回调任务:

如果cfg.idleCB没有传入函数指针,则代表无休眠处理措施,如果传入了函数指针,则蓝牙库底层会以一定的间隔查询该函数的返回值:
只有返回值为0,才会代表芯片成功进入休眠,并且唤醒后底层会进行一次时序的校准,其他任意值都不会进行校准;

下图可直观地看到任务的执行与无任务执行期间,芯片电流的变化趋势:



优缺点:
优点:1、工作期间可以节省大量电流消耗;2、管理很便捷,只需掌握tmos任务的编写以及如何调用,对于任务量较小的程序比较适用;
缺点:这种处理高度依赖tmos系统的管理,一旦脱离了tmos任务的管理,比如说while主循环中有一些自定义的任务在执行,但是这些任务tmos是不知道的,一旦进入休眠,这些主循环的处理都是会停止的,最终会出现外设工作不正常的现象。
应用拓展:
可以自定义一个休眠标志,在休眠时间到达后,关停所有任务,并将休眠标志置1,允许底层管理进入休眠:


浙公网安备 33010602011771号