Other Parts Discussed in Thread: CC2652R7
您好!
我尝试多次运行一次性计时器。 我所做的是 启动 计时器并在中间停止它、然后重新运行它。 第二次运行时、它未完成整个周期、而是从停止的位置开始。 我在下面创建了一个测试、用于显示此功能。 我使用的 CC2652R7板具有 SDK:7_10_01_24。 假设内部计时器计数直到计数达到周期时才复位。
此致、
肯尼斯·托马斯
sem_t timer_sem;
空 timerCallback (Timer_Handle 句柄、int_fast16_t 状态)
{
sem_post (&timer_sem);
}
空 testTimer()
{
sm_init (&timer_sem、0、0);
//配置一秒后一次性回调的计时器参数
Timer_Handle 定时器;
Timer_Params timer_params;
Timer_Params_(&timer_params);
Timer_params.periodUns = Timer_period_US;
Timer_params.period = 1000000;
Timer_params.timerCallback = timerCallback;
Timer_params.timerMode = Timer_Oneshot_callback;
//在计时器完成前启动/停止计时器
bool stop_early_and_restart =真;
如果(STOP_EARLY_AND_RESTART)
{
Timer_open (CONFIG_TIMER_3、&TIMER_PARAMS);
Timer_start (定时器);
usleep(500000);
Timer_stop (定时器);
Timer_close (定时器);
}
//重新启动计时器,但让它完成
Timer_open (CONFIG_TIMER_3、&TIMER_PARAMS);
uint32_t start_ticks = ClockP_getSystemTicks ();
Timer_start (定时器);
sm_wait (&timer_sem);
uint32_t stop_ticks = ClockP_getSystemTicks ();
Timer_stop (定时器);
Timer_close (定时器);
printf ("[timer]已用时间=%d msec"、((STOP_TICK - START_TICK)* ClockP_getSystemTickPeriod ())/ 1000);
sm_destroy (&timer_sem);
}

