source: rtems/c/src/ada-tests/tmtests/tm20/tmtest.adb @ cbb09503

4.104.114.84.95
Last change on this file since cbb09503 was cbb09503, checked in by Joel Sherrill <joel.sherrill@…>, on Aug 27, 2002 at 2:05:45 PM

2002-08-27 Joel Sherrill <joel@…>

  • tmtests/tm20/tmtest.adb, tmtests/tmoverhd/tmtest.adb: Fixed call to RTEMS IO Manager services.
  • Property mode set to 100644
File size: 13.8 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 20 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      STATUS     : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT_LINE( "*** TIME TEST 20 ***" );
47
48      RTEMS.TASK_CREATE( 
49         RTEMS.BUILD_NAME( 'T', 'I', 'M', '1' ),
50         128,
51         2048, 
52         RTEMS.DEFAULT_MODES,
53         RTEMS.DEFAULT_ATTRIBUTES,
54         TMTEST.TASK_ID( 1 ), 
55         STATUS
56      );
57      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" );
58
59      RTEMS.TASK_START( 
60         TMTEST.TASK_ID( 1 ), 
61         TMTEST.TASK_1'ACCESS, 
62         0, 
63         STATUS
64      );
65      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" );
66
67      RTEMS.TASK_CREATE( 
68         RTEMS.BUILD_NAME( 'T', 'I', 'M', '2' ),
69         129,
70         2048, 
71         RTEMS.DEFAULT_MODES,
72         RTEMS.DEFAULT_ATTRIBUTES,
73         TMTEST.TASK_ID( 2 ), 
74         STATUS
75      );
76      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" );
77
78      RTEMS.TASK_START( 
79         TMTEST.TASK_ID( 2 ), 
80         TMTEST.TASK_2'ACCESS, 
81         0, 
82         STATUS
83      );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" );
85
86      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
87      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
88
89   end INIT;
90
91--PAGE
92--
93--  TASK_1
94--
95
96   procedure TASK_1 (
97      ARGUMENT : in     RTEMS.TASK_ARGUMENT
98   ) is
99      BUFFER_COUNT      : RTEMS.UNSIGNED32;
100      INDEX             : RTEMS.UNSIGNED32;
101      PREVIOUS_MODE     : RTEMS.MODE;
102      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
103      OVERHEAD          : RTEMS.UNSIGNED32;
104      STATUS            : RTEMS.STATUS_CODES;
105   begin
106
107      TMTEST.PARTITION_NAME := RTEMS.BUILD_NAME( 'P', 'A', 'R', 'T' );
108
109      TIMER_DRIVER.INITIALIZE;
110
111         RTEMS.PARTITION_CREATE(
112            TMTEST.PARTITION_NAME,
113            TMTEST.PARTITION_AREA'ADDRESS,
114            2048,
115            128,
116            RTEMS.DEFAULT_ATTRIBUTES,
117            TMTEST.PARTITION_ID,
118            STATUS
119         );
120      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
121
122      TIME_TEST_SUPPORT.PUT_TIME( 
123         "PARTITION_CREATE",
124         TMTEST.END_TIME, 
125         1,
126         0,
127         RTEMS_CALLING_OVERHEAD.PARTITION_CREATE
128      );
129
130      TMTEST.REGION_NAME := RTEMS.BUILD_NAME( 'R', 'E', 'G', 'N' );
131
132      TIMER_DRIVER.INITIALIZE;
133
134         RTEMS.REGION_CREATE(
135            TMTEST.REGION_NAME,
136            TMTEST.REGION_AREA'ADDRESS,
137            2048,
138            16,
139            RTEMS.DEFAULT_ATTRIBUTES,
140            TMTEST.REGION_ID,
141            STATUS
142         );
143      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
144
145      TIME_TEST_SUPPORT.PUT_TIME( 
146         "REGION_CREATE",
147         TMTEST.END_TIME, 
148         1,
149         0,
150         RTEMS_CALLING_OVERHEAD.REGION_CREATE
151      );
152
153      TIMER_DRIVER.INITIALIZE;
154         RTEMS.PARTITION_GET_BUFFER(
155            TMTEST.PARTITION_ID,
156            TMTEST.BUFFER_ADDRESS_1,
157            STATUS
158         );
159      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
160
161      TIME_TEST_SUPPORT.PUT_TIME( 
162         "PARTITION_GET_BUFFER (available)",
163         TMTEST.END_TIME, 
164         1,
165         0,
166         RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
167      );
168
169      BUFFER_COUNT := 0;
170      loop 
171
172         RTEMS.PARTITION_GET_BUFFER(
173            TMTEST.PARTITION_ID,
174            TMTEST.BUFFER_ADDRESSES( BUFFER_COUNT ),
175            STATUS
176         );
177
178         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
179
180         BUFFER_COUNT := BUFFER_COUNT + 1;
181
182      end loop;
183
184      TIMER_DRIVER.INITIALIZE;
185         RTEMS.PARTITION_GET_BUFFER(
186            TMTEST.PARTITION_ID,
187            TMTEST.BUFFER_ADDRESS_2,
188            STATUS
189         );
190      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
191
192      TIME_TEST_SUPPORT.PUT_TIME( 
193         "PARTITION_GET_BUFFER (not available)",
194         TMTEST.END_TIME, 
195         1,
196         0,
197         RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
198      );
199
200      TIMER_DRIVER.INITIALIZE;
201         RTEMS.PARTITION_RETURN_BUFFER(
202            TMTEST.PARTITION_ID,
203            TMTEST.BUFFER_ADDRESS_1,
204            STATUS
205         );
206      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
207
208      TIME_TEST_SUPPORT.PUT_TIME( 
209         "PARTITION_RETURN_BUFFER",
210         TMTEST.END_TIME, 
211         1,
212         0,
213         RTEMS_CALLING_OVERHEAD.PARTITION_RETURN_BUFFER
214      );
215
216      for INDEX in 0 .. BUFFER_COUNT - 1
217      loop
218
219         RTEMS.PARTITION_RETURN_BUFFER(
220            TMTEST.PARTITION_ID,
221            TMTEST.BUFFER_ADDRESSES( INDEX ),
222            STATUS
223         );
224         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
225
226      end loop;
227
228      TIMER_DRIVER.INITIALIZE;
229         RTEMS.PARTITION_DELETE( TMTEST.PARTITION_ID, STATUS );
230      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
231
232      TIME_TEST_SUPPORT.PUT_TIME( 
233         "PARTITION_DELETE",
234         TMTEST.END_TIME, 
235         1,
236         0,
237         RTEMS_CALLING_OVERHEAD.PARTITION_DELETE
238      );
239
240      RTEMS.REGION_GET_SEGMENT(
241         TMTEST.REGION_ID,
242         400,
243         RTEMS.DEFAULT_OPTIONS,
244         RTEMS.NO_TIMEOUT,
245         TMTEST.BUFFER_ADDRESS_2,
246         STATUS
247      );
248      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
249
250      TIMER_DRIVER.INITIALIZE;
251         RTEMS.REGION_GET_SEGMENT(
252            TMTEST.REGION_ID,
253            400,
254            RTEMS.DEFAULT_OPTIONS,
255            RTEMS.NO_TIMEOUT,
256            TMTEST.BUFFER_ADDRESS_3,
257            STATUS
258         );
259      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
260
261      TIME_TEST_SUPPORT.PUT_TIME( 
262         "REGION_GET_SEGMENT (available)",
263         TMTEST.END_TIME, 
264         1,
265         0,
266         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
267      );
268
269      TIMER_DRIVER.INITIALIZE;
270         RTEMS.REGION_GET_SEGMENT(
271            TMTEST.REGION_ID,
272            1998,
273            RTEMS.NO_WAIT,
274            RTEMS.NO_TIMEOUT,
275            TMTEST.BUFFER_ADDRESS_4,
276            STATUS
277         );
278      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
279
280      TIME_TEST_SUPPORT.PUT_TIME( 
281         "REGION_GET_SEGMENT (NO_WAIT)",
282         TMTEST.END_TIME, 
283         1,
284         0,
285         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
286      );
287
288      RTEMS.REGION_RETURN_SEGMENT(
289         TMTEST.REGION_ID,
290         TMTEST.BUFFER_ADDRESS_3,
291         STATUS
292      );
293      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
294
295      TIMER_DRIVER.INITIALIZE;
296         RTEMS.REGION_RETURN_SEGMENT(
297            TMTEST.REGION_ID,
298            TMTEST.BUFFER_ADDRESS_2,
299            STATUS
300         );
301      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
302
303      TIME_TEST_SUPPORT.PUT_TIME( 
304         "REGION_RETURN_SEGMENT (no tasks waiting)",
305         TMTEST.END_TIME, 
306         1,
307         0,
308         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
309      );
310
311      RTEMS.REGION_GET_SEGMENT(
312         TMTEST.REGION_ID,
313         400,
314         RTEMS.DEFAULT_OPTIONS,
315         RTEMS.NO_TIMEOUT,
316         TMTEST.BUFFER_ADDRESS_1,
317         STATUS
318      );
319      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
320
321      TIMER_DRIVER.INITIALIZE;
322         RTEMS.REGION_GET_SEGMENT(
323            TMTEST.REGION_ID,
324            1998,
325            RTEMS.DEFAULT_OPTIONS,
326            RTEMS.NO_TIMEOUT,
327            TMTEST.BUFFER_ADDRESS_2,
328            STATUS
329         );
330
331      -- execute TASK_2
332
333      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
334
335      TIME_TEST_SUPPORT.PUT_TIME( 
336         "REGION_RETURN_SEGMENT (preempt)",
337         TMTEST.END_TIME, 
338         1,
339         0,
340         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
341      );
342
343      RTEMS.REGION_RETURN_SEGMENT(
344         TMTEST.REGION_ID,
345         TMTEST.BUFFER_ADDRESS_2,
346         STATUS
347      );
348      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
349
350      RTEMS.TASK_MODE(
351         RTEMS.NO_PREEMPT,
352         RTEMS.PREEMPT_MASK,
353         PREVIOUS_MODE,
354         STATUS
355      );
356      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
357
358      RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, PREVIOUS_PRIORITY, STATUS );
359      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
360
361      RTEMS.REGION_GET_SEGMENT(
362         TMTEST.REGION_ID,
363         400,
364         RTEMS.DEFAULT_OPTIONS,
365         RTEMS.NO_TIMEOUT,
366         TMTEST.BUFFER_ADDRESS_1,
367         STATUS
368      );
369
370      RTEMS.REGION_GET_SEGMENT(
371         TMTEST.REGION_ID,
372         1998,
373         RTEMS.DEFAULT_OPTIONS,
374         RTEMS.NO_TIMEOUT,
375         TMTEST.BUFFER_ADDRESS_2,
376         STATUS
377      );
378 
379      -- execute TASK_2
380
381      RTEMS.REGION_RETURN_SEGMENT(
382         TMTEST.REGION_ID,
383         TMTEST.BUFFER_ADDRESS_2,
384         STATUS
385      );
386
387      TIMER_DRIVER.INITIALIZE;
388         RTEMS.REGION_DELETE( TMTEST.REGION_ID, STATUS );
389      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
390
391      TIME_TEST_SUPPORT.PUT_TIME( 
392         "REGION_DELETE",
393         TMTEST.END_TIME, 
394         1,
395         0,
396         RTEMS_CALLING_OVERHEAD.REGION_DELETE
397      );
398
399      TIMER_DRIVER.INITIALIZE;
400         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
401         loop
402            TIMER_DRIVER.EMPTY_FUNCTION;
403         end loop;
404      OVERHEAD := TIMER_DRIVER.READ_TIMER;
405
406      TIMER_DRIVER.INITIALIZE;
407         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
408         loop
409            RTEMS.IO_INITIALIZE(
410               1, 
411               0,
412               RTEMS.NULL_ADDRESS,
413               STATUS
414            );
415         end loop;
416      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
417
418      TIME_TEST_SUPPORT.PUT_TIME( 
419         "IO_INITIALIZE",
420         TMTEST.END_TIME, 
421         TIME_TEST_SUPPORT.OPERATION_COUNT,
422         0,
423         RTEMS_CALLING_OVERHEAD.IO_INITIALIZE
424      );
425
426      TIMER_DRIVER.INITIALIZE;
427         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
428         loop
429            RTEMS.IO_OPEN(
430               1, 
431               0,
432               RTEMS.NULL_ADDRESS,
433               STATUS
434            );
435         end loop;
436      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
437
438      TIME_TEST_SUPPORT.PUT_TIME( 
439         "IO_OPEN",
440         TMTEST.END_TIME, 
441         TIME_TEST_SUPPORT.OPERATION_COUNT,
442         0,
443         RTEMS_CALLING_OVERHEAD.IO_OPEN
444      );
445
446      TIMER_DRIVER.INITIALIZE;
447         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
448         loop
449            RTEMS.IO_CLOSE(
450               1, 
451               0,
452               RTEMS.NULL_ADDRESS,
453               STATUS
454            );
455         end loop;
456      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
457
458      TIME_TEST_SUPPORT.PUT_TIME( 
459         "IO_CLOSE",
460         TMTEST.END_TIME, 
461         TIME_TEST_SUPPORT.OPERATION_COUNT,
462         0,
463         RTEMS_CALLING_OVERHEAD.IO_CLOSE
464      );
465
466      TIMER_DRIVER.INITIALIZE;
467         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
468         loop
469            RTEMS.IO_READ(
470               1, 
471               0,
472               RTEMS.NULL_ADDRESS,
473               STATUS
474            );
475         end loop;
476      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
477
478      TIME_TEST_SUPPORT.PUT_TIME( 
479         "IO_READ",
480         TMTEST.END_TIME, 
481         TIME_TEST_SUPPORT.OPERATION_COUNT,
482         0,
483         RTEMS_CALLING_OVERHEAD.IO_READ
484      );
485
486      TIMER_DRIVER.INITIALIZE;
487         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
488         loop
489            RTEMS.IO_WRITE(
490               1, 
491               0,
492               RTEMS.NULL_ADDRESS,
493               STATUS
494            );
495         end loop;
496      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
497
498      TIME_TEST_SUPPORT.PUT_TIME( 
499         "IO_WRITE",
500         TMTEST.END_TIME, 
501         TIME_TEST_SUPPORT.OPERATION_COUNT,
502         0,
503         RTEMS_CALLING_OVERHEAD.IO_WRITE
504      );
505
506      TIMER_DRIVER.INITIALIZE;
507         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
508         loop
509            RTEMS.IO_CONTROL(
510               1, 
511               0,
512               RTEMS.NULL_ADDRESS,
513               STATUS
514            );
515         end loop;
516      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
517
518      TIME_TEST_SUPPORT.PUT_TIME( 
519         "IO_CONTROL",
520         TMTEST.END_TIME, 
521         TIME_TEST_SUPPORT.OPERATION_COUNT,
522         0,
523         RTEMS_CALLING_OVERHEAD.IO_CONTROL
524      );
525
526      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
527
528   end TASK_1;
529
530--PAGE
531--
532--  TASK_2
533--
534
535   procedure TASK_2 (
536      ARGUMENT : in     RTEMS.TASK_ARGUMENT
537   ) is
538      STATUS            : RTEMS.STATUS_CODES;
539   begin
540
541      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
542
543      TIME_TEST_SUPPORT.PUT_TIME( 
544         "REGION_GET_SEGMENT (blocking)",
545         TMTEST.END_TIME, 
546         1,
547         0,
548         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
549      );
550
551      TIMER_DRIVER.INITIALIZE;
552         RTEMS.REGION_RETURN_SEGMENT(
553            TMTEST.REGION_ID,
554            TMTEST.BUFFER_ADDRESS_1,
555            STATUS
556         );
557
558      -- preempt back to TASK_1
559
560      TIMER_DRIVER.INITIALIZE;
561         RTEMS.REGION_RETURN_SEGMENT(
562            TMTEST.REGION_ID,
563            TMTEST.BUFFER_ADDRESS_1,
564            STATUS
565         );
566      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
567
568      TIME_TEST_SUPPORT.PUT_TIME( 
569         "REGION_RETURN_SEGMENT (ready -- return)",
570         TMTEST.END_TIME, 
571         1,
572         0,
573         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
574      );
575
576      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
577      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
578
579   end TASK_2;
580
581end TMTEST;
Note: See TracBrowser for help on using the repository browser.