source: rtems/c/src/ada-tests/tmtests/tm04/tmtest.adb @ 16e8d3d

4.104.114.84.95
Last change on this file since 16e8d3d 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: 12.4 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 4 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      STATUS  : RTEMS.STATUS_CODES;
42   begin
43
44      TEXT_IO.NEW_LINE( 2 );
45      TEXT_IO.PUT_LINE( "*** TIME TEST 4 ***" );
46
47      TMTEST.TEST_INIT;
48
49      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
50      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
51
52   end INIT;
53
54--PAGE
55--
56--  TEST_INIT
57--
58
59   procedure TEST_INIT
60   is
61      STATUS   : RTEMS.STATUS_CODES;
62   begin
63
64      TMTEST.TASK_COUNT := TIME_TEST_SUPPORT.OPERATION_COUNT;
65
66      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
67      loop
68
69         RTEMS.TASK_CREATE(
70            RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
71            10,
72            1024,
73            RTEMS.NO_PREEMPT,
74            RTEMS.DEFAULT_ATTRIBUTES,
75            TMTEST.TASK_ID( INDEX ),
76            STATUS
77         );
78         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
79
80         RTEMS.TASK_START(
81            TMTEST.TASK_ID( INDEX ),
82            TMTEST.LOW_TASKS'ACCESS,
83            0,
84            STATUS
85         );
86         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
87
88      end loop;
89
90      RTEMS.SEMAPHORE_CREATE(
91         RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
92         0,
93         RTEMS.DEFAULT_ATTRIBUTES,
94         RTEMS.NO_PRIORITY,
95         TMTEST.SEMAPHORE_ID,
96         STATUS
97      );
98      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
99
100   end TEST_INIT;
101
102--PAGE
103--
104--  HIGHEST_TASK
105--
106
107   procedure HIGHEST_TASK (
108      ARGUMENT : in     RTEMS.TASK_ARGUMENT
109   ) is
110      OLD_PRIORITY : RTEMS.TASK_PRIORITY;
111      STATUS       : RTEMS.STATUS_CODES;
112   begin
113
114      if ARGUMENT = 1 then
115
116         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
117
118         TIME_TEST_SUPPORT.PUT_TIME(
119            "TASK_RESTART (blocked, preempt)",
120            TMTEST.END_TIME,
121            1,
122            0,
123            RTEMS_CALLING_OVERHEAD.TASK_RESTART
124         );
125 
126         RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, OLD_PRIORITY, STATUS );
127         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
128
129      elsif ARGUMENT = 2 then
130
131         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
132
133         TIME_TEST_SUPPORT.PUT_TIME(
134            "TASK_RESTART (ready, preempt)",
135            TMTEST.END_TIME,
136            1,
137            0,
138            RTEMS_CALLING_OVERHEAD.TASK_RESTART
139         );
140
141         RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
142         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
143 
144      else
145
146         RTEMS.SEMAPHORE_OBTAIN(
147            TMTEST.SEMAPHORE_ID,
148            RTEMS.DEFAULT_OPTIONS,
149            RTEMS.NO_TIMEOUT,
150            STATUS
151         );
152
153      end if;
154
155   end HIGHEST_TASK;
156
157--PAGE
158--
159--  HIGH_TASK
160--
161
162   procedure HIGH_TASK (
163      ARGUMENT : in     RTEMS.TASK_ARGUMENT
164   ) is
165      OLD_PRIORITY : RTEMS.TASK_PRIORITY;
166      OVERHEAD     : RTEMS.UNSIGNED32;
167      NAME         : RTEMS.NAME;
168      STATUS       : RTEMS.STATUS_CODES;
169   begin
170 
171      TIMER_DRIVER.INITIALIZE;
172         RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 1, STATUS );
173      -- preempted by Higher_task
174
175      TIMER_DRIVER.INITIALIZE;
176         RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 2, STATUS );
177      -- preempted by Higher_task
178
179      TIMER_DRIVER.INITIALIZE;
180         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
181         loop
182            TIMER_DRIVER.EMPTY_FUNCTION;
183         end loop;
184      OVERHEAD := TIMER_DRIVER.READ_TIMER;
185
186      TIMER_DRIVER.INITIALIZE;
187         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
188         loop
189            RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS );
190         end loop;
191      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
192
193      TIME_TEST_SUPPORT.PUT_TIME(
194         "SEMAPHORE_RELEASE (readying)",
195         TMTEST.END_TIME,
196         TIME_TEST_SUPPORT.OPERATION_COUNT,
197         OVERHEAD,
198         RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
199      );
200
201      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
202      loop
203         RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
204         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
205      end loop;
206     
207      NAME := RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' );
208
209      TIMER_DRIVER.INITIALIZE;
210         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
211         loop
212            RTEMS.TASK_CREATE(
213               NAME,
214               10,
215               1024,
216               RTEMS.NO_PREEMPT,
217               RTEMS.DEFAULT_ATTRIBUTES,
218               TMTEST.TASK_ID( INDEX ),
219               STATUS
220            );
221         end loop;
222      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
223
224      TIME_TEST_SUPPORT.PUT_TIME(
225         "TASK_CREATE",
226         TMTEST.END_TIME,
227         TIME_TEST_SUPPORT.OPERATION_COUNT,
228         OVERHEAD,
229         RTEMS_CALLING_OVERHEAD.TASK_CREATE
230      );
231
232      TIMER_DRIVER.INITIALIZE;
233         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
234         loop
235            RTEMS.TASK_START(
236               TMTEST.TASK_ID( INDEX ),
237               TMTEST.LOW_TASKS'ACCESS,
238               0,
239               STATUS
240            );
241         end loop;
242      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
243
244      TIME_TEST_SUPPORT.PUT_TIME(
245         "TASK_START",
246         TMTEST.END_TIME,
247         TIME_TEST_SUPPORT.OPERATION_COUNT,
248         OVERHEAD,
249         RTEMS_CALLING_OVERHEAD.TASK_START
250      );
251
252      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
253      loop
254         RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
255         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
256      end loop;
257     
258      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
259      loop
260         RTEMS.TASK_CREATE(
261            NAME,
262            250,
263            1024,
264            RTEMS.NO_PREEMPT,
265            RTEMS.DEFAULT_ATTRIBUTES,
266            TMTEST.TASK_ID( INDEX ),
267            STATUS
268         );
269         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
270         RTEMS.TASK_START(
271            TMTEST.TASK_ID( INDEX ),
272            TMTEST.RESTART_TASK'ACCESS,
273            0,
274            STATUS
275         );
276         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
277         RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS );
278         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" );
279      end loop;
280     
281      TIMER_DRIVER.INITIALIZE;
282         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
283         loop
284            RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 0, STATUS );
285         end loop;
286      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
287
288      TIME_TEST_SUPPORT.PUT_TIME(
289         "TASK_RESTART (suspended)",
290         TMTEST.END_TIME,
291         TIME_TEST_SUPPORT.OPERATION_COUNT,
292         OVERHEAD,
293         RTEMS_CALLING_OVERHEAD.TASK_RESTART
294      );
295
296      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
297      loop
298         RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS );
299         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" );
300      end loop;
301
302      TIMER_DRIVER.INITIALIZE;
303         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
304         loop
305            RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
306         end loop;
307      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
308
309      TIME_TEST_SUPPORT.PUT_TIME(
310         "TASK_DELETE (suspended)",
311         TMTEST.END_TIME,
312         TIME_TEST_SUPPORT.OPERATION_COUNT,
313         OVERHEAD,
314         RTEMS_CALLING_OVERHEAD.TASK_DELETE
315      );
316
317      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
318      loop
319         RTEMS.TASK_CREATE(
320            NAME,
321            250,
322            1024,
323            RTEMS.DEFAULT_OPTIONS,
324            RTEMS.DEFAULT_ATTRIBUTES,
325            TMTEST.TASK_ID( INDEX ),
326            STATUS
327         );
328         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
329         RTEMS.TASK_START(
330            TMTEST.TASK_ID( INDEX ),
331            TMTEST.RESTART_TASK'ACCESS,
332            0,
333            STATUS
334         );
335         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
336      end loop;
337     
338      TIMER_DRIVER.INITIALIZE;
339         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
340         loop
341            RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS );
342         end loop;
343      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
344
345      TIME_TEST_SUPPORT.PUT_TIME(
346         "TASK_RESTART (ready)",
347         TMTEST.END_TIME,
348         TIME_TEST_SUPPORT.OPERATION_COUNT,
349         OVERHEAD,
350         RTEMS_CALLING_OVERHEAD.TASK_RESTART
351      );
352
353      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
354      loop
355         RTEMS.TASK_SET_PRIORITY(
356            TMTEST.TASK_ID( INDEX ),
357            5,
358            OLD_PRIORITY,
359            STATUS
360         );
361         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY LOOP" );
362      end loop;
363
364      -- yield processor -- tasks block
365      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
366      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
367   
368      TIMER_DRIVER.INITIALIZE;
369         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
370         loop
371            RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS );
372         end loop;
373      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
374
375      TIME_TEST_SUPPORT.PUT_TIME(
376         "TASK_RESTART (blocked, no preempt)",
377         TMTEST.END_TIME,
378         TIME_TEST_SUPPORT.OPERATION_COUNT,
379         OVERHEAD,
380         RTEMS_CALLING_OVERHEAD.TASK_RESTART
381      );
382
383      -- yield processor -- tasks block
384      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
385      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
386   
387      TIMER_DRIVER.INITIALIZE;
388         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
389         loop
390            RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS );
391         end loop;
392      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
393
394      TIME_TEST_SUPPORT.PUT_TIME(
395         "TASK_DELETE (blocked)",
396         TMTEST.END_TIME,
397         TIME_TEST_SUPPORT.OPERATION_COUNT,
398         OVERHEAD,
399         RTEMS_CALLING_OVERHEAD.TASK_DELETE
400      );
401
402      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
403
404   end HIGH_TASK;
405
406--PAGE
407--
408--  LOW_TASKS
409--
410
411   procedure LOW_TASKS (
412      ARGUMENT : in     RTEMS.TASK_ARGUMENT
413   ) is
414      ID         : RTEMS.ID;
415      STATUS     : RTEMS.STATUS_CODES;
416   begin
417   
418      TMTEST.TASK_COUNT := TMTEST.TASK_COUNT - 1;
419
420      if TMTEST.TASK_COUNT = 0 then
421
422         RTEMS.TASK_CREATE(
423            RTEMS.BUILD_NAME( 'H', 'I', ' ', ' ' ),
424            5,
425            2048,
426            RTEMS.DEFAULT_OPTIONS,
427            RTEMS.DEFAULT_ATTRIBUTES,
428            ID,
429            STATUS
430         );
431         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HI" );
432
433         RTEMS.TASK_START(
434            ID,
435            TMTEST.HIGH_TASK'ACCESS,
436            0,
437            STATUS
438         );
439         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HI" );
440
441
442         RTEMS.TASK_CREATE(
443            RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
444            3,
445            2048,
446            RTEMS.DEFAULT_OPTIONS,
447            RTEMS.DEFAULT_ATTRIBUTES,
448            TMTEST.HIGHEST_ID,
449            STATUS
450         );
451         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" );
452
453         RTEMS.TASK_START(
454            TMTEST.HIGHEST_ID,
455            TMTEST.HIGHEST_TASK'ACCESS,
456            0,
457            STATUS
458         );
459         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" );
460
461
462      end if;
463
464      RTEMS.SEMAPHORE_OBTAIN(
465         TMTEST.SEMAPHORE_ID,
466         RTEMS.DEFAULT_OPTIONS,
467         RTEMS.NO_TIMEOUT,
468         STATUS
469      );
470
471   end LOW_TASKS;
472
473--PAGE
474--
475--  RESTART_TASK
476--
477
478   procedure RESTART_TASK (
479      ARGUMENT : in     RTEMS.TASK_ARGUMENT
480   ) is
481      STATUS   : RTEMS.STATUS_CODES;
482   begin
483   
484      if ARGUMENT = 1 then
485         RTEMS.SEMAPHORE_OBTAIN(
486            TMTEST.SEMAPHORE_ID,
487            RTEMS.DEFAULT_OPTIONS,
488            RTEMS.NO_TIMEOUT,
489            STATUS
490         );
491      end if;
492
493   end RESTART_TASK;
494
495end TMTEST;
Note: See TracBrowser for help on using the repository browser.