Timer 如何停止freertos计时器并重新启动它,而不将当前的计时计数重置为0

Timer 如何停止freertos计时器并重新启动它,而不将当前的计时计数重置为0,timer,freertos,Timer,Freertos,我正在freertos中创建一个一次性xTimer。一段时间后,我想停止它,然后再次启动,但不重置滴答计数。 例如,周期是10秒,5秒后我停止计时器,如果我再次启动计时器,我希望在5秒后调用回调。 此时,当我再次启动计时器时,计时器刚刚复位,我在10秒后收到回调 我遗漏了什么吗?是的,如果您重置计时器而不更改其周期;计时器将在xTimerCreate()中初始化的时间段内运行。您应该首先获取此计时器的剩余时间,,然后停止它。然后,您可以执行任何需要的操作,然后在剩余时间内调用xtimerchan

我正在freertos中创建一个一次性xTimer。一段时间后,我想停止它,然后再次启动,但不重置滴答计数。 例如,周期是10秒,5秒后我停止计时器,如果我再次启动计时器,我希望在5秒后调用回调。 此时,当我再次启动计时器时,计时器刚刚复位,我在10秒后收到回调


我遗漏了什么吗?

是的,如果您重置计时器而不更改其周期;计时器将在
xTimerCreate()
中初始化的时间段内运行。您应该首先获取此计时器的剩余时间,,然后停止它。然后,您可以执行任何需要的操作,然后在剩余时间内调用
xtimerchangepiriod()

TickType_t timeLeft;

timeLeft = xTimerGetExpiryTime(myTimer) - xTaskGetTickCount();
xTimerStop(myTimer);

// Do some work

xTimerChangePeriod((myTimer, timeLeft, 1000);

是,如果重置计时器而不更改其周期;计时器将在
xTimerCreate()
中初始化的时间段内运行。您应该首先获取此计时器的剩余时间,,然后停止它。然后,您可以执行任何需要的操作,然后在剩余时间内调用
xtimerchangepiriod()

TickType_t timeLeft;

timeLeft = xTimerGetExpiryTime(myTimer) - xTaskGetTickCount();
xTimerStop(myTimer);

// Do some work

xTimerChangePeriod((myTimer, timeLeft, 1000);

您可以将剩余时间存储在计时器中,停止并在需要时使用存储的值重新加载。您可以将剩余时间存储在计时器中,停止并在需要时使用存储的值重新加载。。