source: rtems/c/src/ada-tests/sptests/sp14/sptest.adb @ f3f06f79

4.104.114.84.95
Last change on this file since f3f06f79 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.6 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 14 of the RTEMS
7--  Single Processor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
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.
20--
21--  $Id$
22--
23
24with ADDRESS_IO;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29with INTERFACES; use INTERFACES;
30
31package body SPTEST is
32
33--PAGE
34--
35--  INIT
36--
37
38   procedure INIT (
39      ARGUMENT : in     RTEMS.TASK_ARGUMENT
40   ) is
41      TIME   : RTEMS.TIME_OF_DAY;
42      STATUS : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT_LINE( "*** TEST 14 ***" );
47
48      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
49      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
50
51      RTEMS.TASK_CREATE(
52         SPTEST.TASK_NAME( 1 ),
53         1,
54         2048,
55         RTEMS.DEFAULT_MODES,
56         RTEMS.DEFAULT_ATTRIBUTES,
57         SPTEST.TASK_ID( 1 ),
58         STATUS
59      );
60      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
61
62      RTEMS.TASK_CREATE(
63         SPTEST.TASK_NAME( 2 ),
64         1,
65         2048,
66         RTEMS.DEFAULT_MODES,
67         RTEMS.DEFAULT_ATTRIBUTES,
68         SPTEST.TASK_ID( 2 ),
69         STATUS
70      );
71      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
72
73      RTEMS.TASK_START(
74         SPTEST.TASK_ID( 1 ),
75         SPTEST.TASK_1'ACCESS,
76         0,
77         STATUS
78      );
79      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
80
81      RTEMS.TASK_START(
82         SPTEST.TASK_ID( 2 ),
83         SPTEST.TASK_2'ACCESS,
84         0,
85         STATUS
86      );
87      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
88
89      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
90
91      RTEMS.TIMER_CREATE(
92         SPTEST.TIMER_NAME( 1 ),
93         SPTEST.TIMER_ID( 1 ),
94         STATUS
95      );
96      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
97
98      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
99      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
100
101   end INIT;
102
103--PAGE
104--
105--  SIGNAL_3_TO_TASK_1
106--
107
108   procedure SIGNAL_3_TO_TASK_1 (
109      ID      : in     RTEMS.ID;
110      POINTER : in     RTEMS.ADDRESS
111   ) is
112      STATUS : RTEMS.STATUS_CODES;
113   begin
114
115      RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_3, STATUS );
116      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND of 3" );
117
118      SPTEST.TIMER_GOT_THIS_ID      := ID;
119      SPTEST.TIMER_GOT_THIS_POINTER := POINTER;
120
121      SPTEST.SIGNAL_SENT := TRUE;
122
123   end SIGNAL_3_TO_TASK_1;
124
125--PAGE
126--
127--  TASK_1
128--
129
130   procedure TASK_1 (
131      ARGUMENT : in     RTEMS.TASK_ARGUMENT
132   ) is
133      PREVIOUS_MODE : RTEMS.MODE;
134      STATUS        : RTEMS.STATUS_CODES;
135   begin
136
137      TEXT_IO.PUT_LINE( "TA1 - signal_catch - INTERRUPT_LEVEL( 3 )" );
138      RTEMS.SIGNAL_CATCH(
139         SPTEST.PROCESS_ASR'ACCESS,
140         RTEMS.INTERRUPT_LEVEL( 3 ),
141         STATUS
142      );
143      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH INTERRUPT(3)" );
144   
145      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_16 to self" );
146      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
147      TEST_SUPPORT.DIRECTIVE_FAILED(
148         STATUS,
149         "SIGNAL_SEND - SIGNAL_16 to SELF"
150      );
151
152      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_0 to self" );
153      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_0, STATUS );
154      TEST_SUPPORT.DIRECTIVE_FAILED(
155         STATUS,
156         "SIGNAL_SEND - SIGNAL_0 to SELF"
157      );
158
159      TEXT_IO.PUT_LINE( "TA1 - signal_catch - NO_ASR" );
160      RTEMS.SIGNAL_CATCH(SPTEST.PROCESS_ASR'ACCESS, RTEMS.NO_ASR, STATUS);
161      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH - NO_ASR" );
162
163      TEST_SUPPORT.PAUSE;
164
165      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_1 to self" );
166      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
167      TEST_SUPPORT.DIRECTIVE_FAILED(
168         STATUS,
169         "SIGNAL_SEND - SIGNAL_1 to SELF"
170      );
171
172      TEXT_IO.PUT_LINE( "TA1 - task_mode - disable ASRs" );
173      RTEMS.TASK_MODE(
174         RTEMS.NO_ASR,
175         RTEMS.ASR_MASK,
176         PREVIOUS_MODE,
177         STATUS
178      );
179      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
180
181      SPTEST.TIMER_GOT_THIS_ID := 0;
182      SPTEST.TIMER_GOT_THIS_POINTER := RTEMS.NULL_ADDRESS;
183
184      TEXT_IO.PUT_LINE( "TA1 - sending signal to SELF from timer" );
185      RTEMS.TIMER_FIRE_AFTER(
186         SPTEST.TIMER_ID( 1 ),
187         TEST_SUPPORT.TICKS_PER_SECOND / 2,
188         SPTEST.SIGNAL_3_TO_TASK_1'ACCESS,
189         SPTEST.TASK_1'ADDRESS,
190         STATUS
191      );
192      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
193
194      TEXT_IO.PUT_LINE( "TA1 - waiting for signal to arrive" );
195
196      SPTEST.SIGNAL_SENT := FALSE;
197      SPTEST.ASR_FIRED   := FALSE;
198
199      loop
200         exit when SPTEST.SIGNAL_SENT = TRUE;
201      end loop;
202
203      if SPTEST.TIMER_GOT_THIS_ID = SPTEST.TIMER_ID( 1 ) and then
204         SPTEST.TIMER_GOT_THIS_POINTER = SPTEST.TASK_1'ADDRESS then
205 
206         TEXT_IO.PUT_LINE( "TA1 - timer routine got the correct arguments" );
207
208      else
209
210         TEXT_IO.PUT( "TA1 - timer got (" );
211         UNSIGNED32_IO.PUT( SPTEST.TIMER_GOT_THIS_ID  );
212         TEXT_IO.PUT( "," );
213         ADDRESS_IO.PUT( SPTEST.TIMER_GOT_THIS_POINTER  );
214         TEXT_IO.PUT( ") instead of (" );
215         UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ) );
216         TEXT_IO.PUT( "," );
217         ADDRESS_IO.PUT( SPTEST.TASK_1'ADDRESS  );
218         TEXT_IO.PUT_LINE( ")!!!!" );
219
220      end if;
221
222      TEXT_IO.PUT_LINE( "TA1 - task_mode - enable ASRs" );
223      RTEMS.TASK_MODE(
224         RTEMS.ASR,
225         RTEMS.ASR_MASK,
226         PREVIOUS_MODE,
227         STATUS
228      );
229      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
230
231      TEXT_IO.PUT_LINE( "TA1 - signal_catch - ASR ADDRESS of NULL" );
232      RTEMS.SIGNAL_CATCH( NULL, RTEMS.DEFAULT_MODES, STATUS );
233      TEST_SUPPORT.DIRECTIVE_FAILED(
234         STATUS,
235         "SIGNAL_CATCH - NULL ADDRESS"
236      );
237   
238      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
239      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
240      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
241
242   end TASK_1;
243
244--PAGE
245--
246--  TASK_2
247--
248
249   procedure TASK_2 (
250      ARGUMENT : in     RTEMS.TASK_ARGUMENT
251   ) is
252      STATUS : RTEMS.STATUS_CODES;
253   begin
254
255      TEXT_IO.PUT_LINE( "TA2 - signal_send - SIGNAL_17 to TA1" );
256      RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_17, STATUS );
257      TEST_SUPPORT.DIRECTIVE_FAILED(
258         STATUS,
259         "SIGNAL_SEND - SIGNAL_17 to TA1"
260      );
261
262      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
263      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
264      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
265
266      TEXT_IO.PUT_LINE(
267         "TA2 - signal_send - SIGNAL_18 and SIGNAL_19 to TA1"
268      );
269      RTEMS.SIGNAL_SEND(
270         SPTEST.TASK_ID( 1 ),
271         RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19,
272         STATUS
273      );
274      TEST_SUPPORT.DIRECTIVE_FAILED(
275         STATUS,
276         "SIGNAL_SEND - SIGNAL_18 and SIGNAL_19 to TA1"
277      );
278
279      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
280      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
281      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
282
283      TEXT_IO.PUT_LINE( "*** END OF TEST 14 ***" );
284      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
285
286   end TASK_2;
287
288--PAGE
289--
290--  PROCESS_ASR
291--
292
293   procedure PROCESS_ASR (
294      THE_SIGNAL_SET : in     RTEMS.SIGNAL_SET
295   ) is
296      STATUS : RTEMS.STATUS_CODES;
297   begin
298
299      TEXT_IO.PUT( "ASR - ENTRY - signal => " );
300      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
301      TEXT_IO.NEW_LINE;
302
303      if THE_SIGNAL_SET = RTEMS.SIGNAL_16 or else
304             THE_SIGNAL_SET = RTEMS.SIGNAL_17 or else
305             THE_SIGNAL_SET = RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19 then
306         NULL;
307
308      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_0 or else
309              THE_SIGNAL_SET = RTEMS.SIGNAL_1 then
310         TEXT_IO.PUT_LINE( "ASR - task_wake_after - yield processor" );
311         RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
312         TEST_SUPPORT.DIRECTIVE_FAILED(
313            STATUS,
314            "TASK_WAKE_AFTER YIELD"
315         );
316
317      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_3 then
318
319         SPTEST.ASR_FIRED := TRUE;
320
321      end if;
322
323      TEXT_IO.PUT( "ASR - EXIT  - signal => " );
324      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
325      TEXT_IO.NEW_LINE;
326
327   end PROCESS_ASR;
328     
329end SPTEST;
Note: See TracBrowser for help on using the repository browser.