Hi Philippe,
Thanks for answering my previous question. However, I encountered another one
regarding rt_task_wait_period(). NowI fixed a problematic parameter in
rt_task_set_periodic(), and add the checking of the return values of
rt_task_wait_period() and rt_task_set_periodic(). I use
rt_task_set_periodic()to set a period of 500 ms for a rt_task, and call
rt_task_wait_period() later. It seems that sometimes rt_task_wait_period()works
good, but sometimes it just returns 0 immediately. Here is what my code looks
like:
unsigned long overrun;
RTIME release_time;
if (0 != rt_task_set_periodic(NULL, TM_NOW, 500000000){
rt_printf("Error\n");
}
....
while (1){
release_time = rt_timer_read();
//Store release_time in an array for offline analysis
//Some computation taking about 100 ms
if (0 != rt_task_wait_period(&overrun)){
rt_printf("Error\n");
}
}
I noticed that, during the program's execution, no "Error" was printed, but
some consecutive values of release_time is about 100 ms which is the
computation time and far less than the period 500 ms.
This problem seems weird to me. Did I possibly overlook something?
Thanks,
Tom
________________________________
From: Philippe Gerum <[email protected]>
To: Tom Z <[email protected]>
Cc: "[email protected]" <[email protected]>
Sent: Tuesday, 23 April 2013 11:03 AM
Subject: Re: [Xenomai] rt_task_wait_period returns -11 (-EAGAIN)
On 04/23/2013 06:00 PM, Tom Z wrote:
> Hi,
>
> It seems this problem didn't occur before, but yesterday when I ran the same
> program on the same platform, a statement in my program calling
> rt_task_wait_period() returns -11. I looked up the error code, and 11 is the
> value of EAGAIN defined in <LINUX INCLUDE>/asm-generic/error_base.h. So I
> tried to modify my code like this
>
> unsigned long overrun;
>
> ret = -EAGAIN
> while(-EAGAIN == ret)
> ret = rt_task_wait_period( &overrun);
>
>
> But it keeps spinning and throws an error in the end: CPU time exceeded.
>
>
>
> What would be the possible cause? My platform is a Core 2 Duo laptop with
> Xenomai 2.6.2.1 on Linux 3.5.7.
>
Check the doc for EWOULDBLOCK. rt_task_set_periodic() was not
called for the task.
--
Philippe.
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai