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

4.104.114.84.95
Last change on this file since 1bce637 was 9bec37b, checked in by Joel Sherrill <joel.sherrill@…>, on 06/03/97 at 18:06:46

Switched to proper types for booleans and increased the stack space
for the tasks in this test.

  • Property mode set to 100644
File size: 8.7 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         RTEMS.MINIMUM_STACK_SIZE * 2,
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         RTEMS.MINIMUM_STACK_SIZE * 2,
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         RTEMS.ARE_EQUAL(SPTEST.TIMER_GOT_THIS_POINTER,
205             SPTEST.TASK_1'ADDRESS) then
206 
207         TEXT_IO.PUT_LINE( "TA1 - timer routine got the correct arguments" );
208
209      else
210
211         TEXT_IO.PUT( "TA1 - timer got (" );
212         UNSIGNED32_IO.PUT( SPTEST.TIMER_GOT_THIS_ID  );
213         TEXT_IO.PUT( "," );
214         ADDRESS_IO.PUT( SPTEST.TIMER_GOT_THIS_POINTER  );
215         TEXT_IO.PUT( ") instead of (" );
216         UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ) );
217         TEXT_IO.PUT( "," );
218         ADDRESS_IO.PUT( SPTEST.TASK_1'ADDRESS  );
219         TEXT_IO.PUT_LINE( ")!!!!" );
220
221      end if;
222
223      TEXT_IO.PUT_LINE( "TA1 - task_mode - enable ASRs" );
224      RTEMS.TASK_MODE(
225         RTEMS.ASR,
226         RTEMS.ASR_MASK,
227         PREVIOUS_MODE,
228         STATUS
229      );
230      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
231
232      TEXT_IO.PUT_LINE( "TA1 - signal_catch - ASR ADDRESS of NULL" );
233      RTEMS.SIGNAL_CATCH( NULL, RTEMS.DEFAULT_MODES, STATUS );
234      TEST_SUPPORT.DIRECTIVE_FAILED(
235         STATUS,
236         "SIGNAL_CATCH - NULL ADDRESS"
237      );
238   
239      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
240      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
241      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
242
243   end TASK_1;
244
245--PAGE
246--
247--  TASK_2
248--
249
250   procedure TASK_2 (
251      ARGUMENT : in     RTEMS.TASK_ARGUMENT
252   ) is
253      STATUS : RTEMS.STATUS_CODES;
254   begin
255
256      TEXT_IO.PUT_LINE( "TA2 - signal_send - SIGNAL_17 to TA1" );
257      RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_17, STATUS );
258      TEST_SUPPORT.DIRECTIVE_FAILED(
259         STATUS,
260         "SIGNAL_SEND - SIGNAL_17 to TA1"
261      );
262
263      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
264      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
265      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
266
267      TEXT_IO.PUT_LINE(
268         "TA2 - signal_send - SIGNAL_18 and SIGNAL_19 to TA1"
269      );
270      RTEMS.SIGNAL_SEND(
271         SPTEST.TASK_ID( 1 ),
272         RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19,
273         STATUS
274      );
275      TEST_SUPPORT.DIRECTIVE_FAILED(
276         STATUS,
277         "SIGNAL_SEND - SIGNAL_18 and SIGNAL_19 to TA1"
278      );
279
280      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
281      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
282      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
283
284      TEXT_IO.PUT_LINE( "*** END OF TEST 14 ***" );
285      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
286
287   end TASK_2;
288
289--PAGE
290--
291--  PROCESS_ASR
292--
293
294   procedure PROCESS_ASR (
295      THE_SIGNAL_SET : in     RTEMS.SIGNAL_SET
296   ) is
297      STATUS : RTEMS.STATUS_CODES;
298   begin
299
300      TEXT_IO.PUT( "ASR - ENTRY - signal => " );
301      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
302      TEXT_IO.NEW_LINE;
303
304      if THE_SIGNAL_SET = RTEMS.SIGNAL_16 or else
305             THE_SIGNAL_SET = RTEMS.SIGNAL_17 or else
306             THE_SIGNAL_SET = RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19 then
307         NULL;
308
309      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_0 or else
310              THE_SIGNAL_SET = RTEMS.SIGNAL_1 then
311         TEXT_IO.PUT_LINE( "ASR - task_wake_after - yield processor" );
312         RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
313         TEST_SUPPORT.DIRECTIVE_FAILED(
314            STATUS,
315            "TASK_WAKE_AFTER YIELD"
316         );
317
318      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_3 then
319
320         SPTEST.ASR_FIRED := TRUE;
321
322      end if;
323
324      TEXT_IO.PUT( "ASR - EXIT  - signal => " );
325      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
326      TEXT_IO.NEW_LINE;
327
328   end PROCESS_ASR;
329     
330end SPTEST;
Note: See TracBrowser for help on using the repository browser.