What's wrong in this simple posix example ?

Matteo matteo.posterli at studenti.unipr.it
Fri Mar 3 13:08:56 UTC 2006


Ok, I can increase the stack size?
Thanks in advantage

M



Scrive Joel Sherrill <joel.sherrill at oarcorp.com>:

> 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