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

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

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 14.1 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               RETURN_VALUE,
436               STATUS
437            );
438         end loop;
439      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
440
441      TIME_TEST_SUPPORT.PUT_TIME( 
442         "IO_OPEN",
443         TMTEST.END_TIME, 
444         TIME_TEST_SUPPORT.OPERATION_COUNT,
445         0,
446         RTEMS_CALLING_OVERHEAD.IO_OPEN
447      );
448
449      TIMER_DRIVER.INITIALIZE;
450         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
451         loop
452            RTEMS.IO_CLOSE(
453               1, 
454               0,
455               RTEMS.NULL_ADDRESS,
456               RETURN_VALUE,
457               STATUS
458            );
459         end loop;
460      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
461
462      TIME_TEST_SUPPORT.PUT_TIME( 
463         "IO_CLOSE",
464         TMTEST.END_TIME, 
465         TIME_TEST_SUPPORT.OPERATION_COUNT,
466         0,
467         RTEMS_CALLING_OVERHEAD.IO_CLOSE
468      );
469
470      TIMER_DRIVER.INITIALIZE;
471         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
472         loop
473            RTEMS.IO_READ(
474               1, 
475               0,
476               RTEMS.NULL_ADDRESS,
477               RETURN_VALUE,
478               STATUS
479            );
480         end loop;
481      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
482
483      TIME_TEST_SUPPORT.PUT_TIME( 
484         "IO_READ",
485         TMTEST.END_TIME, 
486         TIME_TEST_SUPPORT.OPERATION_COUNT,
487         0,
488         RTEMS_CALLING_OVERHEAD.IO_READ
489      );
490
491      TIMER_DRIVER.INITIALIZE;
492         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
493         loop
494            RTEMS.IO_WRITE(
495               1, 
496               0,
497               RTEMS.NULL_ADDRESS,
498               RETURN_VALUE,
499               STATUS
500            );
501         end loop;
502      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
503
504      TIME_TEST_SUPPORT.PUT_TIME( 
505         "IO_WRITE",
506         TMTEST.END_TIME, 
507         TIME_TEST_SUPPORT.OPERATION_COUNT,
508         0,
509         RTEMS_CALLING_OVERHEAD.IO_WRITE
510      );
511
512      TIMER_DRIVER.INITIALIZE;
513         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
514         loop
515            RTEMS.IO_CONTROL(
516               1, 
517               0,
518               RTEMS.NULL_ADDRESS,
519               RETURN_VALUE,
520               STATUS
521            );
522         end loop;
523      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
524
525      TIME_TEST_SUPPORT.PUT_TIME( 
526         "IO_CONTROL",
527         TMTEST.END_TIME, 
528         TIME_TEST_SUPPORT.OPERATION_COUNT,
529         0,
530         RTEMS_CALLING_OVERHEAD.IO_CONTROL
531      );
532
533      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
534
535   end TASK_1;
536
537--PAGE
538--
539--  TASK_2
540--
541
542   procedure TASK_2 (
543      ARGUMENT : in     RTEMS.TASK_ARGUMENT
544   ) is
545      STATUS            : RTEMS.STATUS_CODES;
546   begin
547
548      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
549
550      TIME_TEST_SUPPORT.PUT_TIME( 
551         "REGION_GET_SEGMENT (blocking)",
552         TMTEST.END_TIME, 
553         1,
554         0,
555         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
556      );
557
558      TIMER_DRIVER.INITIALIZE;
559         RTEMS.REGION_RETURN_SEGMENT(
560            TMTEST.REGION_ID,
561            TMTEST.BUFFER_ADDRESS_1,
562            STATUS
563         );
564
565      -- preempt back to TASK_1
566
567      TIMER_DRIVER.INITIALIZE;
568         RTEMS.REGION_RETURN_SEGMENT(
569            TMTEST.REGION_ID,
570            TMTEST.BUFFER_ADDRESS_1,
571            STATUS
572         );
573      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
574
575      TIME_TEST_SUPPORT.PUT_TIME( 
576         "REGION_RETURN_SEGMENT (ready -- return)",
577         TMTEST.END_TIME, 
578         1,
579         0,
580         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
581      );
582
583      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
584      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
585
586   end TASK_2;
587
588end TMTEST;
Note: See TracBrowser for help on using the repository browser.