source: rtems/c/src/ada-tests/tmtests/tm01/tmtest.adb @ fff840e

4.104.114.84.95
Last change on this file since fff840e was 7b93a327, checked in by Joel Sherrill <joel.sherrill@…>, on 06/03/97 at 20:20:39

Corrected call to Semaphore_Create to have the proper calling sequence

  • Property mode set to 100644
File size: 7.2 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 1 of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with RTEMS_CALLING_OVERHEAD;
27with TEST_SUPPORT;
28with TEXT_IO;
29with TIME_TEST_SUPPORT;
30with UNSIGNED32_IO;
31
32package body TMTEST is
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_LINE( "*** TIME TEST 1 ***" );
47
48      TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
49      TMTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
50      TMTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
51
52      RTEMS.TASK_CREATE(
53         TMTEST.TASK_NAME( 1 ),
54         1,
55         2048,
56         RTEMS.DEFAULT_MODES,
57         RTEMS.DEFAULT_ATTRIBUTES,
58         TMTEST.TASK_ID( 1 ),
59         STATUS
60      );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
62
63      RTEMS.TASK_START(
64         TMTEST.TASK_ID( 1 ),
65         TMTEST.TASK_1'ACCESS,
66         0,
67         STATUS
68      );
69      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
70
71      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
72      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
73
74   end INIT;
75
76--PAGE
77--
78--  TASK_1
79--
80
81   procedure TASK_1 (
82      ARGUMENT : in     RTEMS.TASK_ARGUMENT
83   ) is
84      SEMAPHORE_OBTAIN_TIME         : RTEMS.UNSIGNED32;
85      SEMAPHORE_RELEASE_TIME        : RTEMS.UNSIGNED32;
86      SEMAPHORE_OBTAIN_NO_WAIT_TIME : RTEMS.UNSIGNED32;
87      SEMAPHORE_OBTAIN_LOOP_TIME    : RTEMS.UNSIGNED32;
88      SEMAPHORE_RELEASE_LOOP_TIME   : RTEMS.UNSIGNED32;
89      INDEX                         : RTEMS.UNSIGNED32;
90      ITERATIONS                    : RTEMS.UNSIGNED32;
91      NAME                          : RTEMS.NAME;
92      SMID                          : RTEMS.ID;
93      STATUS                        : RTEMS.STATUS_CODES;
94   begin
95
96      NAME := RTEMS.BUILD_NAME(  'S', 'M', '1', ' ' );
97     
98      SEMAPHORE_OBTAIN_TIME         := 0;
99      SEMAPHORE_RELEASE_TIME        := 0;
100      SEMAPHORE_OBTAIN_NO_WAIT_TIME := 0;
101      SEMAPHORE_OBTAIN_LOOP_TIME    := 0;
102      SEMAPHORE_RELEASE_LOOP_TIME   := 0;
103   
104-- Time one invocation of SEMAPHORE_CREATE
105
106      TIMER_DRIVER.INITIALIZE;
107
108         RTEMS.SEMAPHORE_CREATE(
109            NAME,
110            TIME_TEST_SUPPORT.OPERATION_COUNT,
111            RTEMS.DEFAULT_ATTRIBUTES,
112            RTEMS.NO_PRIORITY,
113            SMID,
114            STATUS
115         );
116     
117      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
118     
119      TIME_TEST_SUPPORT.PUT_TIME(
120         "SEMAPHORE_CREATE",
121         TMTEST.END_TIME,
122         1,
123         0,
124         RTEMS_CALLING_OVERHEAD.SEMAPHORE_CREATE
125      );
126
127-- Time one invocation of SEMAPHORE_DELETE
128
129      TIMER_DRIVER.INITIALIZE;
130
131         RTEMS.SEMAPHORE_DELETE( SMID, STATUS );
132     
133      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
134     
135      TIME_TEST_SUPPORT.PUT_TIME(
136         "SEMAPHORE_DELETE",
137         TMTEST.END_TIME,
138         1,
139         0,
140         RTEMS_CALLING_OVERHEAD.SEMAPHORE_DELETE
141      );
142
143-- Create semaphore for repeated operations.
144
145      RTEMS.SEMAPHORE_CREATE(
146         NAME,
147         TIME_TEST_SUPPORT.OPERATION_COUNT,
148         RTEMS.DEFAULT_ATTRIBUTES,
149         RTEMS.NO_PRIORITY,
150         SMID,
151         STATUS
152      );
153      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
154
155-- Perform repeated SEMAPHORE OBTAIN's and RELEASE's
156     
157      for ITERATIONS in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
158      loop
159
160         TIMER_DRIVER.INITIALIZE;
161            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
162            loop
163               TIMER_DRIVER.EMPTY_FUNCTION;
164            end loop;
165         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
166
167         SEMAPHORE_OBTAIN_LOOP_TIME  := SEMAPHORE_OBTAIN_LOOP_TIME +
168                                          TMTEST.END_TIME;
169         SEMAPHORE_RELEASE_LOOP_TIME := SEMAPHORE_RELEASE_LOOP_TIME +
170                                          TMTEST.END_TIME;
171
172         -- Semaphore_obtain (available loop)
173
174         TIMER_DRIVER.INITIALIZE;
175            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
176            loop
177
178               RTEMS.SEMAPHORE_OBTAIN(
179                  SMID,
180                  RTEMS.DEFAULT_OPTIONS,
181                  RTEMS.NO_TIMEOUT,
182                  STATUS
183               );
184   
185            end loop;
186
187         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
188
189         SEMAPHORE_OBTAIN_TIME := SEMAPHORE_OBTAIN_TIME + TMTEST.END_TIME;
190
191         -- Semaphore_release
192
193            TIMER_DRIVER.INITIALIZE;
194     
195               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
196               loop
197
198                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
199     
200               end loop;
201
202            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
203
204            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
205                                        TMTEST.END_TIME;
206
207         -- Semaphore_p (NO_WAIT)
208
209         TIMER_DRIVER.INITIALIZE;
210
211            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
212            loop
213     
214               RTEMS.SEMAPHORE_OBTAIN(
215                  SMID,
216                  RTEMS.NO_WAIT,
217                  RTEMS.NO_TIMEOUT,
218                  STATUS
219               );
220
221            end loop;
222     
223         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
224
225         SEMAPHORE_OBTAIN_NO_WAIT_TIME :=
226            SEMAPHORE_OBTAIN_NO_WAIT_TIME + TMTEST.END_TIME;
227
228         -- Semaphore_v
229
230            TIMER_DRIVER.INITIALIZE;
231     
232               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
233               loop
234
235                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
236     
237               end loop;
238
239            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
240
241            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
242                                        TMTEST.END_TIME;
243
244      end loop;
245
246      TIME_TEST_SUPPORT.PUT_TIME(
247         "SEMAPHORE_OBTAIN (semaphore available)",
248         SEMAPHORE_OBTAIN_TIME,
249         TIME_TEST_SUPPORT.OPERATION_COUNT *
250           TIME_TEST_SUPPORT.OPERATION_COUNT,
251         SEMAPHORE_OBTAIN_LOOP_TIME,
252         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
253      );
254
255      TIME_TEST_SUPPORT.PUT_TIME(
256         "SEMAPHORE_OBTAIN (NO_WAIT)",
257         SEMAPHORE_OBTAIN_NO_WAIT_TIME,
258         TIME_TEST_SUPPORT.OPERATION_COUNT *
259           TIME_TEST_SUPPORT.OPERATION_COUNT,
260         SEMAPHORE_OBTAIN_LOOP_TIME,
261         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
262      );
263
264      TIME_TEST_SUPPORT.PUT_TIME(
265         "SEMAPHORE_RELEASE (no task waiting)",
266         SEMAPHORE_RELEASE_TIME,
267         TIME_TEST_SUPPORT.OPERATION_COUNT *
268           TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
269         SEMAPHORE_RELEASE_LOOP_TIME * 2,
270         RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
271      );
272      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
273   
274   end TASK_1;
275
276end TMTEST;
Note: See TracBrowser for help on using the repository browser.