source: rtems/c/src/ada-tests/mptests/mp01/mptest.adb @ fd57015

4.115
Last change on this file since fd57015 was c499856, checked in by Chris Johns <chrisj@…>, on Mar 20, 2014 at 9:10:47 PM

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

  • Property mode set to 100644
File size: 5.8 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 1 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.CLOCK;
24with RTEMS.TASKS;
25with TEST_SUPPORT;
26with TEXT_IO;
27with UNSIGNED32_IO;
28
29package body MPTEST is
30
31--
32--  INIT
33--
34
35   procedure INIT (
36      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
37   ) is
38      C      : CHARACTER;
39      TIME   : RTEMS.TIME_OF_DAY;
40      STATUS : RTEMS.STATUS_CODES;
41   begin
42
43      TEXT_IO.NEW_LINE( 2 );
44      TEXT_IO.PUT( "*** TEST 1 -- NODE " );
45      UNSIGNED32_IO.PUT(
46         TEST_SUPPORT.NODE,
47         WIDTH => 1
48      );
49      TEXT_IO.PUT_LINE( " ***" );
50     
51      if TEST_SUPPORT.NODE /= 1 then
52         C := 'S';
53      else
54         C := 'M';
55      end if;
56
57      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  C, 'A', '1', ' ' );
58      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  C, 'A', '2', ' ' );
59      MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  C, 'A', '3', ' ' );
60
61      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
62
63      RTEMS.CLOCK.SET( TIME, STATUS );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
65
66      TEXT_IO.PUT_LINE( "Creating task 1 (Global)" );
67
68      RTEMS.TASKS.CREATE( 
69         MPTEST.TASK_NAME( 1 ), 
70         1, 
71         2048, 
72         RTEMS.DEFAULT_MODES,
73         RTEMS.GLOBAL,
74         MPTEST.TASK_ID( 1 ),
75         STATUS
76      );
77      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
78
79      TEXT_IO.PUT_LINE( "Creating task 2 (Global)" );
80
81      RTEMS.TASKS.CREATE( 
82         MPTEST.TASK_NAME( 2 ), 
83         1, 
84         2048, 
85         RTEMS.TIMESLICE,
86         RTEMS.GLOBAL,
87         MPTEST.TASK_ID( 2 ),
88         STATUS
89      );
90      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
91
92      TEXT_IO.PUT_LINE( "Creating task 3 (Local)" );
93
94      RTEMS.TASKS.CREATE( 
95         MPTEST.TASK_NAME( 3 ), 
96         1, 
97         2048, 
98         RTEMS.DEFAULT_MODES,
99         RTEMS.DEFAULT_ATTRIBUTES,
100         MPTEST.TASK_ID( 3 ),
101         STATUS
102      );
103      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
104
105      RTEMS.TASKS.START(
106         MPTEST.TASK_ID( 1 ),
107         MPTEST.TEST_TASK'ACCESS,
108         0,
109         STATUS
110      );
111      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
112
113      RTEMS.TASKS.START(
114         MPTEST.TASK_ID( 2 ),
115         MPTEST.TEST_TASK'ACCESS,
116         0,
117         STATUS
118      );
119      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
120
121      RTEMS.TASKS.START(
122         MPTEST.TASK_ID( 3 ),
123         MPTEST.TEST_TASK'ACCESS,
124         0,
125         STATUS
126      );
127      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
128
129      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
130      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
131
132   end INIT;
133
134--
135--  TEST_TASK
136--
137
138   procedure TEST_TASK (
139      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
140   ) is
141      TIME   : RTEMS.TIME_OF_DAY;
142      TID    : RTEMS.ID;
143      STATUS : RTEMS.STATUS_CODES;
144   begin
145
146      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
147      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
148   
149      RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
150      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
151
152      TEST_SUPPORT.PUT_NAME( 
153         MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
154         FALSE
155      );
156
157      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
158      TEXT_IO.NEW_LINE;
159
160      RTEMS.TASKS.WAKE_AFTER( 
161         TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
162           TEST_SUPPORT.TICKS_PER_SECOND, 
163         STATUS
164      );
165      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
166         
167      RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
168      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
169
170      TEST_SUPPORT.PUT_NAME( 
171         MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
172         FALSE
173      );
174
175      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
176      TEXT_IO.NEW_LINE;
177
178      if TEST_SUPPORT.TASK_NUMBER( TID ) = 1 then         -- TASK 1
179
180         TEST_SUPPORT.PUT_NAME( 
181            MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
182            FALSE
183         );
184
185         TEXT_IO.PUT_LINE( " - deleting self" );
186
187         RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
188         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
189
190      else if TEST_SUPPORT.TASK_NUMBER( TID ) = 2 then    -- TASK 2
191
192         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), FALSE );
193         TEXT_IO.PUT( " - waiting to be deleted by " );
194         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), TRUE );
195
196         loop
197            TEST_SUPPORT.DO_NOTHING;   -- can't be optimized away
198         end loop;
199
200      else                                                -- TASK 3
201
202         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
203         TEXT_IO.PUT( " - getting TID of " );
204         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
205         
206         RTEMS.TASKS.IDENT( 
207            MPTEST.TASK_NAME( 2 ),
208            RTEMS.SEARCH_ALL_NODES,
209            TID,
210            STATUS
211         );
212         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
213
214         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
215         TEXT_IO.PUT( " - deleting " );
216         TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
217
218         RTEMS.TASKS.DELETE( TID, STATUS );
219         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
220
221      end if;
222      end if;
223
224      TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
225
226      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
227
228   end TEST_TASK;
229
230end MPTEST;
Note: See TracBrowser for help on using the repository browser.