source: rtems/c/src/ada-tests/mptests/mp03/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: 6.8 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 3 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 3 -- 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      RTEMS.TASK_CREATE(
58         MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
59         1,
60         2048,
61         RTEMS.NO_PREEMPT,
62         RTEMS.GLOBAL,
63         MPTEST.TASK_ID( 1 ),
64         STATUS
65      );
66      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
67
68      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
69      RTEMS.TASK_START(
70         MPTEST.TASK_ID( 1 ),
71         MPTEST.TEST_TASK'ACCESS,
72         0,
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
76
77      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
78
79      RTEMS.TIMER_CREATE(
80         MPTEST.TIMER_NAME( 1 ),
81         MPTEST.TIMER_ID( 1 ),
82         STATUS
83      );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
85
86      TEXT_IO.PUT_LINE( "Deleting initialization task" );
87      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
88      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
89
90   end INIT;
91
92--PAGE
93--
94--  DELAYED_SEND_EVENT
95--
96
97   procedure DELAYED_SEND_EVENT (
98      IGNORED_ID      : in     RTEMS.ID;
99      IGNORED_ADDRESS : in     RTEMS.ADDRESS
100   ) is
101      STATUS  : RTEMS.STATUS_CODES;
102   begin
103
104      RTEMS.EVENT_SEND( MPTEST.TASK_ID( 1 ), RTEMS.EVENT_16, STATUS );
105      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
106
107   end DELAYED_SEND_EVENT;
108
109--PAGE
110--
111--  TEST_TASK
112--
113
114   procedure TEST_TASK (
115      ARGUMENT : in     RTEMS.TASK_ARGUMENT
116   ) is
117      TID         : RTEMS.ID;
118      STATUS      : RTEMS.STATUS_CODES;
119   begin
120
121      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
122      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
123   
124      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
125      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
126         MPTEST.REMOTE_NODE := 2;
127      else
128         MPTEST.REMOTE_NODE := 1;
129      end if;
130
131      TEXT_IO.PUT( "Remote task's name is : " );
132      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
133
134      loop
135
136         RTEMS.TASK_IDENT(
137            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
138            RTEMS.SEARCH_ALL_NODES,
139            MPTEST.REMOTE_TID,
140            STATUS
141         );
142
143         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
144
145      end loop;
146
147      RTEMS.TIMER_FIRE_AFTER(
148         MPTEST.TIMER_ID( 1 ),
149         10 * TEST_SUPPORT.TICKS_PER_SECOND,
150         MPTEST.DELAYED_SEND_EVENT'ACCESS,
151         RTEMS.NULL_ADDRESS,
152         STATUS
153      );
154      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
155
156      MPTEST.TEST_TASK_SUPPORT( 1 );
157
158      RTEMS.TIMER_FIRE_AFTER(
159         MPTEST.TIMER_ID( 1 ),
160         11 * TEST_SUPPORT.TICKS_PER_SECOND,
161         MPTEST.DELAYED_SEND_EVENT'ACCESS,
162         RTEMS.NULL_ADDRESS,
163         STATUS
164      );
165      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
166
167      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
168         
169         RTEMS.TASK_WAKE_AFTER(
170            2 * TEST_SUPPORT.TICKS_PER_SECOND,
171            STATUS
172         );
173        TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
174
175      end if;
176
177      MPTEST.TEST_TASK_SUPPORT( 2 );
178
179      TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
180
181      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
182
183   end TEST_TASK;
184
185--PAGE
186--
187--  TEST_TASK_SUPPORT
188--
189
190
191   procedure TEST_TASK_SUPPORT (
192      NODE : in    RTEMS.UNSIGNED32
193   ) is
194      EVENTS : RTEMS.EVENT_SET;
195      STATUS : RTEMS.STATUS_CODES;
196   begin
197
198      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = NODE then
199
200         loop
201
202            RTEMS.EVENT_RECEIVE(
203               RTEMS.EVENT_16,
204               RTEMS.NO_WAIT,
205               RTEMS.NO_TIMEOUT,
206               EVENTS,
207               STATUS
208            );
209
210            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
211
212            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
213               STATUS,
214               RTEMS.UNSATISFIED,
215               "EVENT_RECEIVE"
216            );
217
218            RTEMS.TASK_WAKE_AFTER(
219               2 * TEST_SUPPORT.TICKS_PER_SECOND,
220               STATUS
221            );
222            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
223
224            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
225            TEXT_IO.PUT_LINE( " - Suspending remote task" );
226            RTEMS.TASK_SUSPEND( MPTEST.REMOTE_TID, STATUS );
227            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
228
229            RTEMS.TASK_WAKE_AFTER(
230               2 * TEST_SUPPORT.TICKS_PER_SECOND,
231               STATUS
232            );
233            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
234
235            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
236            TEXT_IO.PUT_LINE( " - Resuming remote task" );
237
238            RTEMS.TASK_RESUME( MPTEST.REMOTE_TID, STATUS );
239            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
240
241         end loop;
242
243      else
244
245         loop
246
247            RTEMS.EVENT_RECEIVE(
248               RTEMS.EVENT_16,
249               RTEMS.NO_WAIT,
250               RTEMS.NO_TIMEOUT,
251               EVENTS,
252               STATUS
253            );
254
255            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
256
257            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
258               STATUS,
259               RTEMS.UNSATISFIED,
260               "EVENT_RECEIVE"
261            );
262
263            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( REMOTE_NODE ), FALSE );
264            TEXT_IO.PUT_LINE( " - have I been suspended???" );
265            RTEMS.TASK_WAKE_AFTER(
266               TEST_SUPPORT.TICKS_PER_SECOND / 2,
267               STATUS
268            );
269            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
270
271         end loop;
272
273      end if;
274
275   end TEST_TASK_SUPPORT;
276
277end MPTEST;
Note: See TracBrowser for help on using the repository browser.