source: rtems/c/src/ada-tests/tmtests/tm15/tmtest.adb @ 6d4e604b

4.104.114.84.95
Last change on this file since 6d4e604b was 6d4e604b, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 2, 1997 at 8:19:03 PM

Initial revision

  • Property mode set to 100644
File size: 6.5 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 15 of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
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--  tmtest.adb,v 1.3 1995/07/12 19:43:49 joel Exp
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 15 ***" );
48
49      TMTEST.TEST_INIT;
50
51      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
52      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
53
54   end INIT;
55
56--PAGE
57--
58--  TEST_INIT
59--
60
61   procedure TEST_INIT
62   is
63      ID        : RTEMS.ID;
64      INDEX     : RTEMS.UNSIGNED32;
65      OVERHEAD  : RTEMS.UNSIGNED32;
66      EVENT_OUT : RTEMS.EVENT_SET;
67      STATUS    : RTEMS.STATUS_CODES;
68   begin
69
70      TMTEST.TIME_SET := FALSE;
71
72      RTEMS.TASK_CREATE( 
73         RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
74         10, 
75         1024, 
76         RTEMS.NO_PREEMPT,
77         RTEMS.DEFAULT_ATTRIBUTES,
78         ID,
79         STATUS
80      );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" );
82
83      RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" );
85
86      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
87      loop
88
89         RTEMS.TASK_CREATE( 
90            RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
91            5, 
92            1024, 
93            RTEMS.DEFAULT_MODES,
94            RTEMS.DEFAULT_ATTRIBUTES,
95            TMTEST.TASK_ID( INDEX ),
96            STATUS
97         );
98         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
99
100         RTEMS.TASK_START( 
101            TMTEST.TASK_ID( INDEX ),
102            TMTEST.HIGH_TASKS'ACCESS, 
103            0, 
104            STATUS
105         );
106         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
107
108      end loop;
109
110      TIMER_DRIVER.INITIALIZE;
111         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
112         loop
113            TIMER_DRIVER.EMPTY_FUNCTION;
114         end loop;
115      OVERHEAD := TIMER_DRIVER.READ_TIMER;
116
117      TIMER_DRIVER.INITIALIZE;
118         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
119         loop
120            RTEMS.EVENT_RECEIVE(
121               RTEMS.PENDING_EVENTS,
122               RTEMS.DEFAULT_OPTIONS,
123               RTEMS.NO_TIMEOUT,
124               EVENT_OUT,
125               STATUS
126            );
127         end loop;
128      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
129
130      TIME_TEST_SUPPORT.PUT_TIME( 
131         "EVENT_RECEIVE (current)",
132         TMTEST.END_TIME, 
133         TIME_TEST_SUPPORT.OPERATION_COUNT, 
134         OVERHEAD,
135         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
136      );
137
138      TIMER_DRIVER.INITIALIZE;
139         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
140         loop
141            RTEMS.EVENT_RECEIVE(
142               RTEMS.ALL_EVENTS,
143               RTEMS.NO_WAIT,
144               RTEMS.NO_TIMEOUT,
145               EVENT_OUT,
146               STATUS
147            );
148         end loop;
149      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
150
151      TIME_TEST_SUPPORT.PUT_TIME( 
152         "EVENT_RECEIVE (NO_WAIT)",
153         TMTEST.END_TIME, 
154         TIME_TEST_SUPPORT.OPERATION_COUNT, 
155         OVERHEAD,
156         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
157      );
158
159   end TEST_INIT;
160
161--PAGE
162--
163--  LOW_TASK
164--
165
166   procedure LOW_TASK (
167      ARGUMENT : in     RTEMS.TASK_ARGUMENT
168   ) is
169      ID        : RTEMS.ID;
170      INDEX     : RTEMS.UNSIGNED32;
171      EVENT_OUT : RTEMS.EVENT_SET;
172      OVERHEAD  : RTEMS.UNSIGNED32;
173      STATUS    : RTEMS.STATUS_CODES;
174   begin
175   
176      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
177
178      TIME_TEST_SUPPORT.PUT_TIME( 
179         "EVENT_RECEIVE (blocking)",
180         TMTEST.END_TIME, 
181         TIME_TEST_SUPPORT.OPERATION_COUNT, 
182         0,
183         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
184      );
185
186      TIMER_DRIVER.INITIALIZE;
187         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
188         loop
189            TIMER_DRIVER.EMPTY_FUNCTION;
190         end loop;
191      OVERHEAD := TIMER_DRIVER.READ_TIMER;
192
193      TIMER_DRIVER.INITIALIZE;
194         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
195         loop
196            RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_16, STATUS );
197         end loop;
198      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
199
200      TIME_TEST_SUPPORT.PUT_TIME( 
201         "EVENT_SEND (returns to caller)",
202         TMTEST.END_TIME, 
203         TIME_TEST_SUPPORT.OPERATION_COUNT, 
204         OVERHEAD,
205         RTEMS_CALLING_OVERHEAD.EVENT_SEND
206      );
207
208      TIMER_DRIVER.INITIALIZE;
209         RTEMS.EVENT_RECEIVE(
210            RTEMS.EVENT_16,
211            RTEMS.DEFAULT_OPTIONS,
212            RTEMS.NO_TIMEOUT,
213            EVENT_OUT,
214            STATUS
215         );
216      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
217
218      TIME_TEST_SUPPORT.PUT_TIME( 
219         "EVENT_RECEIVE (available)",
220         TMTEST.END_TIME, 
221         1, 
222         0,
223         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
224      );
225
226      TIMER_DRIVER.INITIALIZE;
227         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
228         loop
229            RTEMS.EVENT_SEND( 
230               TMTEST.TASK_ID( INDEX ), 
231               RTEMS.EVENT_16, 
232               STATUS
233            );
234         end loop;
235      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
236
237      TIME_TEST_SUPPORT.PUT_TIME( 
238         "EVENT_SEND (readying)",
239         TMTEST.END_TIME, 
240         TIME_TEST_SUPPORT.OPERATION_COUNT, 
241         OVERHEAD,
242         RTEMS_CALLING_OVERHEAD.EVENT_SEND
243      );
244
245      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
246
247   end LOW_TASK;
248
249--PAGE
250--
251--  HIGH_TASKS
252--
253
254   procedure HIGH_TASKS (
255      ARGUMENT : in     RTEMS.TASK_ARGUMENT
256   ) is
257      EVENT_OUT : RTEMS.EVENT_SET;
258      STATUS    : RTEMS.STATUS_CODES;
259   begin
260
261      if TMTEST.TIME_SET = FALSE then
262         TMTEST.TIME_SET := TRUE;
263         TIMER_DRIVER.INITIALIZE;
264      end if;
265
266      RTEMS.EVENT_RECEIVE(
267         16#7FFFFFFF#,
268         RTEMS.DEFAULT_OPTIONS,
269         RTEMS.NO_TIMEOUT,
270         EVENT_OUT,
271         STATUS
272      );
273   
274   end HIGH_TASKS;
275
276end TMTEST;
Note: See TracBrowser for help on using the repository browser.