关于RT-Thread中的软定时器使用疑问请教

发布于 2010-01-23 16:14:20

在程序中使用了RT-Thread中的软件定时器,初始化时候设定了一个超时时间为10S。我目前想实现的功能为:
1.在10S之内,发生了特定的事件,则将定时器复位重新开始计数直到超时;(假如一直有特定事件发生,则超时触发函数一直不会执行)

我实际调试发现:在特定事件发生时候,调用了rt_timer_control()函数重新设定超时函数定时时间。

rt_timer_control(&System_Updates_Hz_Timer,RT_TIMER_CTRL_SET_TIME, &Change_Timer);    
//重新设定定时器时间,重新开始定时。检测缓冲数组2是否超时时刻还未接收满数据

可时间软件定时器触发超时函数的时间似乎一直没有改变,计算时间是从软件定时器初始化时候开始计算的。请问,该使用什么方法重新设定软件定时器的定时时间呢?

查看更多

关注者
0
被浏览
5.1k
7 个回答
swordlife
swordlife 2010-01-23

补充说明:

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

中的Change_Timer变量定义为

rt_tick_t Change_Timer=Syste_Updates_Hz_Timeout;

Syste_Updates_Hz_Timeout是被定义为1000的宏。

shaolin
shaolin 2010-01-24

重新设置定时器时间后是否重新start呢?

rt_timer_control(&(thread->thread_timer), RT_TIMER_CTRL_SET_TIME, &time);
rt_timer_start(&(thread->thread_timer));
coldfish
coldfish 2010-02-06
按我的理解,如果调用rt_timer_delete(timer1);<>
timer1应该自动设为RT_NULL,可是事实不是这样的,这样写程序时需要检查rt_timer_delete()==RT_EOK,然后再手动设timer1=RT_NULL,希望版主能改进一下,包括其他rt_objcet,都是这样,这不符合一般OS的惯例。
bernard
bernard 2010-02-06
按我的理解,如果调用rt_timer_delete(timer1);<>
timer1应该自动设为RT_NULL,可是事实不是这样的,这样写程序时需要检查rt_timer_delete()==RT_EOK,然后再手动设timer1=RT_NULL,希望版主能改进一下,包括其他rt_objcet,都是这样,这不符合一般OS的惯例。


如果要清成RT_NULL,就需要传递进去指针的指针了,对API的更改将十分庞大。
coldfish
coldfish 2010-02-09
这里的timer1本来不就是指向struct rt_timer的指针吗?(rt_timer_t timer1)
bernard
bernard 2010-02-09
这里的timer1本来不就是指向struct rt_timer的指针吗?(rt_timer_t timer1)


指向指针的指针,相差挺大的呢。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览