source: rtems/c/src/ada-tests/mptests/mp07/mptest.adb @ 8fbe2e6

4.115
Last change on this file since 8fbe2e6 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 4.7 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 7 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-2011.
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.org/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with RTEMS;
23with RTEMS.EVENT;
24with RTEMS.TASKS;
25with RTEMS.TIMER;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT( "*** TEST 7 -- 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      RTEMS.TASKS.CREATE(
55         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ),
56         TEST_SUPPORT.NODE,
57         2048,
58         RTEMS.TIMESLICE,
59         RTEMS.GLOBAL,
60         MPTEST.TASK_ID( 1 ),
61         STATUS
62      );
63      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
64
65      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
66      RTEMS.TASKS.START(
67         MPTEST.TASK_ID( 1 ),
68         MPTEST.TEST_TASK'ACCESS,
69         0,
70         STATUS
71      );
72      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
73
74      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
75
76      RTEMS.TIMER.CREATE(
77         MPTEST.TIMER_NAME( 1 ),
78         MPTEST.TIMER_ID( 1 ),
79         STATUS
80      );
81      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
82
83      TEXT_IO.PUT_LINE( "Deleting initialization task" );
84      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
85      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
86
87   end INIT;
88
89--
90--  STOP_TEST_TSR
91--
92 
93   procedure STOP_TEST_TSR (
94      IGNORED1 : in     RTEMS.ID;
95      IGNORED2 : in     RTEMS.ADDRESS
96   ) is
97   begin
98 
99      MPTEST.STOP_TEST := TRUE;
100 
101   end STOP_TEST_TSR;
102 
103--
104--  TEST_TASK
105--
106
107   procedure TEST_TASK (
108      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
109   ) is
110      EVENT_OUT : RTEMS.EVENT_SET;
111      STATUS    : RTEMS.STATUS_CODES;
112   begin
113
114      MPTEST.STOP_TEST := FALSE;
115
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      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
126      loop
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.ARE_STATUSES_EQUAL( STATUS, RTEMS.SUCCESSFUL );
135
136      end loop;
137
138      if TEST_SUPPORT.NODE = 1 then
139
140         TEXT_IO.PUT_LINE( "Sending first event to remote task" );
141         RTEMS.EVENT.SEND(
142            MPTEST.REMOTE_TID,
143            RTEMS.EVENT_16,
144            STATUS
145         );
146         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
147
148      end if;
149
150      RTEMS.TIMER.FIRE_AFTER(
151         MPTEST.TIMER_ID( 1 ),
152         5 * TEST_SUPPORT.TICKS_PER_SECOND,
153         MPTEST.STOP_TEST_TSR'ACCESS,
154         RTEMS.NULL_ADDRESS,
155         STATUS
156      );
157      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
158
159      loop
160
161         exit when MPTEST.STOP_TEST = TRUE;
162
163         for COUNT in 1 .. MPTEST.PER_DOT
164         loop
165
166            RTEMS.EVENT.RECEIVE(
167               RTEMS.EVENT_16,
168               RTEMS.DEFAULT_OPTIONS,
169               TEST_SUPPORT.TICKS_PER_SECOND,
170               EVENT_OUT,
171               STATUS
172            );
173            if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
174               TEXT_IO.NEW_LINE;
175               TEXT_IO.PUT_LINE(
176                   "TA1 - TIMEOUT .. probably OK if the other node exits"
177               );
178               exit;
179            else
180               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
181            end if;
182
183            RTEMS.EVENT.SEND(
184               MPTEST.REMOTE_TID,
185               RTEMS.EVENT_16,
186               STATUS
187            );
188            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
189
190         end loop;
191
192         TEST_SUPPORT.PUT_DOT( "." );
193
194      end loop;
195
196      TEXT_IO.NEW_LINE;
197
198      TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
199
200      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
201
202   end TEST_TASK;
203
204end MPTEST;
Note: See TracBrowser for help on using the repository browser.