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

4.104.114.95
Last change on this file since ba3e1a4f was ba3e1a4f, checked in by Glenn Humphrey <glenn.humphrey@…>, on 10/10/07 at 20:58:48

2007-10-10 Glenn Humphrey <glenn.humphrey@…>

  • configure.ac, samples/base_sp/base_sp.scn, samples/base_sp/config.h, samples/base_sp/sptest.adb, samples/hello/config.h, samples/ticker/config.h, samples/ticker/ticker.scn, sptests/Makefile.am, sptests/sp01/sp01.scn, sptests/sp02/config.h, sptests/sp02/sp02.scn, sptests/sp03/config.h, sptests/sp03/sp03.scn, sptests/sp04/sp04.scn, sptests/sp04/sptest.adb, sptests/sp05/config.h, sptests/sp05/sp05.scn, sptests/sp06/config.h, sptests/sp07/config.h, sptests/sp07/sp07.scn, sptests/sp07/sptest.adb, sptests/sp07/sptest.ads, sptests/sp08/config.h, sptests/sp08/sp08.scn, sptests/sp09/Makefile.am, sptests/sp09/config.h, sptests/sp09/sp09.scn, sptests/sp09/sptest.adb, sptests/sp09/sptest.ads, sptests/sp11/config.h, sptests/sp11/sp11.scn, sptests/sp12/config.h, sptests/sp12/sp12.scn, sptests/sp13/config.h, sptests/sp13/sp13.scn, sptests/sp13/sptest.adb, sptests/sp14/config.h, sptests/sp14/sp14.scn, sptests/sp15/config.h, sptests/sp15/sp15.scn, sptests/sp16/config.h, sptests/sp16/sp16.scn, sptests/sp16/sptest.adb, sptests/sp17/config.h, sptests/sp19/config.h, sptests/sp19/sp19.scn, sptests/sp20/config.h, sptests/sp20/sp20.scn, sptests/sp22/config.h, sptests/sp22/sp22.scn, sptests/sp23/config.h, sptests/sp23/sp23.scn, sptests/sp24/config.h, sptests/sp24/sp24.scn, sptests/sp25/config.h, sptests/sp25/sp25.scn, support/init.c, support/test_support.adb, support/test_support.ads, tmtests/tm09/config.h, tmtests/tm20/tmtest.adb, tmtests/tmoverhd/dummy_rtems.adb, tmtests/tmoverhd/dummy_rtems.ads, tmtests/tmoverhd/tmtest.adb, tmtests/tmoverhd/tmtest.ads: Updated tests so that they would all compile and run without errors. Some tests that are no longer valid using the current binding were removed. Also updated the .scn files to reflect the current test output.
  • sptests/sp21/.cvsignore, sptests/sp21/Makefile.am, sptests/sp21/config.h, sptests/sp21/sp21.adb, sptests/sp21/sp21.scn, sptests/sp21/sptest.adb, sptests/sp21/sptest.ads, sptests/spsize/.cvsignore, sptests/spsize/Makefile.am, sptests/spsize/spsize.adb, sptests/spsize/sptest.adb, sptests/spsize/sptest.ads: Removed.
  • Property mode set to 100644
