source: rtems/c/src/ada-tests/tmtests/tm23/tmtest.adb @ 820901ba

4.104.114.84.95
Last change on this file since 820901ba was 820901ba, checked in by Joel Sherrill <joel.sherrill@…>, on 05/03/05 at 21:41:45

2005-05-03 Joel Sherrill <joel@…>

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