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 <jun...@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@rtems.org > http://lists.rtems.org/mailman/listinfo/users
test3.c
Description: Binary data
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users