source: rtems/c/src/ada-tests/mptests/mp10/mptest.adb @ d43dd82

4.104.114.95
Last change on this file since d43dd82 was 23848bbd, checked in by Joel Sherrill <joel.sherrill@…>, on 10/01/07 at 22:58:09

2007-10-01 Joel Sherrill <joel.sherrill@…>

  • mptests/mp01/mptest.adb, mptests/mp01/mptest.ads, mptests/mp01/node1/Makefile.am, mptests/mp02/mptest.adb, mptests/mp02/mptest.ads, mptests/mp03/mptest.adb, mptests/mp03/mptest.ads, mptests/mp04/mptest.adb, mptests/mp04/mptest.ads, mptests/mp05/mptest.adb, mptests/mp05/mptest.ads, mptests/mp06/mptest.adb, mptests/mp06/mptest.ads, mptests/mp07/mptest.adb, mptests/mp07/mptest.ads, mptests/mp08/mptest.adb, mptests/mp08/mptest.ads, mptests/mp09/mptest.adb, mptests/mp09/mptest.ads, mptests/mp10/mptest.adb, mptests/mp10/mptest.ads, mptests/mp11/mptest.adb, mptests/mp11/mptest.ads, mptests/mp12/mptest.adb, mptests/mp12/mptest.ads, mptests/mp13/mptest.adb, mptests/mp13/mptest.ads, mptests/mp14/mptest.adb, mptests/mp14/mptest.ads, support/init.c, support/test_support.adb, support/test_support.ads: Most of single processor Ada tests now build. Some run.
  • Property mode set to 100644
