@@ -52,6 +52,8 @@ static void _hrtimer_timeout(void *parameter)
52
52
_outcb (parameter );
53
53
}
54
54
55
+ static struct rt_timer _sh_rtimer ;
56
+
55
57
rt_weak rt_err_t rt_ktime_hrtimer_settimeout (unsigned long cnt , void (* timeout )(void * param ), void * param )
56
58
{
57
59
static rt_timer_t timer = RT_NULL ;
@@ -75,7 +77,8 @@ rt_weak rt_err_t rt_ktime_hrtimer_settimeout(unsigned long cnt, void (*timeout)(
75
77
76
78
if (timer == RT_NULL )
77
79
{
78
- timer = rt_timer_create ("shrtimer" , _hrtimer_timeout , param , cnt , RT_TIMER_FLAG_ONE_SHOT );
80
+ timer = & _sh_rtimer ;
81
+ rt_timer_init (timer , "shrtimer" , _hrtimer_timeout , param , cnt , RT_TIMER_FLAG_ONE_SHOT );
79
82
}
80
83
else
81
84
{
@@ -209,8 +212,10 @@ void rt_ktime_hrtimer_init(rt_ktime_hrtimer_t timer,
209
212
RT_ASSERT (timer != RT_NULL );
210
213
RT_ASSERT (timeout != RT_NULL );
211
214
215
+ rt_memset (timer , 0 , sizeof (struct rt_ktime_hrtimer ));
216
+
212
217
timer -> flag = flag ;
213
- timer -> name = name ;
218
+ rt_strncpy ( timer -> name , name , RT_NAME_MAX - 1 ) ;
214
219
215
220
/* set deactivated */
216
221
timer -> flag &= ~RT_TIMER_FLAG_ACTIVATED ;
@@ -228,13 +233,13 @@ rt_err_t rt_ktime_hrtimer_start(rt_ktime_hrtimer_t timer, unsigned long delay_cn
228
233
/* parameter check */
229
234
RT_ASSERT (timer != RT_NULL );
230
235
RT_ASSERT (delay_cnt < (_HRTIMER_MAX_CNT / 2 ));
231
- RT_ASSERT ((timer -> flag & RT_TIMER_FLAG_ACTIVATED ) == 0 );
232
236
233
237
timer -> delay_cnt = delay_cnt ;
234
238
timer -> timeout_cnt = timer -> delay_cnt + rt_ktime_cputimer_getcnt ();
235
239
236
240
level = rt_spin_lock_irqsave (& _spinlock );
237
241
242
+ rt_list_remove (& timer -> node );
238
243
_insert_timer_to_list_locked (timer );
239
244
_set_next_timeout_locked ();
240
245
@@ -388,7 +393,7 @@ rt_err_t rt_ktime_hrtimer_sleep(struct rt_ktime_hrtimer *timer, unsigned long cn
388
393
RT_INTERRUPTIBLE );
389
394
rt_ktime_hrtimer_keep_errno (timer , err );
390
395
391
- return RT_EOK ;
396
+ return err ;
392
397
}
393
398
394
399
rt_err_t rt_ktime_hrtimer_ndelay (struct rt_ktime_hrtimer * timer , unsigned long ns )
0 commit comments