source: rtems/c/src/ada-tests/mptests/mp05/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: 5.6 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 5 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 5 -- NODE " );
44      UNSIGNED32_IO.PUT(
45         TEST_SUPPORT.NODE,
46         WIDTH => 1
47      );
48      TEXT_IO.PUT_LINE( " ***" );
49
50      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
51      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
52
53      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
54
55      RTEMS.TASK_CREATE( 
56         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ), 
57         1,
58         2048, 
59         RTEMS.TIMESLICE,
60         RTEMS.GLOBAL,
61         MPTEST.TASK_ID( 1 ),
62         STATUS
63      );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
65
66      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
67
68      RTEMS.TASK_START(
69         MPTEST.TASK_ID( 1 ),
70         MPTEST.TEST_TASK'ACCESS,
71         0,
72         STATUS
73      );
74      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
75
76      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
77      MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
78
79      RTEMS.TIMER_CREATE(
80         MPTEST.TIMER_NAME( TEST_SUPPORT.NODE ),
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
88      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
89      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
90
91   end INIT;
92
93--PAGE
94--
95--  PROCESS_ASR
96--
97
98   procedure PROCESS_ASR (
99      SIGNAL : in     RTEMS.SIGNAL_SET
100   )
101   is 
102   begin
103
104      if SIGNAL /= MPTEST.EXPECTED_SIGNAL then
105
106         TEXT_IO.PUT( "ERROR: I was expecting signal 0x" );
107         UNSIGNED32_IO.PUT( EXPECTED_SIGNAL, BASE => 16 );
108         TEXT_IO.PUT( " got 0x" );
109         UNSIGNED32_IO.PUT( SIGNAL, BASE => 16 );
110         TEXT_IO.NEW_LINE;
111
112         RTEMS.FATAL_ERROR_OCCURRED( 16#000F_0000# );
113
114      end if;
115
116      MPTEST.SIGNAL_CAUGHT := TRUE;
117
118   end PROCESS_ASR;
119
120--PAGE
121--
122--  STOP_TEST_TSR
123--
124
125   procedure STOP_TEST_TSR (
126      IGNORED_ID      : in     RTEMS.ID;
127      IGNORED_ADDRESS : in     RTEMS.ADDRESS
128   ) is
129   begin
130
131      MPTEST.STOP_TEST := TRUE;
132
133   end STOP_TEST_TSR;
134
135--PAGE
136--
137--  TEST_TASK
138--
139
140   procedure TEST_TASK (
141      ARGUMENT : in     RTEMS.TASK_ARGUMENT
142   ) is
143      STATUS  : RTEMS.STATUS_CODES;
144   begin
145
146      MPTEST.STOP_TEST := FALSE;
147
148      MPTEST.SIGNAL_CAUGHT := FALSE;
149      MPTEST.SIGNAL_COUNT  := 0;
150
151      TEXT_IO.PUT_LINE( "signal_catch: initializing signal catcher" );
152      RTEMS.SIGNAL_CATCH( 
153         MPTEST.PROCESS_ASR'ACCESS, 
154         RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
155         STATUS
156      );
157      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
158
159      if TEST_SUPPORT.NODE = 1 then
160         MPTEST.REMOTE_NODE     := 2;
161         MPTEST.REMOTE_SIGNAL   := RTEMS.SIGNAL_18;
162         MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_17;
163      else
164         MPTEST.REMOTE_NODE     := 1;
165         MPTEST.REMOTE_SIGNAL   := RTEMS.SIGNAL_17;
166         MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_18;
167      end if;
168
169      TEXT_IO.PUT( "Remote task's name is : " );
170      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
171
172      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
173      loop
174
175         RTEMS.TASK_IDENT( 
176            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
177            RTEMS.SEARCH_ALL_NODES,
178            MPTEST.REMOTE_TID,
179            STATUS
180         );
181
182         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
183
184      end loop;
185
186      RTEMS.TIMER_FIRE_AFTER(
187         MPTEST.TIMER_ID( 1 ),
188         3 * TEST_SUPPORT.TICKS_PER_SECOND,
189         MPTEST.STOP_TEST_TSR'ACCESS,
190         RTEMS.NULL_ADDRESS,
191         STATUS
192      );
193      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
194
195      if TEST_SUPPORT.NODE = 1 then
196
197         TEXT_IO.PUT_LINE( "Sending signal to remote task" );
198         loop
199            RTEMS.SIGNAL_SEND(
200               MPTEST.REMOTE_TID,
201               MPTEST.REMOTE_SIGNAL,
202               STATUS
203            );
204
205            exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
206
207            exit when not RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.NOT_DEFINED );
208   
209         end loop;
210         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
211
212      end if;
213
214      loop
215 
216         exit when MPTEST.STOP_TEST = TRUE;
217
218         if MPTEST.SIGNAL_CAUGHT = TRUE then
219
220            MPTEST.SIGNAL_CAUGHT := FALSE;
221            MPTEST.SIGNAL_COUNT  := MPTEST.SIGNAL_COUNT + 1;
222
223            if MPTEST.SIGNAL_COUNT >= MPTEST.SIGNALS_PER_DOT then
224
225               MPTEST.SIGNAL_COUNT := 0;
226
227               TEST_SUPPORT.PUT_DOT( "." );
228
229            end if;
230
231            RTEMS.SIGNAL_SEND(
232               MPTEST.REMOTE_TID,
233               MPTEST.REMOTE_SIGNAL,
234               STATUS
235            );
236            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
237
238         end if;
239
240      end loop;
241
242      TEXT_IO.NEW_LINE;
243      TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
244
245      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
246
247   end TEST_TASK;
248
249end MPTEST;
Note: See TracBrowser for help on using the repository browser.