@@ -356,37 +356,46 @@ rt_err_t rt_ktime_hrtimer_detach(rt_ktime_hrtimer_t timer)
356
356
357
357
/************************** delay ***************************/
358
358
359
- rt_err_t rt_ktime_hrtimer_sleep (unsigned long cnt )
359
+ void rt_ktime_hrtimer_delay_init (struct rt_ktime_hrtimer * timer )
360
+ {
361
+ rt_ktime_hrtimer_init (timer , "hrtimer_sleep" , 0 , RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_HARD_TIMER ,
362
+ _sleep_timeout , & (timer -> sem ));
363
+ }
364
+
365
+ void rt_ktime_hrtimer_delay_detach (struct rt_ktime_hrtimer * timer )
366
+ {
367
+ rt_ktime_hrtimer_detach (timer );
368
+ }
369
+
370
+ rt_err_t rt_ktime_hrtimer_sleep (struct rt_ktime_hrtimer * timer , unsigned long cnt )
360
371
{
361
- struct rt_ktime_hrtimer timer ;
362
372
rt_err_t err ;
363
373
364
374
if (cnt == 0 )
365
375
return - RT_EINVAL ;
366
376
367
- rt_ktime_hrtimer_init ( & timer , "hrtimer_sleep" , cnt , RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_HARD_TIMER ,
368
- _sleep_timeout , & ( timer . sem )) ;
377
+ timer -> timeout_cnt = cnt + rt_ktime_cputimer_getcnt ();
378
+ timer -> init_cnt = cnt ;
369
379
370
- rt_ktime_hrtimer_start (& timer ); /* reset the timeout of thread timer and start it */
371
- err = rt_sem_take_interruptible (& (timer . sem ), RT_WAITING_FOREVER );
372
- rt_ktime_hrtimer_keep_errno (& timer , err );
380
+ rt_ktime_hrtimer_start (timer ); /* reset the timeout of thread timer and start it */
381
+ err = rt_sem_take_interruptible (& (timer -> sem ), RT_WAITING_FOREVER );
382
+ rt_ktime_hrtimer_keep_errno (timer , err );
373
383
374
- rt_ktime_hrtimer_detach (& timer );
375
384
return RT_EOK ;
376
385
}
377
386
378
- rt_err_t rt_ktime_hrtimer_ndelay (unsigned long ns )
387
+ rt_err_t rt_ktime_hrtimer_ndelay (struct rt_ktime_hrtimer * timer , unsigned long ns )
379
388
{
380
389
unsigned long res = rt_ktime_cputimer_getres ();
381
- return rt_ktime_hrtimer_sleep ((ns * RT_KTIME_RESMUL ) / res );
390
+ return rt_ktime_hrtimer_sleep (timer , (ns * RT_KTIME_RESMUL ) / res );
382
391
}
383
392
384
- rt_err_t rt_ktime_hrtimer_udelay (unsigned long us )
393
+ rt_err_t rt_ktime_hrtimer_udelay (struct rt_ktime_hrtimer * timer , unsigned long us )
385
394
{
386
- return rt_ktime_hrtimer_ndelay (us * 1000 );
395
+ return rt_ktime_hrtimer_ndelay (timer , us * 1000 );
387
396
}
388
397
389
- rt_err_t rt_ktime_hrtimer_mdelay (unsigned long ms )
398
+ rt_err_t rt_ktime_hrtimer_mdelay (struct rt_ktime_hrtimer * timer , unsigned long ms )
390
399
{
391
- return rt_ktime_hrtimer_ndelay (ms * 1000000 );
400
+ return rt_ktime_hrtimer_ndelay (timer , ms * 1000000 );
392
401
}
0 commit comments