挂起并恢复内核计时器

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
6个职位/ 0个新职位
最后发表
jackiechau
离线
最后看到:3年6个月前
加入:2016-01-15 01:32
挂起并恢复内核计时器

去年我问了一个问题,我用app_timer_set启动一个计时器,在这个定时器回调,一个变量“timerCounter”将增加和timerCounter”将在主要检索(),我想暂停这个柜台前阅读的价值“timeCounter”,然后恢复一遍。所以我想知道如何挂起和恢复这个计时器。一个人回答说,不用担心竞争条件问题,因为这是一个单线程程序,谢谢。

void main (void) {
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);
返回(KE_MSG_CONSUMED);

设备:
MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

没有函数会冻结并恢复当前计时器进行计数,甚至返回计时器自启动以来已经计数的时间。在580中定时器没有这样的功能。

由于MT_dialog

jackiechau
离线
最后看到:3年6个月前
加入:2016-01-15 01:32
嗨MT_dialog,

嗨MT_dialog,

那么,竞态条件问题没有因为单线程程序而发生是正确的吗?谢谢。

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

你能解释一下什么是竞态条件吗?你担心的是哪个事件之间的竞态条件?例如,设置计时器和在计时器失效前取消它之间的竞争条件?

由于MT_dialog

jackiechau
离线
最后看到:3年6个月前
加入:2016-01-15 01:32
嗨MT_dialog,

嗨MT_dialog,

在主while循环中,一个变量"timerCounter"总是被读取,并且这个变量被app timer的回调更新。我担心一个错误的值“timerCounter”是读取时,应用程序计时器的回调是试图更新的值“timerCounter”在同一时间。如果app timer的回调不是一个中断例程,它只是结构程序的一部分,我认为竞争条件不会发生。谢谢。

MT_dialog
离线
最后看到:三个月两个星期前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

需要明确的是,ke_timers被认为是BLE事件,这意味着为了调度BLE核心,并且rwip_schedule()应该定期运行。

我没有看到任何竞态条件,ke_timers不是中断驱动的事件,当指定的内核计时器已经运行时,调度程序应该运行,提供计时器已经运行的消息,找到特定的计时器的回调,并调用回调。

由于MT_dialog