找回密码
 立即注册

微信扫码登录

查看: 302|回复: 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成功

0

主题

76

回帖

253

积分

版主

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

后续有疑问随时沟通。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Telink forum ( 沪ICP备17008231号-1 )

GMT+8, 2026-8-11 10:27 , Processed in 0.085401 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表