source: rtems/c/src/ada-tests/tmtests/tm08/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 06/02/97 at 20:32:11

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: 8.2 KB
RevLine 
[6d4e604b]1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 8 of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
[bf9ae83]13--  COPYRIGHT (c) 1989-1997.
[6d4e604b]14--  On-Line Applications Research Corporation (OAR).
[bf9ae83]15--  Copyright assigned to U.S. Government, 1994.
[6d4e604b]16--
[bf9ae83]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.
[6d4e604b]20--
[bf9ae83]21--  $Id$
[6d4e604b]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      TASK_ID : RTEMS.ID;
43      STATUS  : RTEMS.STATUS_CODES;
44   begin
45
46      TEXT_IO.NEW_LINE( 2 );
47      TEXT_IO.PUT_LINE( "*** TIME TEST 8 ***" );
48
49      TMTEST.TEST_INIT;
50
51      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
52      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
53
54   end INIT;
55
56--PAGE
57--
58--  TEST_INIT
59--
60
61   procedure TEST_INIT
62   is
63      STATUS     : RTEMS.STATUS_CODES;
64   begin
65
66      RTEMS.TASK_CREATE(
67         1,
68         128,
69         1024,
70         RTEMS.DEFAULT_OPTIONS,
71         RTEMS.DEFAULT_ATTRIBUTES,
72         TASK_ID,
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
76
77      RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
78      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
79
80      RTEMS.TASK_CREATE(
81         1,
82         254,
83         1024,
84         RTEMS.DEFAULT_OPTIONS,
85         RTEMS.DEFAULT_ATTRIBUTES,
86         TASK_ID,
87         STATUS
88      );
89      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
90
91      RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK1'ACCESS, 0, STATUS );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
93
94   end TEST_INIT;
95
96--PAGE
97--
98--  TEST_TASK
99--
100
101   procedure TEST_TASK (
102      ARGUMENT : in     RTEMS.TASK_ARGUMENT
103   ) is
104      INDEX        : RTEMS.UNSIGNED32;
105      OVERHEAD     : RTEMS.UNSIGNED32;
106      OLD_PRIORITY : RTEMS.TASK_PRIORITY;
107      OLD_MODE     : RTEMS.MODE;
108      OLD_NOTE     : RTEMS.NOTEPAD_INDEX;
109      TIME         : RTEMS.TIME_OF_DAY;
110      STATUS       : RTEMS.STATUS_CODES;
111   begin
112
113      TIMER_DRIVER.INITIALIZE;
114         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
115         loop
116            TIMER_DRIVER.EMPTY_FUNCTION;
117         end loop;
118      OVERHEAD := TIMER_DRIVER.READ_TIMER;
119
120      TIMER_DRIVER.INITIALIZE;
121         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
122         loop
123            RTEMS.TASK_SET_PRIORITY(
124               TMTEST.TASK_ID,
125               RTEMS.CURRENT_PRIORITY,
126               OLD_PRIORITY,
127               STATUS
128            );
129         end loop;
130      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
131      TIME_TEST_SUPPORT.PUT_TIME(
132         "TASK_SET_PRIORITY current priority",
133         TMTEST.END_TIME,
134         TIME_TEST_SUPPORT.OPERATION_COUNT,
135         OVERHEAD,
136         RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
137      );
138
139      TIMER_DRIVER.INITIALIZE;
140         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
141         loop
142            RTEMS.TASK_SET_PRIORITY(
143               TMTEST.TASK_ID,
144               253,
145               OLD_PRIORITY,
146               STATUS
147            );
148         end loop;
149      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
150      TIME_TEST_SUPPORT.PUT_TIME(
151         "TASK_SET_PRIORITY no preempt",
152         TMTEST.END_TIME,
153         TIME_TEST_SUPPORT.OPERATION_COUNT,
154         OVERHEAD,
155         RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
156      );
157
158      TIMER_DRIVER.INITIALIZE;
159         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
160         loop
161            RTEMS.TASK_MODE(
162               RTEMS.CURRENT_MODE,
163               RTEMS.CURRENT_MODE,
164               OLD_MODE,
165               STATUS
166            );
167         end loop;
168      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
169      TIME_TEST_SUPPORT.PUT_TIME(
170         "TASK_MODE (current)",
171         TMTEST.END_TIME,
172         TIME_TEST_SUPPORT.OPERATION_COUNT,
173         OVERHEAD,
174         RTEMS_CALLING_OVERHEAD.TASK_MODE
175      );
176
177      TIMER_DRIVER.INITIALIZE;
178         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
179         loop
180            RTEMS.TASK_MODE(
181               RTEMS.INTERRUPT_LEVEL( 1 ),
182               RTEMS.INTERRUPT_MASK,
183               OLD_MODE,
184               STATUS
185            );
186            RTEMS.TASK_MODE(
187               RTEMS.INTERRUPT_LEVEL( 0 ),
188               RTEMS.INTERRUPT_MASK,
189               OLD_MODE,
190               STATUS
191            );
192         end loop;
193      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
194      TIME_TEST_SUPPORT.PUT_TIME(
195         "TASK_MODE (no reschedule)",
196         TMTEST.END_TIME,
197         TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
198         OVERHEAD,
199         RTEMS_CALLING_OVERHEAD.TASK_MODE
200      );
201
202      TIMER_DRIVER.INITIALIZE;
203         RTEMS.TASK_MODE(
204            RTEMS.NO_ASR,
205            RTEMS.ASR_MASK,
206            OLD_MODE,
207            STATUS
208         );
209      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
210      TIME_TEST_SUPPORT.PUT_TIME(
211         "TASK_MODE (reschedule)",
212         TMTEST.END_TIME,
213         1,
214         0,
215         RTEMS_CALLING_OVERHEAD.TASK_MODE
216      );
217
218      RTEMS.TASK_MODE(
219         RTEMS.NO_PREEMPT,
220         RTEMS.PREEMPT_MASK,
221         OLD_MODE,
222         STATUS
223      );
224      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
225
226      RTEMS.TASK_SET_PRIORITY(
227         TMTEST.TASK_ID,
228         1,
229         OLD_PRIORITY,
230         STATUS
231      );
232      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
233
234      TIMER_DRIVER.INITIALIZE;
235      RTEMS.TASK_MODE(          -- preempted by TEST_TASK1
236         RTEMS.PREEMPT,
237         RTEMS.PREEMPT_MASK,
238         OLD_MODE,
239         STATUS
240      );
241
242      TIMER_DRIVER.INITIALIZE;
243         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
244         loop
245            RTEMS.TASK_SET_NOTE(
246               TMTEST.TASK_ID,
247               8,
248               10,
249               STATUS
250            );
251         end loop;
252      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
253      TIME_TEST_SUPPORT.PUT_TIME(
254         "TASK_SET_NOTE ",
255         TMTEST.END_TIME,
256         TIME_TEST_SUPPORT.OPERATION_COUNT,
257         OVERHEAD,
258         RTEMS_CALLING_OVERHEAD.TASK_SET_NOTE
259      );
260
261      TIMER_DRIVER.INITIALIZE;
262         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
263         loop
264            RTEMS.TASK_GET_NOTE(
265               TMTEST.TASK_ID,
266               8,
267               OLD_NOTE,
268               STATUS
269            );
270         end loop;
271      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
272      TIME_TEST_SUPPORT.PUT_TIME(
273         "TASK_GET_NOTE ",
274         TMTEST.END_TIME,
275         TIME_TEST_SUPPORT.OPERATION_COUNT,
276         OVERHEAD,
277         RTEMS_CALLING_OVERHEAD.TASK_GET_NOTE
278      );
279
280      TIME := (1988, 1, 1, 0, 0, 0, 0 );
281
282      TIMER_DRIVER.INITIALIZE;
283         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
284         loop
285            RTEMS.CLOCK_SET(
286               TIME,
287               STATUS
288            );
289         end loop;
290      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
291      TIME_TEST_SUPPORT.PUT_TIME(
292         "CLOCK_SET",
293         TMTEST.END_TIME,
294         TIME_TEST_SUPPORT.OPERATION_COUNT,
295         OVERHEAD,
296         RTEMS_CALLING_OVERHEAD.CLOCK_SET
297      );
298
299      TIMER_DRIVER.INITIALIZE;
300         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
301         loop
302            RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
303         end loop;
304      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
305      TIME_TEST_SUPPORT.PUT_TIME(
306         "CLOCK_GET",
307         TMTEST.END_TIME,
308         TIME_TEST_SUPPORT.OPERATION_COUNT,
309         OVERHEAD,
310         RTEMS_CALLING_OVERHEAD.CLOCK_GET
311      );
312
313      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
314
315   end TEST_TASK;
316
317--PAGE
318--
319--  TEST_TASK1
320--
321
322   procedure TEST_TASK1 (
323      ARGUMENT : in     RTEMS.TASK_ARGUMENT
324   ) is
325      STATUS       : RTEMS.STATUS_CODES;
326   begin
327
328      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
329      TIME_TEST_SUPPORT.PUT_TIME(
330         "TASK_MODE (preemptive) ",
331         TMTEST.END_TIME,
332         1,
333         0,
334         RTEMS_CALLING_OVERHEAD.TASK_MODE
335      );
336
337      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
338
339   end TEST_TASK1;
340
341end TMTEST;
Note: See TracBrowser for help on using the repository browser.