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

4.104.114.84.95
Last change on this file since a846105 was a846105, checked in by Ralf Corsepius <ralf.corsepius@…>, on Aug 27, 2002 at 6:57:46 AM

2002-08-27 Ralf Corsepius <corsepiu@…>

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