source: rtems/testsuites/ada/mptests/mp07/mptest.adb @ f6c9334d

5
Last change on this file since f6c9334d was f6c9334d, checked in by Sebastian Huber <sebastian.huber@…>, on 12/01/17 at 07:51:17

ada: Add standard test begin/end message

  • 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      TEST_SUPPORT.ADA_TEST_BEGIN;
44      TEXT_IO.PUT( "*** NODE " );
45      UNSIGNED32_IO.PUT(
46         TEST_SUPPORT.NODE,
47         WIDTH => 1
48      );
49      TEXT_IO.PUT_LINE( " ***" );
50
51      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
52      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
53
54      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
55      RTEMS.TASKS.CREATE(
56         MPTEST.TASK_NAME( TEST_SUPPORT.NODE ),
57         TEST_SUPPORT.NODE,
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      RTEMS.TASKS.START(
68         MPTEST.TASK_ID( 1 ),
69         MPTEST.TEST_TASK'ACCESS,
70         0,
71         STATUS
72      );
73      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
74
75      MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
76
77      RTEMS.TIMER.CREATE(
78         MPTEST.TIMER_NAME( 1 ),
79         MPTEST.TIMER_ID( 1 ),
80         STATUS
81      );
82      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
83
84      TEXT_IO.PUT_LINE( "Deleting initialization task" );
85      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
86      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
87
88   end INIT;
89
90--
91--  STOP_TEST_TSR
92--
93 
94   procedure STOP_TEST_TSR (
95      IGNORED1 : in     RTEMS.ID;
96      IGNORED2 : in     RTEMS.ADDRESS
97   ) is
98   begin
99 
100      MPTEST.STOP_TEST := TRUE;
101 
102   end STOP_TEST_TSR;
103 
104--
105--  TEST_TASK
106--
107
108   procedure TEST_TASK (
109      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
110   ) is
111      EVENT_OUT : RTEMS.EVENT_SET;
112      STATUS    : RTEMS.STATUS_CODES;
113   begin
114
115      MPTEST.STOP_TEST := FALSE;
116
117      if TEST_SUPPORT.NODE = 1 then
118         MPTEST.REMOTE_NODE := 2;
119      else
120         MPTEST.REMOTE_NODE := 1;
121      end if;
122
123      TEXT_IO.PUT( "Remote task's name is : " );
124      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
125
126      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
127      loop
128         RTEMS.TASKS.IDENT(
129            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
130            RTEMS.SEARCH_ALL_NODES,
131            MPTEST.REMOTE_TID,
132            STATUS
133         );
134
135         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.SUCCESSFUL );
136
137      end loop;
138
139      if TEST_SUPPORT.NODE = 1 then
140
141         TEXT_IO.PUT_LINE( "Sending first event to remote task" );
142         RTEMS.EVENT.SEND(
143            MPTEST.REMOTE_TID,
144            RTEMS.EVENT_16,
145            STATUS
146         );
147         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
148
149      end if;
150
151      RTEMS.TIMER.FIRE_AFTER(
152         MPTEST.TIMER_ID( 1 ),
153         5 * TEST_SUPPORT.TICKS_PER_SECOND,
154         MPTEST.STOP_TEST_TSR'ACCESS,
155         RTEMS.NULL_ADDRESS,
156         STATUS
157      );
158      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
159
160      loop
161
162         exit when MPTEST.STOP_TEST = TRUE;
163
164         for COUNT in 1 .. MPTEST.PER_DOT
165         loop
166
167            RTEMS.EVENT.RECEIVE(
168               RTEMS.EVENT_16,
169               RTEMS.DEFAULT_OPTIONS,
170               TEST_SUPPORT.TICKS_PER_SECOND,
171               EVENT_OUT,
172               STATUS
173            );
174            if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
175               TEXT_IO.NEW_LINE;
176               TEXT_IO.PUT_LINE(
177                   "TA1 - TIMEOUT .. probably OK if the other node exits"
178               );
179               exit;
180            else
181               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
182            end if;
183
184            RTEMS.EVENT.SEND(
185               MPTEST.REMOTE_TID,
186               RTEMS.EVENT_16,
187               STATUS
188            );
189            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
190
191         end loop;
192
193         TEST_SUPPORT.PUT_DOT( "." );
194
195      end loop;
196
197      TEXT_IO.NEW_LINE;
198
199      TEST_SUPPORT.ADA_TEST_END;
200
201      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
202
203   end TEST_TASK;
204
205end MPTEST;
Note: See TracBrowser for help on using the repository browser.