On Tue, Apr 13, 2021 at 8:02 AM Heinz Junkes <[email protected]> wrote:
> Unfortunately I still do not understand it. Under Unix it runs perfectly > and also the > values are displayed correctly. > > In the debugger, the contents of the structure timespec are displayed > correctly. > > Another point that probably makes the program hang: > > the function pthread_cond_timedwait(&cond, &mutex, &timeout) returns "1" > and does not wait for the timeout. > This return value should not exist at all? > > Under Unix, as expected, "110" is returned. ETIMOUT. > What's your current version of the source? --joel > > Heinz > > > > On 12. Apr 2021, at 20:38, Gedare Bloom <[email protected]> wrote: > > > > On Fri, Apr 9, 2021 at 11:45 AM Heinz Junkes <[email protected]> > 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); > > > > Please try with the appropriate type sizes and report back what you find. > > > > tv_sec is of type time_t > > tv_nsec is of type long > > > > %d will only take 32b of those values, so you get some kind of garbage > > (that can depend on endianness) > > > >> 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 > >> [email protected] > >> http://lists.rtems.org/mailman/listinfo/users > > _______________________________________________ > users mailing list > [email protected] > http://lists.rtems.org/mailman/listinfo/users
_______________________________________________ users mailing list [email protected] http://lists.rtems.org/mailman/listinfo/users
