source: rtems/c/src/ada-tests/mptests/mp05/mptest.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: 5.8 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 5 of the RTEMS
7--  Multiprocessor 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 INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32   package body PER_NODE_CONFIGURATION is separate;
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      STATUS : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT( "*** TEST 5 -- NODE " );
47      UNSIGNED32_IO.PUT(
48         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
49         WIDTH => 1
50      );
51      TEXT_IO.PUT_LINE( " ***" );
52
53      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
54      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
55
56      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
57
58      RTEMS.TASK_CREATE(
59         MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
60         1,
61         2048,
62         RTEMS.TIMESLICE,
63         RTEMS.GLOBAL,
64         MPTEST.TASK_ID( 1 ),
65         STATUS
66      );
67      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
68
69      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
70
71      RTEMS.TASK_START(
72         MPTEST.TASK_ID( 1 ),
73         MPTEST.TEST_TASK'ACCESS,
74         0,
75         STATUS
76      );
77      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
78
79      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
80      MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
81
82      RTEMS.TIMER_CREATE(
83         MPTEST.TIMER_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
84         MPTEST.TIMER_ID( 1 ),
85         STATUS
86      );
87      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
88
89      TEXT_IO.PUT_LINE( "Deleting initialization task" );
90
91      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
92      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
93
94   end INIT;
95
96--PAGE
97--
98--  PROCESS_ASR
99--
100
101   procedure PROCESS_ASR (
102      SIGNAL : in     RTEMS.SIGNAL_SET
103   )
104   is
105   begin
106
107      if SIGNAL /= MPTEST.EXPECTED_SIGNAL then
108
109         TEXT_IO.PUT( "ERROR: I was expecting signal 0x" );
110         UNSIGNED32_IO.PUT( EXPECTED_SIGNAL, BASE => 16 );
111         TEXT_IO.PUT( " got 0x" );
112         UNSIGNED32_IO.PUT( SIGNAL, BASE => 16 );
113         TEXT_IO.NEW_LINE;
114
115         RTEMS.FATAL_ERROR_OCCURRED( 16#000F_0000# );
116
117      end if;
118
119      MPTEST.SIGNAL_CAUGHT := TRUE;
120
121   end PROCESS_ASR;
122
123--PAGE
124--
125--  STOP_TEST_TSR
126--
127
128   procedure STOP_TEST_TSR (
129      IGNORED_ID      : in     RTEMS.ID;
130      IGNORED_ADDRESS : in     RTEMS.ADDRESS
131   ) is
132   begin
133
134      MPTEST.STOP_TEST := TRUE;
135
136   end STOP_TEST_TSR;
137
138--PAGE
139--
140--  TEST_TASK
141--
142
143   procedure TEST_TASK (
144      ARGUMENT : in     RTEMS.TASK_ARGUMENT
145   ) is
146      STATUS  : RTEMS.STATUS_CODES;
147   begin
148
149      MPTEST.STOP_TEST := FALSE;
150
151      MPTEST.SIGNAL_CAUGHT := FALSE;
152      MPTEST.SIGNAL_COUNT  := 0;
153
154      TEXT_IO.PUT_LINE( "signal_catch: initializing signal catcher" );
155      RTEMS.SIGNAL_CATCH(
156         MPTEST.PROCESS_ASR'ACCESS,
157         RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
158         STATUS
159      );
160      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
161
162      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
163         MPTEST.REMOTE_NODE     := 2;
164         MPTEST.REMOTE_SIGNAL   := RTEMS.SIGNAL_18;
165         MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_17;
166      else
167         MPTEST.REMOTE_NODE     := 1;
168         MPTEST.REMOTE_SIGNAL   := RTEMS.SIGNAL_17;
169         MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_18;
170      end if;
171
172      TEXT_IO.PUT( "Remote task's name is : " );
173      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
174
175      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
176      loop
177
178         RTEMS.TASK_IDENT(
179            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
180            RTEMS.SEARCH_ALL_NODES,
181            MPTEST.REMOTE_TID,
182            STATUS
183         );
184
185         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
186
187      end loop;
188
189      RTEMS.TIMER_FIRE_AFTER(
190         MPTEST.TIMER_ID( 1 ),
191         3 * TEST_SUPPORT.TICKS_PER_SECOND,
192         MPTEST.STOP_TEST_TSR'ACCESS,
193         RTEMS.NULL_ADDRESS,
194         STATUS
195      );
196      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
197
198      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
199
200         TEXT_IO.PUT_LINE( "Sending signal to remote task" );
201         loop
202            RTEMS.SIGNAL_SEND(
203               MPTEST.REMOTE_TID,
204               MPTEST.REMOTE_SIGNAL,
205               STATUS
206            );
207
208            exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
209
210            exit when not RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.NOT_DEFINED );
211   
212         end loop;
213         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
214
215      end if;
216
217      loop
218 
219         exit when MPTEST.STOP_TEST = TRUE;
220
221         if MPTEST.SIGNAL_CAUGHT = TRUE then
222
223            MPTEST.SIGNAL_CAUGHT := FALSE;
224            MPTEST.SIGNAL_COUNT  := MPTEST.SIGNAL_COUNT + 1;
225
226            if MPTEST.SIGNAL_COUNT >= MPTEST.SIGNALS_PER_DOT then
227
228               MPTEST.SIGNAL_COUNT := 0;
229
230               TEST_SUPPORT.PUT_DOT( "." );
231
232            end if;
233
234            RTEMS.SIGNAL_SEND(
235               MPTEST.REMOTE_TID,
236               MPTEST.REMOTE_SIGNAL,
237               STATUS
238            );
239            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
240
241         end if;
242
243      end loop;
244
245      TEXT_IO.NEW_LINE;
246      TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
247
248      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
249
250   end TEST_TASK;
251
252end MPTEST;
Note: See TracBrowser for help on using the repository browser.