SIS in "real time"
Joel Sherrill
joel at rtems.org
Fri Apr 9 18:19:39 UTC 2021
Hi
I made some changes to test3.c so it can be compiled for RTEMS or
any "normal" POSIX host like Linux. I avoided the rtems timespec
addition method.
I think this does what you expect on Linux but didn't try it on RTEMS.
FWIW this is a good minimal example of how a program can support
being built for Linux and RTEMS. For bigger examples, I prefer the RTEMS
configuration and Init thread to be in a separate file. I think the psx
reporting
examples do that.
--joel
On Fri, Apr 9, 2021 at 12:45 PM Heinz Junkes <junkes at fhi-berlin.mpg.de>
wrote:
> Jiri, Joel, thanks for your answers.
>
> @Joel: I was wondering that rtems-examples in psx_example_3 does not wait
> 3 seconds.
>
> I made a curious observation:
>
> in the original code:
>
> clock_gettime( CLOCK_REALTIME, &timeout );
> timeout.tv_sec += 3;
> timeout.tv_nsec = 0;
> printf("The task is coming to enter in a timed wait\n");
> pthread_cond_timedwait(&cond, &mutex, &timeout);
>
>
> I then inserted some printfs and found that the "3" is added to the nsec’s.
>
> Then I added the rtems-timespec-helpers routines, but get the same
> behavior:
>
>
> void * print_hello(void * arg)
> {
> struct timespec now, timeout;
> rtems_timespec_set(&timeout, 3, 0);
>
> printf("<child>: Hello World! task with max priority \n");
> clock_gettime( CLOCK_REALTIME, &now );
> printf("now tv_sec = %d, tv_nsec = %d\n", now.tv_sec, now.tv_nsec);
> rtems_timespec_add_to(&timeout, &now);
> printf("timeout tv_sec = %d, tv_nsec = %d\n", timeout.tv_sec,
> timeout.tv_nsec);
> printf("The task is coming to enter in a timed wait\n");
> pthread_cond_timedwait(&cond, &mutex, &timeout);
> printf("The task is coming out from the timed wait \n");
> return NULL;
> }
>
> program output:
>
> <main> Enter in the main
> Creating first task
> <child>: Hello World! task with max priority
> now tv_sec = 4766459, tv_nsec = 567993600
> timeout tv_sec = 4766459, tv_nsec = 567993603
> The task is coming to enter in a timed wait
> The task is coming out from the timed wait
> First Task created
> Creating second task
> <child>: Hello World! Task with lowest priority Second task created
> <main> Out of the main
>
> If I now swap the arguments in the set-function , i.e. instead of
> rtems_timespec_set(&timeout, 3, 0);
>
> rtems_timespec_set(&timeout, 0, 3);
>
> it looks as it should
>
> <child>: Hello World! task with max priority
> now tv_sec = 10766729, tv_nsec = 567993600
> timeout tv_sec = 10766732, tv_nsec = 567993600
> The task is coming to enter in a timed wait
> The task is coming out from the timed wait
> First Task created
> Creating second task
> <child>: Hello World! Task with lowest priority Second task created
> <main> Out of the main
>
> But still no timed wait recognizable :-(
>
> Heinz
>
>
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20210409/7e6e939f/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test3.c
Type: application/octet-stream
Size: 2581 bytes
Desc: not available
URL: <http://lists.rtems.org/pipermail/users/attachments/20210409/7e6e939f/attachment-0001.obj>
More information about the users
mailing list