在主循环中醒来

5个员额/0个新员额
最后一篇文章
姆贾拉
离线
最后一次见到:4年4个月前
加入:2016-08-17 20:20
在主循环中醒来

大家好,在主循环期间,我遇到了一个关于将da4580从长时间睡眠中唤醒的问题。这就是我所做的。

0.-系统正常运行(初始化、高级、连接、断开、正常计划)
1.-系统在出现内部状况后设置为延长睡眠。
2.-主循环每10秒启动一次,因为我将CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS设置为10秒。
3.-在主回路中,在cb应用程序中,我检查ADC值是否高于阈值。如果是,则返回“保持供电”。相反,它会让你重新入睡。
-我和3一样,。但考虑到cb应用程序的供电系统。如果是,那么它会返回KEEP_POWERED,并且我会使用arch_disable_sleep禁用睡眠模式。相反,它会让你重新入睡。

假设ADC值高于阈值,rutine会在唤醒模块时产生,因为我测量到更高的电流消耗(500 uA),但ble计划没有运行。例如,da14580没有开始做广告。如何确保da14580启动原始的ble计划?也许我错过了什么?

非常感谢。

马蒂斯

设备:
MT_对话框
离线
最后一次见到:6个月4周前
工作人员
加入:2015-06-08 11:34
嗨,mjara,

嗨,mjara,

我不太明白这个问题,如果您从app_on_system_POWERED回调返回KEEP_POWERED,设备将不会通过睡眠过程(睡眠检查等),但它将重新运行调度程序rwip_schedule()(如注释所示)。rwip_schedule()将调度您插入内核FIFO中的任何命令,在您超过阈值并决定返回KEEP_POWERED并外出播发后,是否发送播发命令以便调度程序进行调度?

谢谢你的对话

姆贾拉
离线
最后一次见到:4年4个月前
加入:2016-08-17 20:20
你好,MT_dialog,

你好,MT_dialog,

我尝试在app_on_system_启动的回调中使用user_app_adv_start(),它开始做广告。但是它只做了一次,所以我想调度程序不工作了。

哪一个命令必须是正确的,才能使调度程序进行调度?

谢谢你的帮助!

马蒂斯

姆贾拉
离线
最后一次见到:4年4个月前
加入:2016-08-17 20:20
你好,MT_Dialog,

你好,MT_Dialog,

我正在检查,问题是两个回调函数都在继续测量ADC。我添加了一些控件以在da14580唤醒后返回GOTO_睡眠。然后,如果我使用user\u app\u adv\u start(),调度程序将开始正常调度。

非常感谢。

马蒂斯

MT_对话框
离线
最后一次见到:6个月4周前
工作人员
加入:2015-06-08 11:34
嗨,mjara,

嗨,mjara,

很高兴你发现了问题。仅供参考,调度器没有要调度的正确命令,在main_func()函数的main while循环中,大多数回调都被调用和执行,schedule_while_ble_on()函数调用rwip_schedule()函数,该函数为所有挂起的消息提供服务。在app_asynch_proc()中,将调用app_on_system_powered()并调用相应的回调,如果该回调返回KEEP_powered,while(app_asynch_proc()!=GOTO_SLEEP)将为true,并且将再次执行schedule_while_on(),因此将再次执行rwip_schedule(),以调度任何消息。

谢谢你的对话