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