source: rtems/c/src/ada-tests/tmtests/tm09/tmtest.adb @ d0d73ec

4.104.114.84.95
Last change on this file since d0d73ec was e17ffea, checked in by Joel Sherrill <joel.sherrill@…>, on 06/03/97 at 22:06:49

Changed to variable length messages.

  • Property mode set to 100644
File size: 8.0 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 9 of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with RTEMS_CALLING_OVERHEAD;
27with TEST_SUPPORT;
28with TEXT_IO;
29with TIME_TEST_SUPPORT;
30with UNSIGNED32_IO;
31
32package body TMTEST is
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      TASK_ID : RTEMS.ID;
43      STATUS  : RTEMS.STATUS_CODES;
44   begin
45
46      TEXT_IO.NEW_LINE( 2 );
47      TEXT_IO.PUT_LINE( "*** TIME TEST 9 ***" );
48
49      RTEMS.TASK_CREATE(
50         1,
51         128,
52         4096,
53         RTEMS.DEFAULT_OPTIONS,
54         RTEMS.DEFAULT_ATTRIBUTES,
55         TASK_ID,
56         STATUS
57      );
58      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
59
60      RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
62
63      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
65
66   end INIT;
67
68--PAGE
69--
70--  TEST_TASK
71--
72
73   procedure TEST_TASK (
74      ARGUMENT : in     RTEMS.TASK_ARGUMENT
75   ) is
76      STATUS       : RTEMS.STATUS_CODES;
77   begin
78
79      TIMER_DRIVER.INITIALIZE;
80         RTEMS.MESSAGE_QUEUE_CREATE(
81            1,
82            TIME_TEST_SUPPORT.OPERATION_COUNT,
83            16,
84            RTEMS.DEFAULT_OPTIONS,
85            TMTEST.QUEUE_ID,
86            STATUS
87         );
88      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
89      TIME_TEST_SUPPORT.PUT_TIME(
90         "MESSAGE_QUEUE_CREATE",
91         TMTEST.END_TIME,
92         1,
93         0,
94         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_CREATE
95      );
96
97      TMTEST.QUEUE_TEST;
98
99      TIMER_DRIVER.INITIALIZE;
100         RTEMS.MESSAGE_QUEUE_DELETE(
101            TMTEST.QUEUE_ID,
102            STATUS
103         );
104      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
105      TIME_TEST_SUPPORT.PUT_TIME(
106         "MESSAGE_QUEUE_DELETE",
107         TMTEST.END_TIME,
108         1,
109         0,
110         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_DELETE
111      );
112
113      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
114
115   end TEST_TASK;
116
117--PAGE
118--
119--  QUEUE_TEST
120--
121
122   procedure QUEUE_TEST
123   is
124      SEND_LOOP_TIME    : RTEMS.UNSIGNED32;
125      URGENT_LOOP_TIME  : RTEMS.UNSIGNED32;
126      RECEIVE_LOOP_TIME : RTEMS.UNSIGNED32;
127      SEND_TIME         : RTEMS.UNSIGNED32;
128      URGENT_TIME       : RTEMS.UNSIGNED32;
129      RECEIVE_TIME      : RTEMS.UNSIGNED32;
130      EMPTY_FLUSH_TIME  : RTEMS.UNSIGNED32;
131      FLUSH_TIME        : RTEMS.UNSIGNED32;
132      FLUSH_COUNT       : RTEMS.UNSIGNED32;
133      EMPTY_FLUSH_COUNT : RTEMS.UNSIGNED32;
134      INDEX             : RTEMS.UNSIGNED32;
135      ITERATIONS        : RTEMS.UNSIGNED32;
136      LOOP_COUNT        : RTEMS.UNSIGNED32;
137      BUFFER            : TMTEST.BUFFER;
138      BUFFER_POINTER    : RTEMS.ADDRESS;
139      MESSAGE_SIZE      : RTEMS.UNSIGNED32;
140      STATUS            : RTEMS.STATUS_CODES;
141   begin
142
143      SEND_LOOP_TIME    := 0;
144      URGENT_LOOP_TIME  := 0;
145      RECEIVE_LOOP_TIME := 0;
146      SEND_TIME         := 0;
147      URGENT_TIME       := 0;
148      RECEIVE_TIME      := 0;
149      EMPTY_FLUSH_TIME  := 0;
150      FLUSH_TIME        := 0;
151      FLUSH_COUNT       := 0;
152      EMPTY_FLUSH_COUNT := 0;
153
154      BUFFER_POINTER := BUFFER'ADDRESS;
155
156      for ITERATIONS in 1 .. TIME_TEST_SUPPORT.ITERATION_COUNT
157      loop
158
159         TIMER_DRIVER.INITIALIZE;
160            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
161            loop
162               TIMER_DRIVER.EMPTY_FUNCTION;
163            end loop;
164         SEND_LOOP_TIME := SEND_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
165
166         TIMER_DRIVER.INITIALIZE;
167            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
168            loop
169               TIMER_DRIVER.EMPTY_FUNCTION;
170            end loop;
171         URGENT_LOOP_TIME := URGENT_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
172
173         TIMER_DRIVER.INITIALIZE;
174            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
175            loop
176               TIMER_DRIVER.EMPTY_FUNCTION;
177            end loop;
178         RECEIVE_LOOP_TIME := RECEIVE_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
179
180         TIMER_DRIVER.INITIALIZE;
181            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
182            loop
183               RTEMS.MESSAGE_QUEUE_SEND(
184                  TMTEST.QUEUE_ID,
185                  BUFFER_POINTER,
186                  16,
187                  STATUS
188               );
189            end loop;
190         SEND_TIME := SEND_TIME + TIMER_DRIVER.READ_TIMER;
191
192         TIMER_DRIVER.INITIALIZE;
193            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
194            loop
195               RTEMS.MESSAGE_QUEUE_RECEIVE(
196                  TMTEST.QUEUE_ID,
197                  BUFFER_POINTER,
198                  RTEMS.DEFAULT_OPTIONS,
199                  RTEMS.NO_TIMEOUT,
200                  MESSAGE_SIZE,
201                  STATUS
202               );
203            end loop;
204         RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
205
206         TIMER_DRIVER.INITIALIZE;
207            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
208            loop
209               RTEMS.MESSAGE_QUEUE_URGENT(
210                  TMTEST.QUEUE_ID,
211                  BUFFER_POINTER,
212                  16,
213                  STATUS
214               );
215            end loop;
216         URGENT_TIME := URGENT_TIME + TIMER_DRIVER.READ_TIMER;
217
218         TIMER_DRIVER.INITIALIZE;
219            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
220            loop
221               RTEMS.MESSAGE_QUEUE_RECEIVE(
222                  TMTEST.QUEUE_ID,
223                  BUFFER_POINTER,
224                  RTEMS.DEFAULT_OPTIONS,
225                  RTEMS.NO_TIMEOUT,
226                  MESSAGE_SIZE,
227                  STATUS
228               );
229            end loop;
230         RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
231
232         TIMER_DRIVER.INITIALIZE;
233            RTEMS.MESSAGE_QUEUE_FLUSH(
234               TMTEST.QUEUE_ID,
235               EMPTY_FLUSH_COUNT,
236               STATUS
237            );
238         EMPTY_FLUSH_TIME := EMPTY_FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
239
240         -- send one message to flush
241         RTEMS.MESSAGE_QUEUE_SEND(
242            TMTEST.QUEUE_ID,
243            BUFFER_POINTER,
244            16,
245            STATUS
246         );
247         TIMER_DRIVER.INITIALIZE;
248            RTEMS.MESSAGE_QUEUE_FLUSH(
249               TMTEST.QUEUE_ID,
250               FLUSH_COUNT,
251               STATUS
252            );
253         FLUSH_TIME := FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
254
255      end loop;
256
257      TIME_TEST_SUPPORT.PUT_TIME(
258         "MESSAGE_QUEUE_SEND (no tasks waiting)",
259         SEND_TIME,
260         TIME_TEST_SUPPORT.OPERATION_COUNT *
261            TIME_TEST_SUPPORT.ITERATION_COUNT,
262         SEND_LOOP_TIME,
263         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
264      );
265
266      TIME_TEST_SUPPORT.PUT_TIME(
267         "MESSAGE_QUEUE_URGENT (no tasks waiting)",
268         URGENT_TIME,
269         TIME_TEST_SUPPORT.OPERATION_COUNT *
270            TIME_TEST_SUPPORT.ITERATION_COUNT,
271         URGENT_LOOP_TIME,
272         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT
273      );
274
275      TIME_TEST_SUPPORT.PUT_TIME(
276         "MESSAGE_QUEUE_RECEIVE (messages available)",
277         RECEIVE_TIME,
278         TIME_TEST_SUPPORT.OPERATION_COUNT *
279            TIME_TEST_SUPPORT.ITERATION_COUNT * 2,
280         RECEIVE_LOOP_TIME * 2,
281         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE
282      );
283
284      TIME_TEST_SUPPORT.PUT_TIME(
285         "MESSAGE_QUEUE_FLUSH (empty queue)",
286         EMPTY_FLUSH_TIME,
287         TIME_TEST_SUPPORT.ITERATION_COUNT,
288         0,
289         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
290      );
291
292      TIME_TEST_SUPPORT.PUT_TIME(
293         "MESSAGE_QUEUE_FLUSH (messages flushed)",
294         FLUSH_TIME,
295         TIME_TEST_SUPPORT.ITERATION_COUNT,
296         0,
297         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
298      );
299
300   end QUEUE_TEST;
301
302end TMTEST;
Note: See TracBrowser for help on using the repository browser.