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

4.115
Last change on this file since ae55da72 was 9b4422a2, checked in by Joel Sherrill <joel.sherrill@…>, on May 3, 2012 at 3:09:24 PM

Remove All CVS Id Strings Possible Using a Script

Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines

next to each other after Id string line removed.

+ remove entire comment blocks which only exited to

contain CVS Ids

+ If the processing left a blank line at the top of

a file, it was removed.

  • 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-2011.
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
17with INTERFACES; use INTERFACES;
18with RTEMS;
19with RTEMS.EVENT;
20with RTEMS.TASKS;
21with RTEMS.TIMER;
22with TEST_SUPPORT;
23with TEXT_IO;
24with UNSIGNED32_IO;
25
26package body MPTEST is
27
28--
29--  INIT
30--
31
32   procedure INIT (
33      ARGUMENT : in     RTEMS.TASKS.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.TASKS.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.TASKS.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.TASKS.DELETE( RTEMS.SELF, STATUS );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
82
83   end INIT;
84
85--
86--  DELAYED_SEND_EVENT
87--
88
89   procedure DELAYED_SEND_EVENT (
90      IGNORED_ID      : in     RTEMS.ID;
91      IGNORED_ADDRESS : in     RTEMS.ADDRESS
92   ) is
93      STATUS  : RTEMS.STATUS_CODES;
94   begin
95
96      RTEMS.EVENT.SEND( MPTEST.TASK_ID( 1 ), RTEMS.EVENT_16, STATUS );
97      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
98
99   end DELAYED_SEND_EVENT;
100
101--
102--  TEST_TASK
103--
104
105   procedure TEST_TASK (
106      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
107   ) is
108      TID         : RTEMS.ID;
109      STATUS      : RTEMS.STATUS_CODES;
110   begin
111
112      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
113      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
114   
115      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
116      if TEST_SUPPORT.NODE = 1 then
117         MPTEST.REMOTE_NODE := 2;
118      else
119         MPTEST.REMOTE_NODE := 1;
120      end if;
121
122      TEXT_IO.PUT( "Remote task's name is : " );
123      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
124
125      loop
126
127         RTEMS.TASKS.IDENT( 
128            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
129            RTEMS.SEARCH_ALL_NODES,
130            MPTEST.REMOTE_TID,
131            STATUS
132         );
133
134         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
135
136      end loop;
137
138      RTEMS.TIMER.FIRE_AFTER( 
139         MPTEST.TIMER_ID( 1 ), 
140         10 * TEST_SUPPORT.TICKS_PER_SECOND, 
141         MPTEST.DELAYED_SEND_EVENT'ACCESS,
142         RTEMS.NULL_ADDRESS,
143         STATUS
144      );
145      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
146
147      MPTEST.TEST_TASK_SUPPORT( 1 );
148
149      RTEMS.TIMER.FIRE_AFTER( 
150         MPTEST.TIMER_ID( 1 ), 
151         11 * TEST_SUPPORT.TICKS_PER_SECOND, 
152         MPTEST.DELAYED_SEND_EVENT'ACCESS,
153         RTEMS.NULL_ADDRESS,
154         STATUS
155      );
156      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
157
158      if TEST_SUPPORT.NODE = 2 then
159         
160         RTEMS.TASKS.WAKE_AFTER( 
161            2 * TEST_SUPPORT.TICKS_PER_SECOND,
162            STATUS
163         );
164        TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
165
166      end if;
167
168      MPTEST.TEST_TASK_SUPPORT( 2 );
169
170      TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
171
172      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
173
174   end TEST_TASK;
175
176--
177--  TEST_TASK_SUPPORT
178--
179
180
181   procedure TEST_TASK_SUPPORT (
182      NODE : in    RTEMS.UNSIGNED32
183   ) is
184      EVENTS : RTEMS.EVENT_SET;
185      STATUS : RTEMS.STATUS_CODES;
186   begin
187
188      if TEST_SUPPORT.NODE = NODE then
189
190         loop
191
192            RTEMS.EVENT.RECEIVE( 
193               RTEMS.EVENT_16,
194               RTEMS.NO_WAIT,
195               RTEMS.NO_TIMEOUT,
196               EVENTS,
197               STATUS
198            );
199
200            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
201
202            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
203               STATUS,
204               RTEMS.UNSATISFIED,
205               "EVENT_RECEIVE"
206            );
207
208            RTEMS.TASKS.WAKE_AFTER( 
209               2 * TEST_SUPPORT.TICKS_PER_SECOND, 
210               STATUS
211            );
212            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
213
214            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
215            TEXT_IO.PUT_LINE( " - Suspending remote task" );
216            RTEMS.TASKS.SUSPEND( MPTEST.REMOTE_TID, STATUS );
217            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
218
219            RTEMS.TASKS.WAKE_AFTER( 
220               2 * TEST_SUPPORT.TICKS_PER_SECOND, 
221               STATUS
222            );
223            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
224
225            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
226            TEXT_IO.PUT_LINE( " - Resuming remote task" );
227
228            RTEMS.TASKS.RESUME( MPTEST.REMOTE_TID, STATUS );
229            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
230
231         end loop;
232
233      else
234
235         loop
236
237            RTEMS.EVENT.RECEIVE( 
238               RTEMS.EVENT_16,
239               RTEMS.NO_WAIT,
240               RTEMS.NO_TIMEOUT,
241               EVENTS,
242               STATUS
243            );
244
245            exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
246
247            TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
248               STATUS,
249               RTEMS.UNSATISFIED,
250               "EVENT_RECEIVE"
251            );
252
253            TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( REMOTE_NODE ), FALSE );
254            TEXT_IO.PUT_LINE( " - have I been suspended???" ); 
255            RTEMS.TASKS.WAKE_AFTER( 
256               TEST_SUPPORT.TICKS_PER_SECOND / 2,
257               STATUS
258            );
259            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
260
261         end loop;
262
263      end if;
264
265   end TEST_TASK_SUPPORT;
266
267end MPTEST;
Note: See TracBrowser for help on using the repository browser.