Two Coding Problems

Sun Shine pengsens at hotmail.com
Thu Jan 12 00:44:01 UTC 2006


Hi,all
   I have two questions here

1. How can I get the TCB of a certain task? Is there any directive such 
like "rtems_task_get_tcb"?

2. I wrote an APP, In Init() I create a new task then start it.The function 
of the new task is to create a new task, too.
   Now the Init Task is named T0, the task created by T0 is named T1, and 
the task created by T1 is named T2.
   When running my app on SPARC leon2, the ID information is as follows:
	T0	ID = a010001
	T1	ID = a010002
	T2	ID = a010001
   I don't know why T2's ID is just the same as T0.

   The main functions are here:
	
rtems_task get_task_info(rtems_task_argument argument)
{
    rtems_id              tid;
    rtems_task_priority   priority;
    rtems_status_code     status;
    status = rtems_task_ident(RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid);
    status = rtems_task_set_priority(tid,RTEMS_CURRENT_PRIORITY,&priority);
    printf("\tTask ID: %x\tpriority: %d\n",tid,priority);
    status = rtems_task_delete(RTEMS_SELF);
}

rtems_task create_task(rtems_task_argument argument)
{
    rtems_name            name = rtems_build_name('T','S','T',' ');
    rtems_id              tid;
    rtems_task_priority   priority;
    rtems_status_code     status;
    status = rtems_task_ident(RTEMS_SELF,RTEMS_SEARCH_ALL_NODES,&tid);
    status = rtems_task_set_priority(tid,RTEMS_CURRENT_PRIORITY,&priority);
    status = rtems_task_create(name,priority,RTEMS_MINIMUM_STACK_SIZE,
				RTEMS_PREEMPT,RTEMS_DEFAULT_ATTRIBUTES,&tid);
    if(status!=RTEMS_SUCCESSFUL)
      printf("Create task failed with status %d\n",status);
    else
      printf("Create Task %x with priority %d 
successfully!\n",tid,priority);	        
    status = rtems_task_start(tid,get_task_info,argument);
    if(status!=RTEMS_SUCCESSFUL)
      printf("\tTask %x (%d) start failed with status 
%d\n",tid,priority,status);
    else
      printf("\tTask %x (%d) start successfully!\n",tid,priority);	        
    status = rtems_task_delete(RTEMS_SELF);
}

rtems_task Init(rtems_task_argument argument)
{
  rtems_name            task_name;
  rtems_status_code     status;
  rtems_id              tid;
  rtems_task_priority   priority;

  status = rtems_task_ident(RTEMS_SELF,RTEMS_SEARCH_ALL_NODES,&tid);
  status = rtems_task_set_priority(tid,RTEMS_CURRENT_PRIORITY,&priority);

  printf("\nInit Task ID = %x\tprioirty = %d\n\n",tid,priority);

  task_name = rtems_build_name( 'T', 'A', '1', ' ' );
  priority = 1;
  status = rtems_task_create(task_name, priority,RTEMS_MINIMUM_STACK_SIZE, 
		RTEMS_INTERRUPT_LEVEL(0),RTEMS_DEFAULT_ATTRIBUTES, &tid);

  if ( status != RTEMS_SUCCESSFUL )
  {
    printf("\tTask create failed with the status of %d\n",status);
    exit(1);
  }
  else
  {
    printf("\tThe Task just created ID: %x\tpriority: %d\n",tid,priority);
    status = rtems_task_set_priority(tid,RTEMS_CURRENT_PRIORITY,&priority);
  }
        
  status = rtems_task_start( tid, create_task, 0);

  if (status != RTEMS_SUCCESSFUL )
  {
     printf("\tTask %x start failed with the stauts of %d\n",tid,status);
     exit(1);
  }          
  status = rtems_task_delete( RTEMS_SELF );
}


  Thanks a lot !
  SunPeng

_________________________________________________________________
与联机的朋友进行交流,请使用 MSN Messenger:  http://messenger.msn.com/cn  




More information about the users mailing list