暂停并恢复内核计时器

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
6个帖子/ 0新
最后一篇
千岛
离线
最后一次露面:3年6个月前
加入:2016-01-15 01:32
暂停并恢复内核计时器

去年我问了一个问题,我使用app_timer_set启动计时器,在这个计时器的回调中,变量“timercounter”将递增,timercounter“将在main()中检索,我想在阅读前暂停这个计数器“时间戳”的价值再次恢复。所以我想知道如何暂停和恢复这个计时器。一个人回答说,没有必要关注比赛条件问题,因为它是一个单线程程序,谢谢。

void main(空白){
uint8_t get_time;

app_timer_set(sps_timer,task_app,100);
而(1){
// < - 暂停回调???
get_time = timercounter;
// < - 恢复回调???
API();
}
}

在app_ble_timer_handler(x,x,x,x)
{
timercounter ++;
app_timer_set(sps_timer,task_app,100);
return(ke_msg_consumed);
}

设备:
mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Jackiechau,

嗨Jackiechau,

没有功能将冻结和恢复当前计时器进行计数,或者甚至退回以来定时器已经计算的时间量。580中的计时器没有这种功能。

谢谢mt_dialog.

千岛
离线
最后一次露面:3年6个月前
加入:2016-01-15 01:32
嗨mt_dialog,

嗨mt_dialog,

然后是正确的,因为单线程程序不是发生的竞赛条件问题?谢谢。

mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Jackiechau,

嗨Jackiechau,

你能解释一下你究竟是什么意思“比赛条件”,你担心哪些事件之间的竞争条件?例如,在将计时器进行定时器和取消之前取消它之间的竞争条件?

谢谢mt_dialog.

千岛
离线
最后一次露面:3年6个月前
加入:2016-01-15 01:32
嗨mt_dialog,

嗨mt_dialog,

在主循环时,始终读取变量“timercounter”,并且应用程序定时器的回调更新此变量。当App Timer的回调正在尝试同时更新“TimerCounter”的值时,才担心读取错误的值“timercounter”。如果App Timer的回调不是中断例程,它只是只有结构程序的一部分,我认为不会发生竞争条件。谢谢。

mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Jackiechau,

嗨Jackiechau,

只是清楚,ke_timers被认为是BLE事件,这意味着要安排BLE核心,并且应定期运行RWIP_Schedule()。

我没有看到您提到的方案的任何竞争条件,KE_Timers不是中断驱动的事件,当指定的内核定时器已经过调度程序时,请提供定时器已过时的消息,查找特定计时器的回调调用回调。

谢谢mt_dialog.