source: rtems/testsuites/mptests/mp14/msgtask1.c @ 4b374f36

4.104.114.84.95
Last change on this file since 4b374f36 was 4b374f36, checked in by Joel Sherrill <joel.sherrill@…>, on Aug 17, 1995 at 7:36:43 PM

maximum number of messages removed and include statement cleanup

  • 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 *  msgtask1.c,v 1.2 1995/05/31 17:04:58 joel Exp
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.