source: rtems/c/src/ada-tests/mptests/mp01/mptest.adb @ a846105

4.104.114.84.95
Last change on this file since a846105 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.0 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 1 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      C      : RTEMS.CHARACTER;
43      TIME   : RTEMS.TIME_OF_DAY;
44      STATUS : RTEMS.STATUS_CODES;
45   begin
46
47      TEXT_IO.NEW_LINE( 2 );
48      TEXT_IO.PUT( "*** TEST 1 -- NODE " );
49      UNSIGNED32_IO.PUT(
50         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
51         WIDTH => 1
52      );
53      TEXT_IO.PUT_LINE( " ***" );
54     
55      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE /= 1 then
56         C := 'S';
57      else
58         C := 'M';
59      end if;
60
61      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  C, 'A', '1', ' ' );
62      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  C, 'A', '2', ' ' );
63      MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  C, 'A', '3', ' ' );
64
65      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
66
67      RTEMS.CLOCK_SET( TIME, STATUS );
68      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
69
70      TEXT_IO.PUT_LINE( "Creating task 1 (Global)" );
71
72      RTEMS.TASK_CREATE(
73         MPTEST.TASK_NAME( 1 ),
74         1,
75         2048,
76         RTEMS.DEFAULT_MODES,
77         RTEMS.GLOBAL,
78         MPTEST.TASK_ID( 1 ),
79         STATUS
80      );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
82
83      TEXT_IO.PUT_LINE( "Creating task 2 (Global)" );
84
85      RTEMS.TASK_CREATE(
86         MPTEST.TASK_NAME( 2 ),
87         1,
88         2048,
89         RTEMS.TIMESLICE,
90         RTEMS.GLOBAL,
91         MPTEST.TASK_ID( 2 ),
92         STATUS
93      );
94      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
95
96      TEXT_IO.PUT_LINE( "Creating task 3 (Local)" );
97
98      RTEMS.TASK_CREATE(
99         MPTEST.TASK_NAME( 3 ),
100         1,
101         2048,
102         RTEMS.DEFAULT_MODES,
103         RTEMS.DEFAULT_ATTRIBUTES,
104         MPTEST.TASK_ID( 3 ),
105         STATUS
106      );
107      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
108
109      RTEMS.TASK_START(
110         MPTEST.TASK_ID( 1 ),
111         MPTEST.TEST_TASK'ACCESS,
112         0,
113         STATUS
114      );
115      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
116
117      RTEMS.TASK_START(
118         MPTEST.TASK_ID( 2 ),
119         MPTEST.TEST_TASK'ACCESS,
120         0,
121         STATUS
122      );
123      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
124
125      RTEMS.TASK_START(
126         MPTEST.TASK_ID( 3 ),
127         MPTEST.TEST_TASK'ACCESS,
128         0,
129         STATUS
130      );
131      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
132
133      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
134      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
135
136   end INIT;
137
138--PAGE
139--
140--  TEST_TASK
141--
142
143   procedure TEST_TASK (
144      ARGUMENT : in     RTEMS.TASK_ARGUMENT
145   ) is
146      TIME   : RTEMS.TIME_OF_DAY;
147      TID    : RTEMS.ID;
148      STATUS : RTEMS.STATUS_CODES;
149   begin
150
151      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
152      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
153   
154      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
155      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
156
157      TEST_SUPPORT.PUT_NAME(
158         MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
159         FALSE
160      );
161
162      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
163      TEXT_IO.NEW_LINE;
164
165      RTEMS.TASK_WAKE_AFTER(
166         TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
167           TEST_SUPPORT.TICKS_PER_SECOND,
168         STATUS
169      );
170      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
171         
172      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
173      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
174
175      TEST_SUPPORT.PUT_NAME(
176         MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
177         FALSE
178      );
179
180      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
181      TEXT_IO.NEW_LINE;
182
183      if TEST_SUPPORT.TASK_NUMBER( TID ) = 1 then         -- TASK 1
184
185         TEST_SUPPORT.PUT_NAME(
186            MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
187            FALSE
188         );
189
190         TEXT_IO.PUT_LINE( " - deleting self" );
191
192         RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
193         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
194
195      else if TEST_SUPPORT.TASK_NUMBER( TID ) = 2 then    -- TASK 2
196
197         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), FALSE );
198         TEXT_IO.PUT( " - waiting to be deleted by " );
199         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), TRUE );
200
201         loop
202            TEST_SUPPORT.DO_NOTHING;   -- can't be optimized away
203         end loop;
204
205      else                                                -- TASK 3
206
207         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
208         TEXT_IO.PUT( " - getting TID of " );
209         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
210         
211         RTEMS.TASK_IDENT(
212            MPTEST.TASK_NAME( 2 ),
213            RTEMS.SEARCH_ALL_NODES,
214            TID,
215            STATUS
216         );
217         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
218
219         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
220         TEXT_IO.PUT( " - deleting " );
221         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
222
223         RTEMS.TASK_DELETE( TID, STATUS );
224         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
225
226      end if;
227      end if;
228
229      TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
230
231      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
232
233   end TEST_TASK;
234
235end MPTEST;
Note: See TracBrowser for help on using the repository browser.