你好,
到目前为止我只找到外围调用的示例arch_ble_ext_wakeup_on ()
之前配置按钮,睡觉。
即程序并不打算工作(广告或应对计时器),等待一个按钮点击。
此外,调用wkupct回调时它类似:
>静态孔隙app_button_press_cb(空白)
> {
>如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
> {
> periph_init ();
>}
>
>如果(arch_ble_ext_wakeup_get ())
> {
> arch_set_sleep_mode (app_default_sleep_mode);
> arch_ble_force_wakeup ();
> arch_ble_ext_wakeup_off ();
> app_easy_wakeup ();
>}
>}
注意,调用arch_ble_ext_wakeup_off ()
关闭一个布尔标志(命名sleep_ext_force
),所以未来的调用arch_ble_ext_wakeup_get ()
将返回假
。因此,如果有很多中断在短时间间隔(app_button_press_cb ()
被称为连续多次),代码块包装在第二个如果
语句将只被执行一次。
我们有一个项目,其中有许多在短时间间隔的中断,我们要回复只有一次。然而,我们希望这个项目继续“工作”等待“按钮”(广告和运行计时器)——例如,计算按钮点击的数量和更新广告有效载荷与这个数字。
我们正在经历一个非常奇怪的行为——程序重置,程序停止工作和浪费电池,等。我们不知道错误在哪里。
有一个例子程序做一些类似的事情吗?
我应该遵循类似的模式,即做某事:
> bool waiting_for_button __attribute__ (((“retention_mem_area0”)部分,zero_init));
>静态孔隙app_button_press_cb(空白)
> {
>如果(GetBits16 (SYS_STAT_REG PER_IS_DOWN))
> {
> periph_init ();
>}
>
>如果(waiting_for_button)
> {
> arch_set_sleep_mode (app_default_sleep_mode);
> arch_ble_force_wakeup ();
> waiting_for_button = false;
> app_easy_wakeup ();
>}
>}
例如我应该使用不同的布尔标志waiting_for_button
这不会影响睡眠arch_ble_ext_wakeup_on ()
吗?
有风险在监听按钮点击没有external-wakeup-on模式?像打断程序如果单击按钮是在完全相同的时刻执行吗?
我知道wkupct_enable_irq
接受两个参数的事件数量和debouncing-time。我们将使用更高的事件数量,以避免太多的唤醒。我想确保即使在较低的事件数量程序不重置或疯狂。
问候,
奥伦佐莫
啊,没有html标签维护缩进…对不起,丑陋的代码。
嗨,奥伦,
我不确定如果我得到底线的问题,请看看下面的评论,希望能提供一些帮助。
不,没有额外的示例,演示如何醒来中断使用一个按钮或处理多个中断醒来。arch_ble_ext_wakeup_on(),使用的是为了抑制设备的定期醒来每10秒,如果你有arch_ble_ext_wakeup_on()你将能够从内部定时器醒来,即使你不调用arch_ble_ext_wakeup_on()你能听一个外部中断醒来,你不需要调用arch_ble_ext_wakeup_on()为了使外部中断(你可以验证通过移除arch_ble_ext_wakeup_on()和offcourse if()条件的回调,但如果你注意,设备会自动醒来在一段短暂的10秒时间)。Offcourse如果中断发生在同一时间醒来ISR是执行的中断将注册为等待,一旦出现当前运行的ISR退出,这就是为什么你需要保持ISR尽可能短。
由于MT_dialog
你好,
现在我注意到我的一个老帖子:https://support.dialog-semiconductor.com/forums/post/dialog-smartbond-bl..。。
我们增加CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS从10秒到60秒——和固定的bug rwip_slot_2_lpcycles_rcx(即使用uint64_t代替uint32_t)。我们将会增加更多的1小时,所以我们可以忽略其功耗计算。
你已经有说,调用arch_ble_ext_wakeup_on()不会抑制计时器。我很困惑,因为上面的代码注释arch_ble_ext_wakeup_on说:“把祝福核心永久的睡眠。只有一个外部事件能唤醒它。祝福永远睡觉等待迫使唤醒。”。请更改评论。
我们还将改变这个程序,使其能看起来尽可能相似的代码示例(除了定时器和广告仍将运行时等待按钮点击)。
有什么负面影响使用arch_ble_ext_wakeup_on () ?显著延长wakeup-times吗?任何重大变化在功耗深/延长睡眠吗?为什么不是所有外围设备的默认使用arch_ble_ext_wakeup_on和抑制计时器吗?的10秒唤醒好?会发生什么如果我改变它为60秒,或1小时吗?
谢谢,
奥伦
嗨,奥伦,
我已经提到过什么arch_ble_ext_wakeup_on(),所以如果你增加CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS满意周期醒来值那么它的好不用arch_ble_ext_wakeup_on ()。所有外围例子所使用的函数不是因为只有ble_app_sleepmode去永久的睡眠没有任何祝福活动,如果这是不习惯你会发现小定期醒来。正如你提到的以前的文章(),超时的副产品GTL接口,因为你申请错误的补丁在以前的文章中提到的那应该可以增加价值。
由于MT_dialog