source: rtems/c/src/ada-tests/mptests/mp04/mptest.adb @ 6d4e604b

4.104.114.84.95
Last change on this file since 6d4e604b was 6d4e604b, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 2, 1997 at 8:19:03 PM

Initial revision

  • Property mode set to 100644
File size: 4.2 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 4 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
14--  On-Line Applications Research Corporation (OAR).
15--  All rights assigned to U.S. Government, 1994.
16--
17--  This material may be reproduced by or for the U.S. Government pursuant
18--  to the copyright license under the clause at DFARS 252.227-7013.  This
19--  notice must appear in all copies of this file and its derivatives.
20--
21--  mptest.adb,v 1.3 1995/07/12 19:38:59 joel Exp
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32   package body PER_NODE_CONFIGURATION is separate;
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      STATUS : RTEMS.STATUS_CODES;
43   begin
44
45      TEXT_IO.NEW_LINE( 2 );
46      TEXT_IO.PUT( "*** TEST 4 -- NODE " );
47      UNSIGNED32_IO.PUT(
48         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
49         WIDTH => 1
50      );
51      TEXT_IO.PUT_LINE( " ***" );
52
53      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  '1', '1', '1', ' ' );
54      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  '2', '2', '2', ' ' );
55
56      TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
57
58      RTEMS.TASK_CREATE( 
59         MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ), 
60         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE, 
61         2048, 
62         RTEMS.DEFAULT_MODES,
63         RTEMS.GLOBAL,
64         MPTEST.TASK_ID( 1 ),
65         STATUS
66      );
67      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
68
69      TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
70
71      RTEMS.TASK_START(
72         MPTEST.TASK_ID( 1 ),
73         MPTEST.TEST_TASK'ACCESS,
74         0,
75         STATUS
76      );
77      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
78
79      TEXT_IO.PUT_LINE( "Deleting initialization task" );
80
81      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
82      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
83
84   end INIT;
85
86--PAGE
87--
88--  TEST_TASK
89--
90
91   procedure TEST_TASK (
92      ARGUMENT : in     RTEMS.TASK_ARGUMENT
93   ) is
94      TID                 : RTEMS.ID;
95      PREVIOUS_PRIORITY   : RTEMS.TASK_PRIORITY;
96      PREVIOUS_PRIORITY_1 : RTEMS.TASK_PRIORITY;
97      STATUS              : RTEMS.STATUS_CODES;
98   begin
99
100      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
101      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
102   
103      TEXT_IO.PUT_LINE( "Getting TID of remote task" );
104      if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
105         MPTEST.REMOTE_NODE := 2;
106      else
107         MPTEST.REMOTE_NODE := 1;
108      end if;
109
110      TEXT_IO.PUT( "Remote task's name is : " );
111      TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
112
113      loop
114
115         RTEMS.TASK_IDENT( 
116            MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
117            RTEMS.SEARCH_ALL_NODES,
118            MPTEST.REMOTE_TID,
119            STATUS
120         );
121
122         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
123
124      end loop;
125
126      RTEMS.TASK_SET_PRIORITY(
127         MPTEST.REMOTE_TID,
128         MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
129         PREVIOUS_PRIORITY,
130         STATUS
131      );
132      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
133
134      if PREVIOUS_PRIORITY /= MPTEST.REMOTE_NODE then
135
136         TEXT_IO.PUT( "Remote priority (0x" );
137         UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY, BASE => 16 );
138         TEXT_IO.PUT( "does not match remote node (0x" );
139         UNSIGNED32_IO.PUT( MPTEST.REMOTE_NODE, BASE => 16 );
140         TEXT_IO.PUT_LINE( ")!!!" );
141
142         RTEMS.SHUTDOWN_EXECUTIVE( 16#F00000# );
143
144      end if;
145
146      loop
147
148         RTEMS.TASK_SET_PRIORITY(
149            RTEMS.SELF,
150            RTEMS.CURRENT_PRIORITY,
151            PREVIOUS_PRIORITY_1,
152            STATUS
153         );
154         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
155
156         exit when PREVIOUS_PRIORITY_1 = MPTEST.REMOTE_NODE;
157
158      end loop;
159
160
161      TEXT_IO.PUT_LINE( "Local task priority has been set" );
162
163      TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
164
165      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
166
167   end TEST_TASK;
168
169end MPTEST;
Note: See TracBrowser for help on using the repository browser.