大家好,在主循环期间,我遇到了一个关于将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计划?也许我错过了什么?
非常感谢。
马蒂斯
设备:
嗨,mjara,
我不太明白这个问题,如果您从app_on_system_POWERED回调返回KEEP_POWERED,设备将不会通过睡眠过程(睡眠检查等),但它将重新运行调度程序rwip_schedule()(如注释所示)。rwip_schedule()将调度您插入内核FIFO中的任何命令,在您超过阈值并决定返回KEEP_POWERED并外出播发后,是否发送播发命令以便调度程序进行调度?
谢谢你的对话
你好,MT_dialog,
我尝试在app_on_system_启动的回调中使用user_app_adv_start(),它开始做广告。但是它只做了一次,所以我想调度程序不工作了。
哪一个命令必须是正确的,才能使调度程序进行调度?
谢谢你的帮助!
马蒂斯
你好,MT_Dialog,
我正在检查,问题是两个回调函数都在继续测量ADC。我添加了一些控件以在da14580唤醒后返回GOTO_睡眠。然后,如果我使用user\u app\u adv\u start(),调度程序将开始正常调度。
非常感谢。
马蒂斯
嗨,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(),以调度任何消息。
谢谢你的对话