File size: 7.5 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 10 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--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.com/license/LICENSE.
19--
20--  $Id$
21--
22
23with INTERFACES; use INTERFACES;
24with RTEMS;
25with TEST_SUPPORT;
26with TEXT_IO;
27with UNSIGNED32_IO;
28
29package body MPTEST is
30
31--PAGE
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASK_ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT( "*** TEST 10 -- NODE " );
44      UNSIGNED32_IO.PUT(
45         TEST_SUPPORT.NODE,
46         WIDTH => 1
47      );
48      TEXT_IO.PUT_LINE( " ***" );
49
50
51      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
52      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
53      MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'S', 'A', '3', ' ' );
54
55      MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'S', 'G', ' ' );
56
57      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
58
59      if TEST_SUPPORT.NODE = 1 then
60
61         TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
62         RTEMS.MESSAGE_QUEUE_CREATE(
63            MPTEST.QUEUE_NAME( 1 ),
64            3,
65            RTEMS.GLOBAL + RTEMS.LIMIT,
66            MPTEST.QUEUE_ID( 1 ),
67            STATUS
68         );
69         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
70
71         TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
72         RTEMS.SEMAPHORE_CREATE(
73            MPTEST.SEMAPHORE_NAME( 1 ),
74            0,
75            RTEMS.GLOBAL + RTEMS.PRIORITY,
76            MPTEST.SEMAPHORE_ID( 1 ),
77            STATUS
78         );
79         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
80
81         RTEMS.TASK_WAKE_AFTER( 10 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
82         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
83
84      else
85
86         TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
87         RTEMS.TASK_CREATE(
88            MPTEST.TASK_NAME( 1 ),
89            1,
90            2048,
91            RTEMS.TIMESLICE,
92            RTEMS.DEFAULT_ATTRIBUTES,
93            MPTEST.TASK_ID( 1 ),
94            STATUS
95         );
96         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
97
98         TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
99         RTEMS.TASK_START(
100            MPTEST.TASK_ID( 1 ),
101            MPTEST.TEST_TASK_1'ACCESS,
102            0,
103            STATUS
104         );
105         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
106
107         TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
108         RTEMS.TASK_CREATE(
109            MPTEST.TASK_NAME( 2 ),
110            1,
111            2048,
112            RTEMS.TIMESLICE,
113            RTEMS.DEFAULT_ATTRIBUTES,
114            MPTEST.TASK_ID( 2 ),
115            STATUS
116         );   
117         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
118 
119         TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
120         RTEMS.TASK_START(
121            MPTEST.TASK_ID( 2 ),
122            MPTEST.TEST_TASK_2'ACCESS,
123            0,
124            STATUS
125         );   
126         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
127
128         TEXT_IO.PUT_LINE( "Creating Test_task 3 (local)" );
129         RTEMS.TASK_CREATE(
130            MPTEST.TASK_NAME( 3 ),
131            1,
132            2048,
133            RTEMS.TIMESLICE,
134            RTEMS.DEFAULT_ATTRIBUTES,
135            MPTEST.TASK_ID( 3 ),
136            STATUS
137         );   
138         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
139 
140         TEXT_IO.PUT_LINE( "Starting Test_task 3 (local)" );
141         RTEMS.TASK_START(
142            MPTEST.TASK_ID( 3 ),
143            MPTEST.TEST_TASK_3'ACCESS,
144            0,
145            STATUS
146         );   
147         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
148
149         TEXT_IO.PUT_LINE( "Sleeping for 1 second ..." );
150         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
151         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
152
153         TEXT_IO.PUT_LINE( "Deleting Test_task 2" );
154         RTEMS.TASK_DELETE( MPTEST.TASK_ID( 2 ), STATUS );
155         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 2" );
156
157         TEXT_IO.PUT_LINE( "Deleting Test_task 1" );
158         RTEMS.TASK_DELETE( MPTEST.TASK_ID( 1 ), STATUS );
159         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 1" );
160
161         TEXT_IO.PUT_LINE( "Restarting Test_task 3" );
162         RTEMS.TASK_RESTART( MPTEST.TASK_ID( 3 ), 1, STATUS );
163         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF 3" );
164
165      end if;
166
167      TEXT_IO.PUT_LINE( "*** END OF TEST 10 ***" );
168
169      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
170
171   end INIT;
172
173--PAGE
174--
175--  TEST_TASK_1
176--
177
178   procedure TEST_TASK_1 (
179      ARGUMENT : in     RTEMS.TASK_ARGUMENT
180   ) is
181      COUNT               : RTEMS.UNSIGNED32;
182      RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
183      RECEIVE_BUFFER      : RTEMS.BUFFER_POINTER;
184      STATUS              : RTEMS.STATUS_CODES;
185   begin
186
187      RECEIVE_BUFFER :=
188         RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
189
190      TEXT_IO.PUT_LINE( "Getting QID of message queue" );
191
192      loop
193
194         RTEMS.MESSAGE_QUEUE_IDENT(
195            MPTEST.QUEUE_NAME( 1 ),
196            RTEMS.SEARCH_ALL_NODES,
197            MPTEST.QUEUE_ID( 1 ),
198            STATUS
199         );
200
201         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
202
203      end loop;
204
205      TEXT_IO.PUT_LINE( "Attempting to receive message ..." );
206      RTEMS.MESSAGE_QUEUE_RECEIVE(
207         MPTEST.QUEUE_ID( 1 ),
208         RECEIVE_BUFFER,
209         RTEMS.DEFAULT_OPTIONS,
210         RTEMS.NO_TIMEOUT,
211         STATUS
212      );
213      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
214
215   end TEST_TASK_1;
216
217--PAGE
218--
219--  TEST_TASK_2
220--
221 
222   procedure TEST_TASK_2 (
223      ARGUMENT : in     RTEMS.TASK_ARGUMENT
224   ) is
225      STATUS : RTEMS.STATUS_CODES;
226   begin
227 
228      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
229
230      loop
231
232         RTEMS.SEMAPHORE_IDENT(
233            MPTEST.SEMAPHORE_NAME( 1 ),
234            RTEMS.SEARCH_ALL_NODES,
235            MPTEST.SEMAPHORE_ID( 1 ),
236            STATUS
237         );
238 
239         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
240
241      end loop;
242
243      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
244      RTEMS.SEMAPHORE_OBTAIN(
245         MPTEST.SEMAPHORE_ID( 1 ),
246         RTEMS.DEFAULT_OPTIONS,
247         RTEMS.NO_TIMEOUT,
248         STATUS
249      );
250      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
251 
252   end TEST_TASK_2;
253
254--PAGE
255--
256--  TEST_TASK_3
257--
258 
259   procedure TEST_TASK_3 (
260      RESTART : in     RTEMS.TASK_ARGUMENT
261   ) is
262      STATUS : RTEMS.STATUS_CODES;
263   begin
264
265      if RESTART = 1 then
266
267         RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
268         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
269
270      end if;
271
272      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
273
274      loop
275
276         RTEMS.SEMAPHORE_IDENT(
277            MPTEST.SEMAPHORE_NAME( 1 ),
278            RTEMS.SEARCH_ALL_NODES,
279            MPTEST.SEMAPHORE_ID( 1 ),
280            STATUS   
281         );
282
283         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
284
285      end loop;
286
287      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
288      RTEMS.SEMAPHORE_OBTAIN(
289         MPTEST.SEMAPHORE_ID( 1 ),
290         RTEMS.DEFAULT_OPTIONS,
291         RTEMS.NO_TIMEOUT,
292         STATUS 
293      ); 
294      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
295 
296   end TEST_TASK_3;
297 
298end MPTEST;
Note: See TracBrowser for help on using the repository browser.