挂起和恢复内核计时器

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//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
离线
最后看到:4个月6天前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

没有函数将冻结和恢复当前计时器的计数,甚至返回计时器自启动以来已经计数的时间。580的计时器没有这样的功能。

由于MT_dialog

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

嗨MT_dialog,

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

MT_dialog
离线
最后看到:4个月6天前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

你能解释一下“竞态条件”到底是什么意思吗?你担心的是哪个事件之间的竞态条件?例如,在设置计时器和在它过去之前取消它之间的竞争条件?

由于MT_dialog

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

嗨MT_dialog,

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

MT_dialog
离线
最后看到:4个月6天前
工作人员
加入:2015-06-08 34
嗨jackiechau,

嗨jackiechau,

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

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

由于MT_dialog