File size: 10.6 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-2007.
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      STATUS     : RTEMS.STATUS_CODES;
42   begin
43
44      TEXT_IO.NEW_LINE( 2 );
45      TEXT_IO.PUT_LINE( "*** TIME TEST 20 ***" );
46
47      RTEMS.TASK_CREATE(
48         RTEMS.BUILD_NAME( 'T', 'I', 'M', '1' ),
49         128,
50         2048,
51         RTEMS.DEFAULT_MODES,
52         RTEMS.DEFAULT_ATTRIBUTES,
53         TMTEST.TASK_ID( 1 ),
54         STATUS
55      );
56      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" );
57
58      RTEMS.TASK_START(
59         TMTEST.TASK_ID( 1 ),
60         TMTEST.TASK_1'ACCESS,
61         0,
62         STATUS
63      );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" );
65
66      RTEMS.TASK_CREATE(
67         RTEMS.BUILD_NAME( 'T', 'I', 'M', '2' ),
68         129,
69         2048,
70         RTEMS.DEFAULT_MODES,
71         RTEMS.DEFAULT_ATTRIBUTES,
72         TMTEST.TASK_ID( 2 ),
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" );
76
77      RTEMS.TASK_START(
78         TMTEST.TASK_ID( 2 ),
79         TMTEST.TASK_2'ACCESS,
80         0,
81         STATUS
82      );
83      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" );
84
85      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
86      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
87
88   end INIT;
89
90--PAGE
91--
92--  TASK_1
93--
94
95   procedure TASK_1 (
96      ARGUMENT : in     RTEMS.TASK_ARGUMENT
97   ) is
98      BUFFER_COUNT      : RTEMS.UNSIGNED32;
99      PREVIOUS_MODE     : RTEMS.MODE;
100      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
101      OVERHEAD          : RTEMS.UNSIGNED32;
102      STATUS            : RTEMS.STATUS_CODES;
103   begin
104
105      TMTEST.PARTITION_NAME := RTEMS.BUILD_NAME( 'P', 'A', 'R', 'T' );
106
107      TIMER_DRIVER.INITIALIZE;
108
109         RTEMS.PARTITION_CREATE(
110            TMTEST.PARTITION_NAME,
111            TMTEST.PARTITION_AREA'ADDRESS,
112            2048,
113            128,
114            RTEMS.DEFAULT_ATTRIBUTES,
115            TMTEST.PARTITION_ID,
116            STATUS
117         );
118      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
119
120      TIME_TEST_SUPPORT.PUT_TIME(
121         "PARTITION_CREATE",
122         TMTEST.END_TIME,
123         1,
124         0,
125         RTEMS_CALLING_OVERHEAD.PARTITION_CREATE
126      );
127
128      TMTEST.REGION_NAME := RTEMS.BUILD_NAME( 'R', 'E', 'G', 'N' );
129
130      TIMER_DRIVER.INITIALIZE;
131
132         RTEMS.REGION_CREATE(
133            TMTEST.REGION_NAME,
134            TMTEST.REGION_AREA'ADDRESS,
135            2048,
136            16,
137            RTEMS.DEFAULT_ATTRIBUTES,
138            TMTEST.REGION_ID,
139            STATUS
140         );
141      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
142
143      TIME_TEST_SUPPORT.PUT_TIME(
144         "REGION_CREATE",
145         TMTEST.END_TIME,
146         1,
147         0,
148         RTEMS_CALLING_OVERHEAD.REGION_CREATE
149      );
150
151      TIMER_DRIVER.INITIALIZE;
152         RTEMS.PARTITION_GET_BUFFER(
153            TMTEST.PARTITION_ID,
154            TMTEST.BUFFER_ADDRESS_1,
155            STATUS
156         );
157      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
158
159      TIME_TEST_SUPPORT.PUT_TIME(
160         "PARTITION_GET_BUFFER (available)",
161         TMTEST.END_TIME,
162         1,
163         0,
164         RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
165      );
166
167      BUFFER_COUNT := 0;
168      loop
169
170         RTEMS.PARTITION_GET_BUFFER(
171            TMTEST.PARTITION_ID,
172            TMTEST.BUFFER_ADDRESSES( BUFFER_COUNT ),
173            STATUS
174         );
175
176         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
177
178         BUFFER_COUNT := BUFFER_COUNT + 1;
179
180      end loop;
181
182      TIMER_DRIVER.INITIALIZE;
183         RTEMS.PARTITION_GET_BUFFER(
184            TMTEST.PARTITION_ID,
185            TMTEST.BUFFER_ADDRESS_2,
186            STATUS
187         );
188      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
189
190      TIME_TEST_SUPPORT.PUT_TIME(
191         "PARTITION_GET_BUFFER (not available)",
192         TMTEST.END_TIME,
193         1,
194         0,
195         RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER
196      );
197
198      TIMER_DRIVER.INITIALIZE;
199         RTEMS.PARTITION_RETURN_BUFFER(
200            TMTEST.PARTITION_ID,
201            TMTEST.BUFFER_ADDRESS_1,
202            STATUS
203         );
204      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
205
206      TIME_TEST_SUPPORT.PUT_TIME(
207         "PARTITION_RETURN_BUFFER",
208         TMTEST.END_TIME,
209         1,
210         0,
211         RTEMS_CALLING_OVERHEAD.PARTITION_RETURN_BUFFER
212      );
213
214      for INDEX in 0 .. BUFFER_COUNT - 1
215      loop
216
217         RTEMS.PARTITION_RETURN_BUFFER(
218            TMTEST.PARTITION_ID,
219            TMTEST.BUFFER_ADDRESSES( INDEX ),
220            STATUS
221         );
222         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
223
224      end loop;
225
226      TIMER_DRIVER.INITIALIZE;
227         RTEMS.PARTITION_DELETE( TMTEST.PARTITION_ID, STATUS );
228      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
229
230      TIME_TEST_SUPPORT.PUT_TIME(
231         "PARTITION_DELETE",
232         TMTEST.END_TIME,
233         1,
234         0,
235         RTEMS_CALLING_OVERHEAD.PARTITION_DELETE
236      );
237
238      RTEMS.REGION_GET_SEGMENT(
239         TMTEST.REGION_ID,
240         400,
241         RTEMS.DEFAULT_OPTIONS,
242         RTEMS.NO_TIMEOUT,
243         TMTEST.BUFFER_ADDRESS_2,
244         STATUS
245      );
246      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
247
248      TIMER_DRIVER.INITIALIZE;
249         RTEMS.REGION_GET_SEGMENT(
250            TMTEST.REGION_ID,
251            400,
252            RTEMS.DEFAULT_OPTIONS,
253            RTEMS.NO_TIMEOUT,
254            TMTEST.BUFFER_ADDRESS_3,
255            STATUS
256         );
257      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
258
259      TIME_TEST_SUPPORT.PUT_TIME(
260         "REGION_GET_SEGMENT (available)",
261         TMTEST.END_TIME,
262         1,
263         0,
264         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
265      );
266
267      TIMER_DRIVER.INITIALIZE;
268         RTEMS.REGION_GET_SEGMENT(
269            TMTEST.REGION_ID,
270            1998,
271            RTEMS.NO_WAIT,
272            RTEMS.NO_TIMEOUT,
273            TMTEST.BUFFER_ADDRESS_4,
274            STATUS
275         );
276      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
277
278      TIME_TEST_SUPPORT.PUT_TIME(
279         "REGION_GET_SEGMENT (NO_WAIT)",
280         TMTEST.END_TIME,
281         1,
282         0,
283         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
284      );
285
286      RTEMS.REGION_RETURN_SEGMENT(
287         TMTEST.REGION_ID,
288         TMTEST.BUFFER_ADDRESS_3,
289         STATUS
290      );
291      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
292
293      TIMER_DRIVER.INITIALIZE;
294         RTEMS.REGION_RETURN_SEGMENT(
295            TMTEST.REGION_ID,
296            TMTEST.BUFFER_ADDRESS_2,
297            STATUS
298         );
299      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
300
301      TIME_TEST_SUPPORT.PUT_TIME(
302         "REGION_RETURN_SEGMENT (no tasks waiting)",
303         TMTEST.END_TIME,
304         1,
305         0,
306         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
307      );
308
309      RTEMS.REGION_GET_SEGMENT(
310         TMTEST.REGION_ID,
311         400,
312         RTEMS.DEFAULT_OPTIONS,
313         RTEMS.NO_TIMEOUT,
314         TMTEST.BUFFER_ADDRESS_1,
315         STATUS
316      );
317      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
318
319      TIMER_DRIVER.INITIALIZE;
320         RTEMS.REGION_GET_SEGMENT(
321            TMTEST.REGION_ID,
322            1998,
323            RTEMS.DEFAULT_OPTIONS,
324            RTEMS.NO_TIMEOUT,
325            TMTEST.BUFFER_ADDRESS_2,
326            STATUS
327         );
328
329      -- execute TASK_2
330
331      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
332
333      TIME_TEST_SUPPORT.PUT_TIME(
334         "REGION_RETURN_SEGMENT (preempt)",
335         TMTEST.END_TIME,
336         1,
337         0,
338         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
339      );
340
341      RTEMS.REGION_RETURN_SEGMENT(
342         TMTEST.REGION_ID,
343         TMTEST.BUFFER_ADDRESS_2,
344         STATUS
345      );
346      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
347
348      RTEMS.TASK_MODE(
349         RTEMS.NO_PREEMPT,
350         RTEMS.PREEMPT_MASK,
351         PREVIOUS_MODE,
352         STATUS
353      );
354      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
355
356      RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, PREVIOUS_PRIORITY, STATUS );
357      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
358
359      RTEMS.REGION_GET_SEGMENT(
360         TMTEST.REGION_ID,
361         400,
362         RTEMS.DEFAULT_OPTIONS,
363         RTEMS.NO_TIMEOUT,
364         TMTEST.BUFFER_ADDRESS_1,
365         STATUS
366      );
367
368      RTEMS.REGION_GET_SEGMENT(
369         TMTEST.REGION_ID,
370         1998,
371         RTEMS.DEFAULT_OPTIONS,
372         RTEMS.NO_TIMEOUT,
373         TMTEST.BUFFER_ADDRESS_2,
374         STATUS
375      );
376 
377      -- execute TASK_2
378
379      RTEMS.REGION_RETURN_SEGMENT(
380         TMTEST.REGION_ID,
381         TMTEST.BUFFER_ADDRESS_2,
382         STATUS
383      );
384
385      TIMER_DRIVER.INITIALIZE;
386         RTEMS.REGION_DELETE( TMTEST.REGION_ID, STATUS );
387      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
388
389      TIME_TEST_SUPPORT.PUT_TIME(
390         "REGION_DELETE",
391         TMTEST.END_TIME,
392         1,
393         0,
394         RTEMS_CALLING_OVERHEAD.REGION_DELETE
395      );
396
397      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
398
399   end TASK_1;
400
401--PAGE
402--
403--  TASK_2
404--
405
406   procedure TASK_2 (
407      ARGUMENT : in     RTEMS.TASK_ARGUMENT
408   ) is
409      STATUS            : RTEMS.STATUS_CODES;
410   begin
411
412      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
413
414      TIME_TEST_SUPPORT.PUT_TIME(
415         "REGION_GET_SEGMENT (blocking)",
416         TMTEST.END_TIME,
417         1,
418         0,
419         RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT
420      );
421
422      TIMER_DRIVER.INITIALIZE;
423         RTEMS.REGION_RETURN_SEGMENT(
424            TMTEST.REGION_ID,
425            TMTEST.BUFFER_ADDRESS_1,
426            STATUS
427         );
428
429      -- preempt back to TASK_1
430
431      TIMER_DRIVER.INITIALIZE;
432         RTEMS.REGION_RETURN_SEGMENT(
433            TMTEST.REGION_ID,
434            TMTEST.BUFFER_ADDRESS_1,
435            STATUS
436         );
437      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
438
439      TIME_TEST_SUPPORT.PUT_TIME(
440         "REGION_RETURN_SEGMENT (ready -- return)",
441         TMTEST.END_TIME,
442         1,
443         0,
444         RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT
445      );
446
447      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
448      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
449
450   end TASK_2;
451
452end TMTEST;
Note: See TracBrowser for help on using the repository browser.