source: rtems/testsuites/mptests/mp14/msgtask1.c @ 3a4ae6c

4.104.114.84.95
Last change on this file since 3a4ae6c was 3235ad9, checked in by Joel Sherrill <joel.sherrill@…>, on 08/23/95 at 19:30:23

Support for variable length names added to Object Handler. This supports
both fixed length "raw" names and strings from the API's point of view.

Both inline and macro implementations were tested.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*  Message_queue_task
2 *
3 *  This task continuously sends messages to and receives messages from
4 *  a global message queue.    The message buffer is viewed as an array
5 *  of two sixty-four bit counts which are incremented when a message is
6 *  received.
7 *
8 *  Input parameters:
9 *    argument - task argument
10 *
11 *  Output parameters:  NONE
12 *
13 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
14 *  On-Line Applications Research Corporation (OAR).
15 *  All rights assigned to U.S. Government, 1994.
16 *
17 *  This material may be reproduced by or for the U.S. Government pursuant
18 *  to the copyright license under the clause at DFARS 252.227-7013.  This
19 *  notice must appear in all copies of this file and its derivatives.
20 *
21 *  $Id$
22 */
23
24#include "system.h"
25
26rtems_task Message_queue_task(
27  rtems_task_argument index
28)
29{
30  rtems_status_code  status;
31  rtems_unsigned32   count;
32  rtems_unsigned32   yield_count;
33  rtems_unsigned32  *buffer_count;
34  rtems_unsigned32  *overflow_count;
35  rtems_unsigned32   size;
36
37  Msg_buffer[ index ][0] = 0;
38  Msg_buffer[ index ][1] = 0;
39  Msg_buffer[ index ][2] = 0;
40  Msg_buffer[ index ][3] = 0;
41
42  puts( "Getting ID of msg queue" );
43  while ( FOREVER ) {
44    status = rtems_message_queue_ident(
45      Queue_name[ 1 ],
46      RTEMS_SEARCH_ALL_NODES,
47      &Queue_id[ 1 ]
48    );
49    if ( status == RTEMS_SUCCESSFUL )
50      break;
51    puts( "rtems_message_queue_ident FAILED!!" );
52  }
53
54  if ( Multiprocessing_configuration.node == 1 ) {
55      status = rtems_message_queue_send(
56        Queue_id[ 1 ],
57        (long (*)[4])Msg_buffer[ index ],
58        16
59      );
60      directive_failed( status, "rtems_message_queue_send" );
61      overflow_count = &Msg_buffer[ index ][0];
62      buffer_count   = &Msg_buffer[ index ][1];
63  } else {
64      overflow_count = &Msg_buffer[ index ][2];
65      buffer_count   = &Msg_buffer[ index ][3];
66  }
67
68  while ( Stop_Test == FALSE ) {
69    yield_count = 100;
70
71    for ( count=MESSAGE_DOT_COUNT ; Stop_Test == FALSE && count ; count-- ) {
72      status = rtems_message_queue_receive(
73        Queue_id[ 1 ],
74        (long (*)[4])Msg_buffer[ index ],
75        &size,
76        RTEMS_DEFAULT_OPTIONS,
77        RTEMS_NO_TIMEOUT
78      );
79      directive_failed( status, "rtems_message_queue_receive" );
80
81      if ( *buffer_count == (rtems_unsigned32)0xffffffff ) {
82        *buffer_count    = 0;
83        *overflow_count += 1;
84      } else
85        *buffer_count += 1;
86
87      status = rtems_message_queue_send(
88        Queue_id[ 1 ],
89        (long (*)[4])Msg_buffer[ index ],
90        16
91      );
92      directive_failed( status, "rtems_message_queue_send" );
93
94      if (Stop_Test == FALSE)
95        if ( Multiprocessing_configuration.node == 1 && --yield_count == 0 ) {
96          status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
97          directive_failed( status, "rtems_task_wake_after" );
98
99          yield_count = 100;
100        }
101    }
102    put_dot( 'm' );
103  }
104
105  Exit_test();
106}
Note: See TracBrowser for help on using the repository browser.