What's wrong in this simple posix example ?

Joel Sherrill joel.sherrill at oarcorp.com
Thu Mar 2 22:26:14 UTC 2006


Matteo wrote:

>Thanks for the suggestion but the system still crash, the problem is the the
>task with lowest priority is never launched, but I don't know why!
>Someone have some idea ?
>
>  
>
What is happening for you?  I am running it on powerpc/psim and get the 
following output:

<main> Enter in the main
Creating first task
<child>: Hello World! task with max priority
The task is coming to enter in a timed wait
First Task created
Creating second task
Second task created
<main> Out of the main
The task is coming out from the timed wait

You might be blowing a task stack.   The minimum stack size on your 
target CPU might be
too small for your test.  If on a PC and the CVS head, I recently 
increased the minimum stack
size since late model gcc versions appear to need more stack memory.

--joel

>Thanks in advance
>
>Matteo
>
>
>Scrive Sergei Ablalimov <sa at design.morion.ru>:
>
>  
>
>>Hello Matteo,
>>I run your sample and see:
>>
>><main> Enter in the main
>>Creating first task                                                          
>>  
>><child>: Hello World! task with max priority                                 
>>  
>>First Task created                                                           
>>  
>>The task is coming to enter in a timed wait                                  
>>  
>>Creating second task                                                         
>>  
>>Second task created                                                          
>>  
>><main> Out of the main                                                       
>>  
>>The task is coming out from the timed wait   
>>
>>After that - crash.
>>using rtems_task_delete(RTEMS_SELF) instead of exit resolve problem.
>>
>>Thursday, March 2, 2006, 4:53:11 AM, you wrote:
>>
>>
>>    
>>
>>>Hi
>>>I'm working with posix thread and I'm trying to launch 2 thread with
>>>      
>>>
>>different
>>    
>>
>>>priority but I have a lot of error of memory but I'm using a really simple
>>>example of one threads that uses a timed wait and onother one that is
>>>      
>>>
>>simple
>>    
>>
>>>launched. 
>>>The code is just below ;
>>>      
>>>
>>>#include <sched.h>
>>>#include <bsp.h>
>>>#include <stdlib.h>
>>>#include <stdio.h>
>>>#include <pthread.h>
>>>      
>>>
>>>  pthread_mutex_t mutex;
>>>  pthread_cond_t cond;
>>>  struct timespec timeout;
>>>  struct sched_param param;
>>>  pthread_attr_t attr;
>>>      
>>>
>>  
>>    
>>
>>>void * print_hello(void * arg){
>>>  printf("<child>: Hello World! task with max priority \n");
>>>  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);
>>>  printf("The task is coming out from the timed wait \n");
>>>  return NULL;
>>>}
>>>      
>>>
>>>void * print_hello_a(void * arg){
>>>  printf(" <child>: Hello World! Task with lowest priority ");
>>>  return NULL;
>>>}
>>>      
>>>
>>    
>>
>>>void *POSIX_Init()
>>>{
>>>  pthread_t child1;
>>>  pthread_t child2;
>>>  pthread_attr_init(&attr);
>>>  pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
>>>  pthread_mutex_init( &mutex, NULL );
>>>  pthread_cond_init( &cond, NULL );
>>>      
>>>
>>>  printf("<main> Enter in the main \n");
>>>      
>>>
>>>  printf("Creating first task \n");
>>>  param.sched_priority = sched_get_priority_max(SCHED_FIFO);
>>>  pthread_attr_setschedparam(&attr, &param);
>>>  if ( pthread_create( &child1, &attr, print_hello, NULL) || 
>>>pthread_setschedparam(child1, SCHED_FIFO, &param) ) {
>>>  printf("Thread cannot be created or you have not enough privileges to
>>>      
>>>
>>set
>>    
>>
>>>priority!!!!\n");
>>>  exit(1);
>>>  }
>>>  printf("First Task created \n");
>>>  printf("Creating second task \n");
>>>  param.sched_priority = sched_get_priority_max(SCHED_FIFO) - 1;
>>>  pthread_attr_setschedparam(&attr, &param);
>>>  if ( pthread_create( &child2, &attr, print_hello_a, NULL) || 
>>>pthread_setschedparam(child2, SCHED_FIFO, &param) ) {
>>>        printf("Thread cannot be created or you have not enough privileges
>>>      
>>>
>>to
>>    
>>
>>>set priority!!!!\n");
>>>        exit(1);
>>>  }
>>>  printf("Second task created \n");
>>>      
>>>
>>>printf("<main> Out of the main\n");
>>>  pthread_join( child1, NULL );
>>>  pthread_join( child2, NULL );
>>>      
>>>
>>>  exit(0);
>>>}
>>>#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>>>#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
>>>#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER
>>>#define CONFIGURE_MAXIMUM_POSIX_THREADS              10
>>>#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  10
>>>#define CONFIGURE_MAXIMUM_POSIX_MUTEXES              10
>>>#define CONFIGURE_POSIX_INIT_THREAD_TABLE
>>>#define CONFIGURE_INIT
>>>#include <rtems/confdefs.h>
>>>      
>>>
>>    
>>
>>>What's wrong?
>>>I don't understand what could be the problem!
>>>Someone can help me ?
>>>      
>>>
>>>Really thanks in advance
>>>      
>>>
>>>Matteo
>>>      
>>>
>>
>>
>>-- 
>>Best regards,
>> Sergei
>>
>>
>>
>>    
>>
>
>
>
>
>  
>




More information about the users mailing list