source: rtems/c/src/tests/tmtests/tm10/task1.c @ ac7d5ef0

4.104.114.84.95
Last change on this file since ac7d5ef0 was ac7d5ef0, checked in by Joel Sherrill <joel.sherrill@…>, on 05/11/95 at 17:39:37

Initial revision

  • Property mode set to 100644
File size: 3.2 KB
Line 
1/*
2 *
3 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
4 *  On-Line Applications Research Corporation (OAR).
5 *  All rights assigned to U.S. Government, 1994.
6 *
7 *  This material may be reproduced by or for the U.S. Government pursuant
8 *  to the copyright license under the clause at DFARS 252.227-7013.  This
9 *  notice must appear in all copies of this file and its derivatives.
10 *
11 *  $Id$
12 */
13
14#include "system.h"
15#undef EXTERN
16#define EXTERN
17#include "conftbl.h"
18#include "gvar.h"
19
20rtems_id Queue_id;
21long Buffer[4];
22
23rtems_task High_task(
24  rtems_task_argument argument
25);
26
27rtems_task Middle_tasks(
28  rtems_task_argument argument
29);
30
31rtems_task Low_task(
32  rtems_task_argument argument
33);
34
35void test_init();
36
37rtems_task Init(
38  rtems_task_argument argument
39)
40{
41  rtems_status_code status;
42
43  puts( "\n\n*** TIME TEST 10 ***" );
44
45  test_init();
46
47  status = rtems_task_delete( RTEMS_SELF );
48  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
49}
50
51void test_init()
52{
53  rtems_unsigned32    index;
54  rtems_task_entry    task_entry;
55  rtems_status_code   status;
56  rtems_task_priority priority;
57  rtems_id            task_id;
58
59  priority = 5;
60
61  for( index = 0; index <= OPERATION_COUNT ; index++ ) {
62    status = rtems_task_create(
63      rtems_build_name( 'T', 'I', 'M', 'E' ),
64      priority,
65      1024,
66      RTEMS_DEFAULT_MODES,
67      RTEMS_DEFAULT_ATTRIBUTES,
68      &task_id
69    );
70    directive_failed( status, "rtems_task_create LOOP" );
71
72    priority++;
73
74    if ( index==0 )                    task_entry = High_task;
75    else if ( index==OPERATION_COUNT ) task_entry = Low_task;
76    else                               task_entry = Middle_tasks;
77
78    status = rtems_task_start( task_id, task_entry, 0 );
79    directive_failed( status, "rtems_task_start LOOP" );
80  }
81
82  status = rtems_message_queue_create(
83    1,
84    OPERATION_COUNT,
85    RTEMS_DEFAULT_ATTRIBUTES,
86    &Queue_id
87  );
88  directive_failed( status, "rtems_message_queue_create" );
89
90  Timer_initialize();
91    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
92      (void) Empty_function();
93  overhead = Read_timer();
94
95  Timer_initialize();
96    for ( index=1 ; index <= OPERATION_COUNT ; index++ )
97      (void) rtems_message_queue_receive(
98               Queue_id,
99               (long (*)[4]) Buffer,
100               RTEMS_NO_WAIT,
101               RTEMS_NO_TIMEOUT
102             );
103  end_time = Read_timer();
104
105  put_time(
106    "rtems_message_queue_receive (RTEMS_NO_WAIT)",
107    end_time,
108    OPERATION_COUNT,
109    overhead,
110    CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
111  );
112
113}
114
115rtems_task High_task(
116  rtems_task_argument argument
117)
118{
119  Timer_initialize();
120     (void) rtems_message_queue_receive(
121              Queue_id,
122              (long (*)[4]) Buffer,
123              RTEMS_DEFAULT_OPTIONS,
124              RTEMS_NO_TIMEOUT
125            );
126}
127
128rtems_task Middle_tasks(
129  rtems_task_argument argument
130)
131{
132  (void) rtems_message_queue_receive(
133           Queue_id,
134           (long (*)[4]) Buffer,
135           RTEMS_DEFAULT_OPTIONS,
136           RTEMS_NO_TIMEOUT
137         );
138}
139
140
141rtems_task Low_task(
142  rtems_task_argument argument
143)
144{
145  end_time = Read_timer();
146
147  put_time(
148    "rtems_message_queue_receive (blocking)",
149    end_time,
150    OPERATION_COUNT,
151    0,
152    CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE
153  );
154
155  exit( 0 );
156}
Note: See TracBrowser for help on using the repository browser.