嗨,对话框:
需求:用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吗?
关键词:
设备:
我也想知道答案,当我打开ARCH_EXT_SLEEP_ON, app_easy_timer(2000, timeout_cb)函数不工作。时间一到,程序就不执行了
timeout_cb()回调函数。
你好理查德,landu,
如果您使用中文论坛发帖,我将感激,因为我不能理解这个问题。我只能假设你使用的app_easy_timer值为2000,回调从来没有执行,我不能复制你提到的,使用带有ARCH_EXT_SLEEP_ON的ble_app_peripheral项目,并将APP_ADV_DATA_UPDATE_TO更改为2000的值,通过使用arch_set_pxact_gpio(),我能够看到回调执行。也许还有别的原因导致你无法看到回调执行,你在哪里设置计时器?或者如何验证回调从未被调用?
由于MT_dialog
嗨,MT_dialog,
感谢您的及时回复。
对不起,我以为英文或中文就可以了。我昨天解决了这个问题。不触发回调的原因是我调用计时器函数的地方。它应该在ble核心复位后被调用。所以我改变调用app_easy_timer这个func在“user_app_adv_start”,然后它工作。
我也解决了这个问题。我发现,当我使用MDK在线调试、下载并运行程序时,timeout_cb()函数不起作用。但当我退出调试模式时,它工作了。
当我使用ARCH_SLEEP_OFF,运行MDK调试,timeout_cb()函数工作,我可以调试程序和设置断点。