嵌入式技术论坛
直播中

ss

7年用户 8762经验值
擅长:电源/新能源 制造/封装 RF/无线
私信 关注
[问答]

请问该使用什么方法重新设定软件定时器的定时时间呢

在程序中使用了RT-Thread中的软件定时器,初始化时候设定了一个超时时间为10S。我目前想实现的功能为:

1.在10S之内,发生了特定的事件,则将定时器复位重新开始计数直到超时;(假如一直有特定事件发生,则超时触发函数一直不会执行)
我实际调试发现:在特定事件发生时候,调用了rt_timer_control()函数重新设定超时函数定时时间。

rt_timer_control(&System_Updates_Hz_Timer,RT_TIMER_CTRL_SET_TIME, &Change_Timer);

//重新设定定时器时间,重新开始定时。检测缓冲数组2是否超时时刻还未接收满数据
可时间软件定时器触发超时函数的时间似乎一直没有改变,计算时间是从软件定时器初始化时候开始计算的。请问,该使用什么方法重新设定软件定时器的定时时间呢?

回帖(5)

ss

2022-3-29 09:33:04
补充说明:

//重新设定定时器时间,重新开始定时。检测缓冲数组2是否超时时刻还未接收满数据

中的Change_Timer变量定义为

rt_tick_t Change_Timer=Syste_Updates_Hz_Timeout;

Syste_Updates_Hz_Timeout是被定义为1000的宏。
举报

ss

2022-3-29 09:33:18
重新设置定时器时间后是否重新start呢?

rt_timer_control(&(thread->thread_timer), RT_TIMER_CTRL_SET_TIME, &time);
rt_timer_start(&(thread->thread_timer));
举报

ss

2022-3-29 09:33:40
按我的理解,如果调用rt_timer_delete(timer1);
<>
timer1应该自动设为RT_NULL,可是事实不是这样的,这样写程序时需要检查rt_timer_delete()==RT_EOK,然后再手动设timer1=RT_NULL,希望版主能改进一下,包括其他rt_objcet,都是这样,这不符合一般OS的惯例。
举报

ss

2022-3-29 09:33:52
如果要清成RT_NULL,就需要传递进去指针的指针了,对API的更改将十分庞大。
举报

ss

2022-3-29 09:33:59
这里的timer1本来不就是指向struct rt_timer的指针吗?(rt_timer_t timer1)
举报

更多回帖

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