请教app_easy_timer在周期性唤醒休眠时的正常用法

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
理查德。
离线
最后看到:3年3个星期前
加入:2017-01-08 04:10
请教app_easy_timer在周期性唤醒休眠时的正常用法

嗨,对话框:
需求:用SPI接口外接传感器,需要定时每隔20年代采样一次。程序工作在扩展休眠模式,我使用的是app_easy_timer()接口周期性的定时唤醒。现在需要先测试周期性唤醒功能 。
问题描述:在祝福向外开始广播时调用app_easy_timer(2000年,timeout_cb),超时后,进入定时超时回调timeout_cb处理,下面是timeout_cb大概的实现
空白timeout_cb(空白)
{…
If (xx_timerid != 0)
app_easy_timer_cancel (xx_timerid);//先取消

xx_timerid = app_easy_timer(2000年,timeout_cb); / /再启动

问题:(1)第一次唤醒后,回调函数中会调用取消定时器easy_timer_cancel(),然后功耗就升高了,大约在500 + ua。这是什么原因,这段代码有没有问题吗?是不是定时器使用方法不正确导致?

(2)另一个问题是,以上的实现好像只能唤醒1-2次,后面无法正常唤醒,所以想知道这个定时函数的使用技巧是什么,有哪些注意的地方,
比如,在timeout_cb内是否还能调用app_easy_timer吗?

关键词:
设备:
蓝布之下
离线
最后看到:3年10个月前
加入:2017-10-27 04:44
我也想知道答案

我也想知道答案,当我打开ARCH_EXT_SLEEP_ON, app_easy_timer(2000, timeout_cb)函数不工作。时间一到,程序就不执行了
timeout_cb()回调函数。

MT_dialog
离线
最后看到:6个月3个星期前
工作人员
加入:2015-06-08 34
你好理查德,landu,

你好理查德,landu,

如果您使用中文论坛发帖,我将感激,因为我不能理解这个问题。我只能假设你使用的app_easy_timer值为2000,回调从来没有执行,我不能复制你提到的,使用带有ARCH_EXT_SLEEP_ON的ble_app_peripheral项目,并将APP_ADV_DATA_UPDATE_TO更改为2000的值,通过使用arch_set_pxact_gpio(),我能够看到回调执行。也许还有别的原因导致你无法看到回调执行,你在哪里设置计时器?或者如何验证回调从未被调用?

由于MT_dialog

理查德。
离线
最后看到:3年3个星期前
加入:2017-01-08 04:10
嗨,MT_dialog,

嗨,MT_dialog,

感谢您的及时回复。
对不起,我以为英文或中文就可以了。我昨天解决了这个问题。不触发回调的原因是我调用计时器函数的地方。它应该在ble核心复位后被调用。所以我改变调用app_easy_timer这个func在“user_app_adv_start”,然后它工作。

蓝布之下
离线
最后看到:3年10个月前
加入:2017-10-27 04:44
我也解决了这个问题

我也解决了这个问题。我发现,当我使用MDK在线调试、下载并运行程序时,timeout_cb()函数不起作用。但当我退出调试模式时,它工作了。
当我使用ARCH_SLEEP_OFF,运行MDK调试,timeout_cb()函数工作,我可以调试程序和设置断点。