Small doubt in how chain works in RTEMS

Richi Dubey richidubey at gmail.com
Fri Jun 12 13:49:54 UTC 2020


Hi everyone,

While going through testsuites/sptests/spchain/init.c, I noticed the
following code:

-----------------------------------------------
rtems_task Init(
  rtems_task_argument ignored
)
{
  rtems_chain_control  chain1;
  rtems_chain_node    *p;
  test_node            node1, node2;
  int                  id;

  TEST_BEGIN();

  puts( "Init - Initialize chain empty" );
  rtems_chain_initialize_empty( &chain1 );
  rtems_chain_initialize_node( &node1.Node );
  rtems_chain_initialize_node( &node2.Node );

  /* verify that the chain append and insert work */
  puts( "INIT - Verify rtems_chain_insert" );
  node1.id = 1;
  node2.id = 2;
  rtems_chain_append( &chain1, &node1.Node );
  rtems_chain_insert( &node1.Node, &node2.Node );

  for ( p = rtems_chain_first(&chain1), id = 1 ;
        !rtems_chain_is_tail(&chain1, p) ;
        p = p->next , id++ ) {
     test_node *t = (test_node *)p;
     if ( id > 2 ) {
       puts( "INIT - TOO MANY NODES ON CHAIN" );
       rtems_test_exit(0);
     }
     if ( t->id != id ) {
       puts( "INIT - ERROR ON CHAIN ID MISMATCH" );
       rtems_test_exit(0);
     }
  }

-----------------------------------------
Where test_node is defined as:

typedef struct {
  rtems_chain_node Node;
  int              id;
} test_node;

----------------------------------


Now when we are inserting or appending our structure into the chain, we are
only inserting the part of strucuture correspoing to rtems_chain_node, i.e.:
  rtems_chain_append( &chain1, &node1.Node );
  rtems_chain_insert( &node1.Node, &node2.Node );

So, how do we ever get our node1.id ? How can we (or how do we ever) access
our data from the structure when we are only adding some part of the
structure into the node?

I hope my doubt is not too vague.

Thanks,
Richi.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20200612/9724aefa/attachment.html>


More information about the devel mailing list