source: rtems/c/src/ada-tests/mptests/mp03/mptest.adb @ 23848bbd

4.104.114.95
Last change on this file since 23848bbd was 23848bbd, checked in by Joel Sherrill <joel.sherrill@…>, on Oct 1, 2007 at 10:58:09 PM

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: 6.6 KB
Line 
1--
2--  This package is the implementation for Test 3 of the RTEMS
3--  Multiprocessor Test Suite.
4--
5--  DEPENDENCIES:
6--
7-- 
8--
9--  COPYRIGHT (c) 1989-1997.
10--  On-Line Applications Research Corporation (OAR).
11--
12--  The license and distribution terms for this file may in
13--  the file LICENSE in this distribution or at
14--  http://www.rtems.com/license/LICENSE.
15--
16--  $Id$
17--
18
19with INTERFACES; use INTERFACES;
20with RTEMS;
21with TEST_SUPPORT;
22with TEXT_IO;
23with UNSIGNED32_IO;
24
25package body MPTEST is
26
27--PAGE
28--
29--  INIT
30--
31
32   procedure INIT (
33      ARGUMENT : in     RTEMS.TASK_ARGUMENT
34   ) is
35      STATUS : RTEMS.STATUS_CODES;
36   begin
37
38      TEXT_IO.NEW_LINE( 2 );
39      TEXT_IO.PUT( "*** TEST 3 -- NODE " );
40      UNSIGNED32_IO.PUT(
41         TEST_SUPPORT.NODE,
42         WIDTH => 1
43      );
44      TEXT_IO.PUT_LINE( " ***" );
45     
46      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
47      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
48
49      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
50      RTEMS.TASK_CREATE( 
51         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ), 
52         1, 
53         2048, 
54         RTEMS.NO_PREEMPT,
55         RTEMS.GLOBAL,
56         MPTEST.TASK_ID( 1 ),
57         STATUS
58      );
59      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
60
61      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
62      RTEMS.TASK_START(
63         MPTEST.TASK_ID( 1 ),
64         MPTEST.TEST_TASK'ACCESS,
65         0,
66         STATUS
67      );
68      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
69
70      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
71
72      RTEMS.TIMER_CREATE( 
73         MPTEST.TIMER_NAME( 1 ), 
74         MPTEST.TIMER_ID( 1 ),
75         STATUS
76      );
77      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
78
79      TEXT_IO.PUT_LINE( "Deleting initialization task" );
80      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
82
83   end INIT;
84
85--PAGE
86--
87--  DELAYED_SEND_EVENT
88--
89
90   procedure DELAYED_SEND_EVENT (
91      IGNORED_ID      : in     RTEMS.ID;
92      IGNORED_ADDRESS : in     RTEMS.ADDRESS
93   ) is
94      STATUS  : RTEMS.STATUS_CODES;
95   begin
96
97      RTEMS.EVENT_SEND( MPTEST.TASK_ID( 1 ), RTEMS.EVENT_16, STATUS );
98      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
99
100   end DELAYED_SEND_EVENT;
101
102--PAGE
103--
104--  TEST_TASK
105--
106
107   procedure TEST_TASK (
108      ARGUMENT : in     RTEMS.TASK_ARGUMENT
109   ) is
110      TID         : RTEMS.ID;
111      STATUS      : RTEMS.STATUS_CODES;
112   begin
113
114      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
115      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
116   
117      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
118      if TEST_SUPPORT.NODE = 1 then
119         MPTEST.REMOTE_NODE := 2;
120      else
121         MPTEST.REMOTE_NODE := 1;
122      end if;
123
124      TEXT_IO.PUT( "Remote task's name is : " );
125      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
126
127      loop
128
129         RTEMS.TASK_IDENT( 
130            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
131            RTEMS.SEARCH_ALL_NODES,
132            MPTEST.REMOTE_TID,
133            STATUS
134         );
135
136         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
137
138      end loop;
139
140      RTEMS.TIMER_FIRE_AFTER( 
141         MPTEST.TIMER_ID( 1 ), 
142         10 * TEST_SUPPORT.TICKS_PER_SECOND, 
143         MPTEST.DELAYED_SEND_EVENT'ACCESS,
144         RTEMS.NULL_ADDRESS,
145         STATUS
146      );
147      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
148
149      MPTEST.TEST_TASK_SUPPORT( 1 );
150
151      RTEMS.TIMER_FIRE_AFTER( 
152         MPTEST.TIMER_ID( 1 ), 
153         11 * TEST_SUPPORT.TICKS_PER_SECOND, 
154         MPTEST.DELAYED_SEND_EVENT'ACCESS,
155         RTEMS.NULL_ADDRESS,
156         STATUS
157      );
158      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
159
160      if TEST_SUPPORT.NODE = 2 then
161         
162         RTEMS.TASK_WAKE_AFTER( 
163            2 * TEST_SUPPORT.TICKS_PER_SECOND,
164            STATUS
165         );
166        TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
167
168      end if;
169
170      MPTEST.TEST_TASK_SUPPORT( 2 );
171
172      TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
173
174      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
175
176   end TEST_TASK;
177
178--PAGE
179--
180--  TEST_TASK_SUPPORT
181--
182
183
184   procedure TEST_TASK_SUPPORT (
185      NODE : in    RTEMS.UNSIGNED32
186   ) is
187      EVENTS : RTEMS.EVENT_SET;
188      STATUS : RTEMS.STATUS_CODES;
189   begin
190
191      if TEST_SUPPORT.NODE = NODE then
192
193         loop
194
195            RTEMS.EVENT_RECEIVE( 
196               RTEMS.EVENT_16,
197               RTEMS.NO_WAIT,
198               RTEMS.NO_TIMEOUT,
199               EVENTS,
200               STATUS
201            );
202
203            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
204
205            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
206               STATUS,
207               RTEMS.UNSATISFIED,
208               "EVENT_RECEIVE"
209            );
210
211            RTEMS.TASK_WAKE_AFTER( 
212               2 * TEST_SUPPORT.TICKS_PER_SECOND, 
213               STATUS
214            );
215            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
216
217            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
218            TEXT_IO.PUT_LINE( " - Suspending remote task" );
219            RTEMS.TASK_SUSPEND( MPTEST.REMOTE_TID, STATUS );
220            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
221
222            RTEMS.TASK_WAKE_AFTER( 
223               2 * TEST_SUPPORT.TICKS_PER_SECOND, 
224               STATUS
225            );
226            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
227
228            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
229            TEXT_IO.PUT_LINE( " - Resuming remote task" );
230
231            RTEMS.TASK_RESUME( MPTEST.REMOTE_TID, STATUS );
232            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
233
234         end loop;
235
236      else
237
238         loop
239
240            RTEMS.EVENT_RECEIVE( 
241               RTEMS.EVENT_16,
242               RTEMS.NO_WAIT,
243               RTEMS.NO_TIMEOUT,
244               EVENTS,
245               STATUS
246            );
247
248            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
249
250            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
251               STATUS,
252               RTEMS.UNSATISFIED,
253               "EVENT_RECEIVE"
254            );
255
256            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( REMOTE_NODE ), FALSE );
257            TEXT_IO.PUT_LINE( " - have I been suspended???" ); 
258            RTEMS.TASK_WAKE_AFTER( 
259               TEST_SUPPORT.TICKS_PER_SECOND / 2,
260               STATUS
261            );
262            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
263
264         end loop;
265
266      end if;
267
268   end TEST_TASK_SUPPORT;
269
270end MPTEST;
Note: See TracBrowser for help on using the repository browser.