有示例程序来响应按钮点击没有external-wakeup-only模式?

⚠️
大家好. .谢谢光临论坛。令人兴奋的消息!我们现在在移动的过程中,我们的新论坛平台,将提供更好的功能和包含在主对话框的网站。所有文章和帐户已经被迁移。我们现在只接受交通新论坛,请发布任何新的线程//www.xmece.com/support。我们将修复bug /优化搜索和标签在接下来的日子里。
5文章/ 0
最后发表
奥伦
离线
最后看到:1年9个月前
专家
加入:2014-06-28 22:03
有示例程序来响应按钮点击没有external-wakeup-only模式?

你好,
到目前为止我只找到外围调用的示例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。我们将使用更高的事件数量,以避免太多的唤醒。我想确保即使在较低的事件数量程序不重置或疯狂。

问候,
奥伦佐莫

关键词:
设备:
奥伦
离线
最后看到:1年9个月前
专家
加入:2014-06-28 22:03
啊,没有html标签

啊,没有html标签维护缩进…对不起,丑陋的代码。

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

嗨,奥伦,

我不确定如果我得到底线的问题,请看看下面的评论,希望能提供一些帮助。

不,没有额外的示例,演示如何醒来中断使用一个按钮或处理多个中断醒来。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

奥伦
离线
最后看到:1年9个月前
专家
加入:2014-06-28 22:03
你好,

你好,
现在我注意到我的一个老帖子: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小时吗?

谢谢,
奥伦

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

嗨,奥伦,

我已经提到过什么arch_ble_ext_wakeup_on(),所以如果你增加CFG_MAX_SLEEP_DURATION_EXTERNAL_WAKEUP_MS满意周期醒来值那么它的好不用arch_ble_ext_wakeup_on ()。所有外围例子所使用的函数不是因为只有ble_app_sleepmode去永久的睡眠没有任何祝福活动,如果这是不习惯你会发现小定期醒来。正如你提到的以前的文章(),超时的副产品GTL接口,因为你申请错误的补丁在以前的文章中提到的那应该可以增加价值。

由于MT_dialog