source: rtems/c/src/ada-tests/tmtests/tm19/tmtest.adb @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 6.3 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 19 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 RTEMS_CALLING_OVERHEAD;
22with TEST_SUPPORT;
23with TEXT_IO;
24with TIME_TEST_SUPPORT;
25with TIMER_DRIVER;
26with RTEMS.SIGNAL;
27
28package body TMTEST is
29
30--
31--  INIT
32--
33
34   procedure INIT (
35      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
36   ) is
37      pragma Unreferenced(ARGUMENT);
38      STATUS : RTEMS.STATUS_CODES;
39   begin
40
41      TEXT_IO.NEW_LINE( 2 );
42      TEXT_IO.PUT_LINE( "*** TIME TEST 19 ***" );
43
44      RTEMS.TASKS.CREATE(
45         RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
46         128,
47         1024,
48         RTEMS.DEFAULT_MODES,
49         RTEMS.DEFAULT_ATTRIBUTES,
50         TMTEST.TASK_ID( 1 ),
51         STATUS
52      );
53      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" );
54
55      RTEMS.TASKS.START(
56         TMTEST.TASK_ID( 1 ),
57         TMTEST.TASK_1'ACCESS,
58         0,
59         STATUS
60      );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" );
62
63      RTEMS.TASKS.CREATE(
64         RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
65         127,
66         1024,
67         RTEMS.DEFAULT_MODES,
68         RTEMS.DEFAULT_ATTRIBUTES,
69         TMTEST.TASK_ID( 2 ),
70         STATUS
71      );
72      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" );
73
74      RTEMS.TASKS.START(
75         TMTEST.TASK_ID( 2 ),
76         TMTEST.TASK_2'ACCESS,
77         0,
78         STATUS
79      );
80      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" );
81
82      RTEMS.TASKS.CREATE(
83         RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
84         126,
85         1024,
86         RTEMS.DEFAULT_MODES,
87         RTEMS.DEFAULT_ATTRIBUTES,
88         TMTEST.TASK_ID( 3 ),
89         STATUS
90      );
91      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK3" );
92
93      RTEMS.TASKS.START(
94         TMTEST.TASK_ID( 3 ),
95         TMTEST.TASK_3'ACCESS,
96         0,
97         STATUS
98      );
99      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK3" );
100
101      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
102      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
103
104   end INIT;
105
106--
107--  PROCESS_ASR_FOR_PASS_1
108--
109
110   procedure PROCESS_ASR_FOR_PASS_1 (
111      SIGNALS : in     RTEMS.SIGNAL_SET
112   ) is
113      pragma Unreferenced(SIGNALS);
114   begin
115
116      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
117
118      TIME_TEST_SUPPORT.PUT_TIME(
119         "SIGNAL_SEND (self)",
120         TMTEST.END_TIME,
121         1,
122         0,
123         RTEMS_CALLING_OVERHEAD.SIGNAL_SEND
124      );
125
126      TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" );
127
128      TIMER_DRIVER.INITIALIZE;
129
130   end PROCESS_ASR_FOR_PASS_1;
131
132--
133--  PROCESS_ASR_FOR_PASS_2
134--
135
136   procedure PROCESS_ASR_FOR_PASS_2 (
137      SIGNALS : in     RTEMS.SIGNAL_SET
138   ) is
139      pragma Unreferenced(SIGNALS);
140      STATUS  : RTEMS.STATUS_CODES;
141   begin
142
143      TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" );
144     
145      RTEMS.TASKS.RESUME( TMTEST.TASK_ID( 3 ), STATUS );
146      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
147
148      TIMER_DRIVER.INITIALIZE;
149
150   end PROCESS_ASR_FOR_PASS_2;
151
152--
153--  TASK_1
154--
155
156   procedure TASK_1 (
157      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
158   ) is
159      pragma Unreferenced(ARGUMENT);
160      STATUS  : RTEMS.STATUS_CODES;
161   begin
162
163      TIMER_DRIVER.INITIALIZE;
164         RTEMS.SIGNAL.CATCH(
165            TMTEST.PROCESS_ASR_FOR_PASS_1'ACCESS,
166            RTEMS.DEFAULT_MODES,
167            STATUS
168         );
169      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
170      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
171
172      TIME_TEST_SUPPORT.PUT_TIME(
173         "SIGNAL_CATCH",
174         TMTEST.END_TIME,
175         1,
176         0,
177         RTEMS_CALLING_OVERHEAD.SIGNAL_CATCH
178      );
179
180      TIMER_DRIVER.INITIALIZE;
181         RTEMS.SIGNAL.SEND( TMTEST.TASK_ID( 2 ), RTEMS.SIGNAL_1, STATUS );
182      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
183      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
184
185      TIME_TEST_SUPPORT.PUT_TIME(
186         "SIGNAL_SEND (non-preemptive)",
187         TMTEST.END_TIME,
188         1,
189         0,
190         RTEMS_CALLING_OVERHEAD.SIGNAL_SEND
191      );
192
193      TIMER_DRIVER.INITIALIZE;
194         RTEMS.SIGNAL.SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
195         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
196
197      -- end time is done in ASR
198
199      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
200
201      TIME_TEST_SUPPORT.PUT_TIME(
202         "SIGNAL_RETURN (non-preemptive)",
203         TMTEST.END_TIME,
204         1,
205         0,
206         0
207      );
208
209      RTEMS.SIGNAL.CATCH(
210         TMTEST.PROCESS_ASR_FOR_PASS_2'ACCESS,
211         RTEMS.NO_PREEMPT,
212         STATUS
213      );
214      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
215
216      TIMER_DRIVER.INITIALIZE;
217         RTEMS.SIGNAL.SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
218         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
219
220   end TASK_1;
221
222--
223--  PROCESS_ASR_FOR_TASK_2
224--
225
226   procedure PROCESS_ASR_FOR_TASK_2 (
227      SIGNALS : in     RTEMS.SIGNAL_SET
228   ) is
229   begin
230
231      NULL;
232
233   end PROCESS_ASR_FOR_TASK_2;
234
235--
236--  TASK_2
237--
238
239   procedure TASK_2 (
240      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
241   ) is
242      pragma Unreferenced(ARGUMENT);
243      STATUS  : RTEMS.STATUS_CODES;
244   begin
245
246      RTEMS.SIGNAL.CATCH(
247         TMTEST.PROCESS_ASR_FOR_TASK_2'ACCESS,
248         RTEMS.DEFAULT_MODES,
249         STATUS
250      );
251      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
252
253      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
254      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
255
256   end TASK_2;
257
258--
259--  TASK_3
260--
261
262   procedure TASK_3 (
263      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
264   ) is
265      pragma Unreferenced(ARGUMENT);
266      STATUS : RTEMS.STATUS_CODES;
267   begin
268
269      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
270      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
271
272      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
273
274      TIME_TEST_SUPPORT.PUT_TIME(
275         "SIGNAL_RETURN (preemptive)",
276         TMTEST.END_TIME,
277         1,
278         0,
279         0
280     );
281
282      TEXT_IO.PUT_LINE( "*** END OF TIME TEST 19 ***" );
283     RTEMS.SHUTDOWN_EXECUTIVE( 0 );
284
285   end TASK_3;
286
287end TMTEST;
Note: See TracBrowser for help on using the repository browser.