Cannot find task id.

Niclas Johansson nicjoh-7 at sm.luth.se
Wed Oct 23 14:21:05 UTC 2002


> Niclas Johansson wrote:
> > 
> > Yes on both.
> > 
> > This is the call:
> > task_status = rtems_task_ident(rtems_build_name('L','O','G','1'),
> >                                 RTEMS_SEARCH_ALL_NODES, &taskid);
> > 
> > I find it strange that it works fine before I start the task but not
> > after.
> 
> Sounds strange to me also.  WOuld you mind putting together a 
> small yet complete test program so I can run it and see what's
> happening.  It sounds like it is only 4 calls -- create, ident,
> start, and a failing ident -- so it shouldn't be that difficult
> to get a cut-down.

OK, here is the code:

system.h:
==========================================================
#include <tmacros.h>
#include <rtems.h>
#include <signal.h>

#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/asr.h>
#include <rtems/score/isr.h>
#include <rtems/rtems/modes.h>
#include <rtems/rtems/signal.h>
#include <rtems/score/thread.h>
#include <rtems/rtems/tasks.h>

/* functions */

rtems_task Init(
  rtems_task_argument argument
);

/* configuration information */

#include <confdefs.h>

/* global variables */

TEST_EXTERN rtems_id Global_variable;    /* example global variable     */

rtems_task Application_task(rtems_task_argument argument);

/* end of include file */

==========================================================
init.c
==========================================================
#define TEST_INIT
#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS        50
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
#define CONFIGURE_EXECUTIVE_RAM_SIZE    (512*1024)
#define CONFIGURE_MAXIMUM_SEMAPHORES    20
#define CONFIGURE_MAXIMUM_TASKS         25
#define CONFIGURE_MICROSECONDS_PER_TICK 10000
#define CONFIGURE_INIT_TASK_STACK_SIZE  (10*1024)
#define CONFIGURE_INIT_TASK_PRIORITY    120
#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
                                           RTEMS_NO_TIMESLICE | \
                                           RTEMS_NO_ASR | \
                                           RTEMS_INTERRUPT_LEVEL(0))
#define CONFIGURE_INIT
#include "system.h"
#include <errno.h>
#include <time.h>
#include <confdefs.h>
#include <stdio.h>
#include <rtems/rtems_bsdnet.h>
#include <rtems/error.h>
#include <rpc/rpc.h>
#include <netinet/in.h>
#include <time.h>
#include <arpa/inet.h>
#include <sys/socket.h>
/*#include "../networkconfig.h"*/
#include <rtems_webserver.h>
#include <rtems/monitor.h>
#include <rtems.h>
#define ARGUMENT 0


rtems_task Init(rtems_task_argument argument)
{
  rtems_status_code status;
  rtems_id tid, taskid;

  status =
rtems_task_create(rtems_build_name('L','O','G','1'),1,RTEMS_MINIMUM_STACK_SIZE*2,RTEMS_PREEMPT
| RTEMS_
NO_TIMESLICE | RTEMS_NO_ASR |

RTEMS_INTERRUPT_LEVEL(0),RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,&tid);
  
  status = rtems_task_ident(rtems_build_name('L','O','G','1'),
RTEMS_SEARCH_ALL_NODES, &taskid);

  if(status != 0)printf("id1 error\n");
  printf("Log1Id in init.c:%i\n", taskid);

  status = rtems_task_start(tid,Application_task,0);
  
  taskid = 0;
  
  status = rtems_task_ident(rtems_build_name('L','O','G','1'),
RTEMS_SEARCH_ALL_NODES, &taskid);
  if(status != 0)printf("id2 error \n");
  printf("Log1Id in init.c:%i\n", taskid);
  
  status = rtems_task_delete( RTEMS_SELF );
}
==========================================================
apptask.c
==========================================================
#include <stdio.h>
#include <rtems.h>


rtems_task Application_task(rtems_task_argument argument){


  printf("task started\n");

}

==========================================================

Thanks for helping! It is appreciated by a newbie!

/Nicke


> 
> Thanks.
> 
> --joel
> 
> > /Nicke
> > 
> > On Wed, 23 Oct 2002 Per-Olof.Wallin at esa.int wrote:
> > >
> > > Per-Olof Wallin at ESA
> > > 10/23/2002 02:08 PM
> > >
> > > Are you using rtems_task_ident and if you are, did you use rtems_build_name
> > > to create the name?
> > >
> > > /Per-Olof
> > >
> > >
> > >
> > >
> > > |--------+----------------------->
> > > |        |          Niclas       |
> > > |        |          Johansson    |
> > > |        |          <nicjoh-7 at sm.|
> > > |        |          luth.se>     |
> > > |        |                       |
> > > |        |          02-10-23     |
> > > |        |          13:00        |
> > > |        |                       |
> > > |--------+----------------------->
> > >   >-------------------------------------------------------------------------|
> > >   |                                                                         |
> > >   |       To:     rtems-users at oarcorp.com                                   |
> > >   |       cc:     (bcc: Per-Olof Wallin/estec/ESA)                          |
> > >   |       Subject:     Cannot find task id.                                 |
> > >   >-------------------------------------------------------------------------|
> > >
> > >
> > >
> > >
> > >
> > > I am trying to find the id of a task from another task using
> > > rtems_task_ident. When the task is created it works fine and I get the
> > > id of the task, but when the task is started I get invalid
> > > name as error response. Anybody have any ideas? Getting the id seems to me
> > > like a straightforward operation but I cannot figure out what's wrong.
> > >
> > > /Nicke
> > >
> > >
> > >
> > >
> > >
> > >
> 
> -- 
> Joel Sherrill, Ph.D.             Director of Research & Development
> joel at OARcorp.com                 On-Line Applications Research
> Ask me about RTEMS: a free RTOS  Huntsville AL 35805
> Support Available                (256) 722-9985
> 




More information about the users mailing list