嵌入式技术论坛
直播中

李玉兰

8年用户 1553经验值
私信 关注
[问答]

在系统运行的时候更改定时器的超时时间根本不对请问问题出在哪里

我动态开辟了一个定时器,由于需要在系统运行的时候更改定时器的超时时间,所以设计了下面的函数

void PollingTimerInit(void)
{
static rt_timer_t timer;
if (timer != RT_NULL)
{
rt_timer_control(timer, RT_TIMER_CTRL_SET_TIME, (void*)(g_configParam.pollingtime100060/(1000/RT_TIMER_TICK_PER_SECOND)));
return;
}
/* 若巡检时间为0,则默认关闭定时巡检功能 /
if(g_configParam.pollingtime == 0)
{
return;
}
/
巡检定时器创建,缺省1800tick, 3S /
timer = rt_timer_create("timPolling",
timPolling,
RT_NULL,
g_configParam.pollingtime
100060/(1000/RT_TIMER_TICK_PER_SECOND),
RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER // modified by wangt120723 将硬件定时变成软件定时
);
RT_ASSERT(timer != RT_NULL);
/
启动巡检计时 */
rt_timer_start(timer);
}

若要更改定时器超时时间,则还调用此函数,这时rt_timer_control会被执行,但是现在的问题执行完rt_timer_control后得到的不是我设置的时间,超时时间根本不对,我的RT_TIMER_TICK_PER_SECOND为1000
请问我问题出在那里,多谢帮助,不胜感激!!

回帖(4)

陈杰

2022-9-23 11:23:12
LZ 是在定时器跑着的时候改的?貌似不能这样……
举报

李玉兰

2022-9-23 11:23:25
对啊 就是在定时器跑的时候改的,rt_timer_control不就是随时改变 超时时间么?
举报

张莉

2022-9-23 11:23:33
应该不是的。看源代码,那个 control 就只改了下超时时间,并没有修改链表……
举报

张莉

2022-9-23 11:23:40
应该是

rt_timer_stop
rt_timer_control
rt_timer_start
举报

更多回帖

发帖
×
20
完善资料,
赚取积分