去年我问了一个问题,我使用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);
}
设备:
嗨Jackiechau,
没有功能将冻结和恢复当前计时器进行计数,或者甚至退回以来定时器已经计算的时间量。580中的计时器没有这种功能。
谢谢mt_dialog.
嗨mt_dialog,
然后是正确的,因为单线程程序不是发生的竞赛条件问题?谢谢。
嗨Jackiechau,
你能解释一下你究竟是什么意思“比赛条件”,你担心哪些事件之间的竞争条件?例如,在将计时器进行定时器和取消之前取消它之间的竞争条件?
谢谢mt_dialog.
嗨mt_dialog,
在主循环时,始终读取变量“timercounter”,并且应用程序定时器的回调更新此变量。当App Timer的回调正在尝试同时更新“TimerCounter”的值时,才担心读取错误的值“timercounter”。如果App Timer的回调不是中断例程,它只是只有结构程序的一部分,我认为不会发生竞争条件。谢谢。
嗨Jackiechau,
只是清楚,ke_timers被认为是BLE事件,这意味着要安排BLE核心,并且应定期运行RWIP_Schedule()。
我没有看到您提到的方案的任何竞争条件,KE_Timers不是中断驱动的事件,当指定的内核定时器已经过调度程序时,请提供定时器已过时的消息,查找特定计时器的回调调用回调。
谢谢mt_dialog.