在主循环期间醒来

5个职位/ 0个新
最后发表
mjara
离线
最后看到:4年1个月前
加入:2016-08-17二十20
在主循环期间醒来

大家好,我有一个问题,从主循环期间延长睡眠da4580。这就是我所做的。

0.-系统正常运行(init, adv, connect, disconnect,正常调度)
1.—系统在出现内部情况后被设置为长时间休眠。
2.—主循环每10秒启动一次,因为我将CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS设置为10秒。
3.—在主循环期间,在cb app_on_ble_powered中,我检查了ADC值是否高于阈值。如果是,则返回KEEP_POWERED。相反,它返回GOTO_SLEEP。
4.-我和3一样。但是考虑到cb app_on_system_powered。如果是,那么它返回KEEP_POWERED,并且我用arch_disable_sleep禁用睡眠模式。相反,它返回GOTO_SLEEP。

假设ADC值高于阈值,例程将在唤醒模块时产生结果,因为我测量到更高的电流消耗(500 uA),但ble调度没有运行。例如da14580没有开始做广告。我如何确保da14580启动原始ble时间表?也许我遗漏了什么?

谢谢你!

Matias

设备:
MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨mjara,

嗨mjara,

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

由于MT_dialog

mjara
离线
最后看到:4年1个月前
加入:2016-08-17二十20
你好MT_dialog,

你好MT_dialog,

我试图在app_on_system_powered回调中使用user_app_adv_start(),它开始发布广告。但它只做了一次,所以我猜调度程序没有工作。

为了让调度程序进行调度,哪些命令必须是正确的?

谢谢你的帮助!

Matias

mjara
离线
最后看到:4年1个月前
加入:2016-08-17二十20
你好MT_Dialog,

你好MT_Dialog,

我检查和问题是,这两个回调函数继续测量ADC。我添加了一些控件,在da14580醒来后返回GOTO_SLEEP。然后,如果我使用user_app_adv_start(),调度器就开始正常调度。

谢谢你!

Matias

MT_dialog
离线
最后看到:三个月三个星期前
工作人员
加入:2015-06-08 34
嗨mjara,

嗨mjara,

很高兴你发现了问题。在main_func()函数的main while循环中,大多数回调都被调用和执行,schedule_while_ble_on()函数调用rwip_schedule()函数,该函数服务于所有挂起的消息。app_on_system_powered app_asynch_proc()()和相应的回调,如果回调返回KEEP_POWERED虽然(app_asynch_proc () ! = GOTO_SLEEP)将真实和schedule_while_ble_on()将会再次执行因此rwip_schedule()将再次为了执行时间表的任何消息。

由于MT_dialog