source: rtems/testsuites/ada/tmtests/tm08/tmtest.adb @ ee537ea

5
Last change on this file since ee537ea was ee537ea, checked in by Sebastian Huber <sebastian.huber@…>, on 10/12/17 at 08:00:10

ada-tests: Move to testsuites/ada

This solves a build dependency issue, e.g. building tests before
librtemsbsp.a exists.

Close #3079.

  • Property mode set to 100644
File size: 7.3 KB
Line 
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--
13--  COPYRIGHT (c) 1989-2011.
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.org/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with RTEMS_CALLING_OVERHEAD;
23with TEST_SUPPORT;
24with TEXT_IO;
25with TIME_TEST_SUPPORT;
26with TIMER_DRIVER;
27with RTEMS.CLOCK;
28
29package body TMTEST is
30
31--
32--  INIT
33--
34
35   procedure INIT (
36      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
37   ) is
38      pragma Unreferenced(ARGUMENT);
39      STATUS  : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT_LINE( "*** TIME TEST 8 ***" );
44
45      TMTEST.TEST_INIT;
46
47      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
48      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
49
50   end INIT;
51
52--
53--  TEST_INIT
54--
55
56   procedure TEST_INIT
57   is
58      STATUS     : RTEMS.STATUS_CODES;
59   begin
60
61      RTEMS.TASKS.CREATE(
62         1,
63         128,
64         1024,
65         RTEMS.DEFAULT_OPTIONS,
66         RTEMS.DEFAULT_ATTRIBUTES,
67         TASK_ID,
68         STATUS
69      );
70      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
71
72      RTEMS.TASKS.START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
73      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
74
75      RTEMS.TASKS.CREATE(
76         1,
77         254,
78         1024,
79         RTEMS.DEFAULT_OPTIONS,
80         RTEMS.DEFAULT_ATTRIBUTES,
81         TASK_ID,
82         STATUS
83      );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
85
86      RTEMS.TASKS.START( TASK_ID, TMTEST.TEST_TASK1'ACCESS, 0, STATUS );
87      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
88
89   end TEST_INIT;
90
91--
92--  TEST_TASK
93--
94
95   procedure TEST_TASK (
96      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
97   ) is
98      pragma Unreferenced(ARGUMENT);
99      OVERHEAD     : RTEMS.UNSIGNED32;
100      OLD_PRIORITY : RTEMS.TASKS.PRIORITY;
101      OLD_MODE     : RTEMS.MODE;
102      TIME         : RTEMS.TIME_OF_DAY;
103      STATUS       : RTEMS.STATUS_CODES;
104   begin
105
106      TIMER_DRIVER.INITIALIZE;
107         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
108         loop
109            TIMER_DRIVER.EMPTY_FUNCTION;
110         end loop;
111      OVERHEAD := TIMER_DRIVER.READ_TIMER;
112
113      TIMER_DRIVER.INITIALIZE;
114         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
115         loop
116            RTEMS.TASKS.SET_PRIORITY(
117               TMTEST.TASK_ID,
118               RTEMS.TASKS.CURRENT_PRIORITY,
119               OLD_PRIORITY,
120               STATUS
121            );
122         end loop;
123      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
124      TIME_TEST_SUPPORT.PUT_TIME(
125         "TASK_SET_PRIORITY current priority",
126         TMTEST.END_TIME,
127         TIME_TEST_SUPPORT.OPERATION_COUNT,
128         OVERHEAD,
129         RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
130      );
131
132      TIMER_DRIVER.INITIALIZE;
133         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
134         loop
135            RTEMS.TASKS.SET_PRIORITY(
136               TMTEST.TASK_ID,
137               253,
138               OLD_PRIORITY,
139               STATUS
140            );
141         end loop;
142      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
143      TIME_TEST_SUPPORT.PUT_TIME(
144         "TASK_SET_PRIORITY no preempt",
145         TMTEST.END_TIME,
146         TIME_TEST_SUPPORT.OPERATION_COUNT,
147         OVERHEAD,
148         RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY
149      );
150
151      TIMER_DRIVER.INITIALIZE;
152         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
153         loop
154            RTEMS.TASKS.MODE(
155               RTEMS.CURRENT_MODE,
156               RTEMS.CURRENT_MODE,
157               OLD_MODE,
158               STATUS
159            );
160         end loop;
161      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
162      TIME_TEST_SUPPORT.PUT_TIME(
163         "TASK_MODE (current)",
164         TMTEST.END_TIME,
165         TIME_TEST_SUPPORT.OPERATION_COUNT,
166         OVERHEAD,
167         RTEMS_CALLING_OVERHEAD.TASK_MODE
168      );
169
170      TIMER_DRIVER.INITIALIZE;
171         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
172         loop
173            RTEMS.TASKS.MODE(
174               RTEMS.INTERRUPT_LEVEL( 1 ),
175               RTEMS.INTERRUPT_MASK,
176               OLD_MODE,
177               STATUS
178            );
179            RTEMS.TASKS.MODE(
180               RTEMS.INTERRUPT_LEVEL( 0 ),
181               RTEMS.INTERRUPT_MASK,
182               OLD_MODE,
183               STATUS
184            );
185         end loop;
186      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
187      TIME_TEST_SUPPORT.PUT_TIME(
188         "TASK_MODE (no reschedule)",
189         TMTEST.END_TIME,
190         TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
191         OVERHEAD,
192         RTEMS_CALLING_OVERHEAD.TASK_MODE
193      );
194
195      TIMER_DRIVER.INITIALIZE;
196         RTEMS.TASKS.MODE(
197            RTEMS.NO_ASR,
198            RTEMS.ASR_MASK,
199            OLD_MODE,
200            STATUS
201         );
202      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
203      TIME_TEST_SUPPORT.PUT_TIME(
204         "TASK_MODE (reschedule)",
205         TMTEST.END_TIME,
206         1,
207         0,
208         RTEMS_CALLING_OVERHEAD.TASK_MODE
209      );
210
211      RTEMS.TASKS.MODE(
212         RTEMS.NO_PREEMPT,
213         RTEMS.PREEMPT_MASK,
214         OLD_MODE,
215         STATUS
216      );
217      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
218
219      RTEMS.TASKS.SET_PRIORITY(
220         TMTEST.TASK_ID,
221         1,
222         OLD_PRIORITY,
223         STATUS
224      );
225      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
226
227      TIMER_DRIVER.INITIALIZE;
228      RTEMS.TASKS.MODE(          -- preempted by TEST_TASK1
229         RTEMS.PREEMPT,
230         RTEMS.PREEMPT_MASK,
231         OLD_MODE,
232         STATUS
233      );
234
235      TIME := (1988, 1, 1, 0, 0, 0, 0 );
236
237      TIMER_DRIVER.INITIALIZE;
238         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
239         loop
240            RTEMS.CLOCK.SET(
241               TIME,
242               STATUS
243            );
244         end loop;
245      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
246      TIME_TEST_SUPPORT.PUT_TIME(
247         "CLOCK_SET",
248         TMTEST.END_TIME,
249         TIME_TEST_SUPPORT.OPERATION_COUNT,
250         OVERHEAD,
251         RTEMS_CALLING_OVERHEAD.CLOCK_SET
252      );
253
254      TIMER_DRIVER.INITIALIZE;
255         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
256         loop
257            RTEMS.CLOCK.GET_TOD( TIME, STATUS );
258         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
259         end loop;
260      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
261      TIME_TEST_SUPPORT.PUT_TIME(
262         "CLOCK_GET_TOD",
263         TMTEST.END_TIME,
264         TIME_TEST_SUPPORT.OPERATION_COUNT,
265         OVERHEAD,
266         RTEMS_CALLING_OVERHEAD.CLOCK_GET
267      );
268
269      TEXT_IO.PUT_LINE( "*** END OF TIME TEST 8 ***" );
270      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
271
272   end TEST_TASK;
273
274--
275--  TEST_TASK1
276--
277
278   procedure TEST_TASK1 (
279      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
280   ) is
281      pragma Unreferenced(ARGUMENT);
282      STATUS       : RTEMS.STATUS_CODES;
283   begin
284
285      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
286      TIME_TEST_SUPPORT.PUT_TIME(
287         "TASK_MODE (preemptive) ",
288         TMTEST.END_TIME,
289         1,
290         0,
291         RTEMS_CALLING_OVERHEAD.TASK_MODE
292      );
293
294      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
295      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "DOES NOT RETURN" );
296
297   end TEST_TASK1;
298
299end TMTEST;
Note: See TracBrowser for help on using the repository browser.