Am 09.07.2015 um 16:19 schrieb Gilles Chanteperdrix:
On Thu, Jul 09, 2015 at 02:15:55PM +0200, Johann Obermayr wrote:
Hello,

we have follow situation

u64 lrtdrv_time_of_irq_ns ;
void worker_task()
{
while(1)
     {
     rtdm_task_sleep_abs(lrtdrv_time_of_irq_ns + 950000ull,
RTDM_TIMERMODE_ABSOLUTE);
     do_something();
     }
}

_kernel_rtdm_irq_handler()
{
     lrtdrv_time_of_irq_ns = rtdm_clock_read_monotonic();
}

the  _kernel_irq_callback() is called every 1ms.
we will , that the worker_task begin 50us before next irq

But sometime, the worker task start ~50us after irq. Why ?
Best way to know, enable the I-pipe tracer, setup sufficient back
trace points, and when the wrong wake up happens, trigger an I-pipe
trace.

i will enable i-pipe tracer.
found out, that

rtdm_task_sleep_abs(xxx, RTDM_TIMERMODE_ABSOLUTE);
u64 calc = rtdm_clock_read_monotonic();

sometime the diff between xxx & calc is biger than 61000ns.

forget to say.
worker_task run on Core1
irq_handler run on Core0

Regards
  Johann

_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai

Reply via email to