SIS in "real time"

Heinz Junkes junkes at fhi-berlin.mpg.de
Tue Apr 13 13:02:13 UTC 2021


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.

Heinz


> On 12. Apr 2021, at 20:38, Gedare Bloom <gedare at rtems.org> wrote:
> 
> On Fri, Apr 9, 2021 at 11:45 AM 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);
> 
> 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
>> users at rtems.org
>> http://lists.rtems.org/mailman/listinfo/users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2542 bytes
Desc: not available
URL: <http://lists.rtems.org/pipermail/users/attachments/20210413/11b6fae8/attachment.bin>


More information about the users mailing list