source: rtems/c/src/ada-tests/tmtests/tm23/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 06/02/97 at 20:19:03

Initial revision

  • Property mode set to 100644
File size: 10.2 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 23 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:44:14 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      OVERHEAD      : RTEMS.UNSIGNED32;
43      TASK_PRIORITY : RTEMS.TASK_PRIORITY;
44      INDEX         : RTEMS.UNSIGNED32;
45      ID            : RTEMS.ID;
46      TASK_ENTRY    : RTEMS.TASK_ENTRY_POINT;
47      STATUS        : RTEMS.STATUS_CODES;
48   begin
49
50      TEXT_IO.NEW_LINE( 2 );
51      TEXT_IO.PUT_LINE( "*** TIME TEST 23 ***" );
52
53      TIMER_DRIVER.INITIALIZE;
54         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
55         loop
56            TIMER_DRIVER.EMPTY_FUNCTION;
57         end loop;
58      OVERHEAD := TIMER_DRIVER.READ_TIMER;
59
60      TASK_PRIORITY := 5;
61
62      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
63      loop
64
65         RTEMS.TASK_CREATE(
66            RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
67            TASK_PRIORITY,
68            1024,
69            RTEMS.DEFAULT_MODES,
70            RTEMS.DEFAULT_ATTRIBUTES,
71            ID,
72            STATUS
73         );
74         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
75
76         if INDEX = 1 then
77            TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
78         elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then
79            TASK_ENTRY := TMTEST.LOW_TASK'ACCESS;
80         else
81            TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS;
82         end if;
83
84         RTEMS.TASK_START( ID, TASK_ENTRY, 0, STATUS );
85         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
86
87         TASK_PRIORITY := TASK_PRIORITY + 1;
88
89      end loop;
90
91      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
93
94   end INIT;
95
96--PAGE
97--
98--  NULL_DELAY
99--
100
101   procedure NULL_DELAY (
102      IGNORED_ID      : in     RTEMS.ID;
103      IGNORED_ADDRESS : in     RTEMS.ADDRESS
104   ) is
105   begin
106
107      NULL;
108
109   end NULL_DELAY;
110
111--PAGE
112--
113--  HIGH_TASK
114--
115
116   procedure HIGH_TASK (
117      ARGUMENT : in     RTEMS.TASK_ARGUMENT
118   ) is
119      INDEX    : RTEMS.TASK_PRIORITY;
120      OVERHEAD : RTEMS.UNSIGNED32;
121      STATUS   : RTEMS.STATUS_CODES;
122   begin
123
124      TIMER_DRIVER.INITIALIZE;
125         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
126         loop
127            TIMER_DRIVER.EMPTY_FUNCTION;
128         end loop;
129      OVERHEAD := TIMER_DRIVER.READ_TIMER;
130
131      TIMER_DRIVER.INITIALIZE;
132         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
133         loop
134            RTEMS.TIMER_CREATE(
135               INDEX,
136               TMTEST.TIMER_ID( INDEX ),
137               STATUS
138            );
139         end loop;
140      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
141
142      TIME_TEST_SUPPORT.PUT_TIME(
143         "TIMER_CREATE",
144         TMTEST.END_TIME,
145         TIME_TEST_SUPPORT.OPERATION_COUNT,
146         0,
147         RTEMS_CALLING_OVERHEAD.TIMER_CREATE
148      );
149
150      TIMER_DRIVER.INITIALIZE;
151         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
152         loop
153            RTEMS.TIMER_FIRE_AFTER(
154               TMTEST.TIMER_ID( INDEX ),
155               500,
156               TMTEST.NULL_DELAY'ACCESS,
157               RTEMS.NULL_ADDRESS,
158               STATUS
159            );
160         end loop;
161      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
162
163      TIME_TEST_SUPPORT.PUT_TIME(
164         "TIMER_FIRE_AFTER (inactive)",
165         TMTEST.END_TIME,
166         TIME_TEST_SUPPORT.OPERATION_COUNT,
167         0,
168         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
169      );
170
171      TIMER_DRIVER.INITIALIZE;
172         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
173         loop
174            RTEMS.TIMER_FIRE_AFTER(
175               TMTEST.TIMER_ID( INDEX ),
176               500,
177               TMTEST.NULL_DELAY'ACCESS,
178               RTEMS.NULL_ADDRESS,
179               STATUS
180            );
181         end loop;
182      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
183
184      TIME_TEST_SUPPORT.PUT_TIME(
185         "TIMER_FIRE_AFTER (active)",
186         TMTEST.END_TIME,
187         TIME_TEST_SUPPORT.OPERATION_COUNT,
188         0,
189         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER
190      );
191
192      TIMER_DRIVER.INITIALIZE;
193         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
194         loop
195            RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
196         end loop;
197      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
198
199      TIME_TEST_SUPPORT.PUT_TIME(
200         "TIMER_CANCEL (active)",
201         TMTEST.END_TIME,
202         TIME_TEST_SUPPORT.OPERATION_COUNT,
203         0,
204         RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
205      );
206
207      TIMER_DRIVER.INITIALIZE;
208         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
209         loop
210            RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
211         end loop;
212      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
213
214      TIME_TEST_SUPPORT.PUT_TIME(
215         "TIMER_CANCEL (inactive)",
216         TMTEST.END_TIME,
217         TIME_TEST_SUPPORT.OPERATION_COUNT,
218         0,
219         RTEMS_CALLING_OVERHEAD.TIMER_CANCEL
220      );
221
222      TIMER_DRIVER.INITIALIZE;
223         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
224         loop
225            RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
226         end loop;
227      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
228
229      TIME_TEST_SUPPORT.PUT_TIME(
230         "TIMER_RESET (inactive)",
231         TMTEST.END_TIME,
232         TIME_TEST_SUPPORT.OPERATION_COUNT,
233         0,
234         RTEMS_CALLING_OVERHEAD.TIMER_RESET
235      );
236
237      TIMER_DRIVER.INITIALIZE;
238         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
239         loop
240            RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS );
241         end loop;
242      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
243
244      TIME_TEST_SUPPORT.PUT_TIME(
245         "TIMER_RESET (active)",
246         TMTEST.END_TIME,
247         TIME_TEST_SUPPORT.OPERATION_COUNT,
248         0,
249         RTEMS_CALLING_OVERHEAD.TIMER_RESET
250      );
251
252      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
253      loop
254         RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
255      end loop;
256
257      TMTEST.TIME_OF_DAY := ( 1988, 12, 31, 9, 0, 0, 0 );
258
259      RTEMS.CLOCK_SET( TMTEST.TIME_OF_DAY, STATUS );
260      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
261
262      TMTEST.TIME_OF_DAY.YEAR := 1989;
263
264      TIMER_DRIVER.INITIALIZE;
265         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
266         loop
267            RTEMS.TIMER_FIRE_WHEN(
268               TMTEST.TIMER_ID( INDEX ),
269               TMTEST.TIME_OF_DAY,
270               TMTEST.NULL_DELAY'ACCESS,
271               RTEMS.NULL_ADDRESS,
272               STATUS
273            );
274         end loop;
275      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
276
277      TIME_TEST_SUPPORT.PUT_TIME(
278         "TIMER_FIRE_WHEN (inactive)",
279         TMTEST.END_TIME,
280         TIME_TEST_SUPPORT.OPERATION_COUNT,
281         0,
282         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
283      );
284
285      TIMER_DRIVER.INITIALIZE;
286         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
287         loop
288            RTEMS.TIMER_FIRE_WHEN(
289               TMTEST.TIMER_ID( INDEX ),
290               TMTEST.TIME_OF_DAY,
291               TMTEST.NULL_DELAY'ACCESS,
292               RTEMS.NULL_ADDRESS,
293               STATUS
294            );
295         end loop;
296      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
297
298      TIME_TEST_SUPPORT.PUT_TIME(
299         "TIMER_FIRE_WHEN (active)",
300         TMTEST.END_TIME,
301         TIME_TEST_SUPPORT.OPERATION_COUNT,
302         0,
303         RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN
304      );
305
306      TIMER_DRIVER.INITIALIZE;
307         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
308         loop
309            RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
310         end loop;
311      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
312
313      TIME_TEST_SUPPORT.PUT_TIME(
314         "TIMER_DELETE (active)",
315         TMTEST.END_TIME,
316         TIME_TEST_SUPPORT.OPERATION_COUNT,
317         0,
318         RTEMS_CALLING_OVERHEAD.TIMER_DELETE
319      );
320
321      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
322      loop
323         RTEMS.TIMER_CREATE( INDEX, TMTEST.TIMER_ID( INDEX ), STATUS );
324         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
325
326         RTEMS.TIMER_FIRE_AFTER(
327            TMTEST.TIMER_ID( INDEX ),
328            500,
329            TMTEST.NULL_DELAY'ACCESS,
330            RTEMS.NULL_ADDRESS,
331            STATUS
332         );
333         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
334
335         RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS );
336         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
337
338      end loop;
339
340      TIMER_DRIVER.INITIALIZE;
341         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
342         loop
343            RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS );
344         end loop;
345      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
346
347      TIME_TEST_SUPPORT.PUT_TIME(
348         "TIMER_DELETE (inactive)",
349         TMTEST.END_TIME,
350         TIME_TEST_SUPPORT.OPERATION_COUNT,
351         0,
352         RTEMS_CALLING_OVERHEAD.TIMER_DELETE
353      );
354
355      TIMER_DRIVER.INITIALIZE;
356         RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
357
358   end HIGH_TASK;
359
360--PAGE
361--
362--  MIDDLE_TASKS
363--
364
365   procedure MIDDLE_TASKS (
366      ARGUMENT : in     RTEMS.TASK_ARGUMENT
367   ) is
368      STATUS : RTEMS.STATUS_CODES;
369   begin
370
371      RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS );
372
373   end MIDDLE_TASKS;
374
375--PAGE
376--
377--  LOW_TASK
378--
379
380   procedure LOW_TASK (
381      ARGUMENT : in     RTEMS.TASK_ARGUMENT
382   ) is
383   begin
384
385      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
386
387      TIME_TEST_SUPPORT.PUT_TIME(
388         "TASK_WAKE_WHEN",
389         TMTEST.END_TIME,
390         TIME_TEST_SUPPORT.OPERATION_COUNT,
391         0,
392         RTEMS_CALLING_OVERHEAD.TASK_WAKE_WHEN
393      );
394
395      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
396
397   end LOW_TASK;
398
399end TMTEST;
Note: See TracBrowser for help on using the repository browser.