|
查看: 453|回复: 1

[BLE SDK] 在FreeRTOS环境下,无法进入SUSPEND模式

[复制链接]

1

主题

0

回帖

15

积分

英勇黄铜

积分
15
发表于 2026-7-22 11:04:02 | 显示全部楼层 |阅读模式 来自 广东
Information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: TL3218B
SDK及版本: tl_ble_sdk V4.0.4.2
在SDK-->vendor-->acl_peripheral_demo基础上开发,设备广播间隔一秒;由于需要持续读取其他传感器数据,使用SUSPEND省电模式,未使用DeepRetention


配置SUSPEND模式管理
blc_ll_enOsPowerManagement_module();

blc_ll_initPowerManagement_module();

blc_pm_setSleepMask(PM_SLEEP_LEG_ADV | PM_SLEEP_ACL_PERIPHR);

blc_pm_setDeepsleepRetentionEnable(PM_DeepRetn_Disable);

blc_ll_registerTelinkControllerEventCallback (BLT_EV_FLAG_SUSPEND_EXIT, user_set_flag_suspend_exit);


读取和处理外部传感器数据后,以下调用进入SUSPEND

blc_pm_setWakeupSource(PM_WAKEUP_TIMER);
blc_pm_setSleepMask(PM_SLEEP_LEG_ADV | PM_SLEEP_ACL_PERIPHR);
bls_pm_setManualLatency(0);

blc_sdk_main_loop();


代码运行后,手机端识别到设备的广播包,进入SUSPEND失败;单独调用cpu_sleep_wakeup(SUSPEND_MODE , PM_WAKEUP_TIMER, clock_time() + SYSTEM_TIMER_TICK_1S)进入SUSPEND成功

3

主题

86

回帖

304

积分

版主

积分
304
发表于 2026-8-7 18:12:00 | 显示全部楼层 来自 上海
麻烦您精简代码,排查导致无法进入休眠的相关改动;如果有需要,可以贴出修改代码,我们一同分析排查
FreeRTOS 的休眠逻辑由空闲任务处理,休眠动作于 vPortSuppressTicksAndSleep_i 内调用 blc_pm_handler 执行。该段代码已经开源,您可以查阅参考,也可借助 GPIO 电平抓取空闲任务的运行状态。
另外请勿在普通任务上下文调用 cpu_sleep_wakeup,该操作容易打乱 FreeRTOS 调度时序,进而诱发各类未知异常。

后续有疑问随时沟通。

本版积分规则

关注公众号
隐私政策|Telink forum

相关侵权、举报、投诉及建议等,请发 E-mail:forum@telink-semi.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|沪ICP备17008231号-1 |沪公网安备31011502403548号

在本版发帖返回顶部