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

4.104.114.84.95
Last change on this file since bf9ae83 was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:32:11

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 7.1 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            SMID,
113            STATUS
114         );
115     
116      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
117     
118      TIME_TEST_SUPPORT.PUT_TIME(
119         "SEMAPHORE_CREATE",
120         TMTEST.END_TIME,
121         1,
122         0,
123         RTEMS_CALLING_OVERHEAD.SEMAPHORE_CREATE
124      );
125
126-- Time one invocation of SEMAPHORE_DELETE
127
128      TIMER_DRIVER.INITIALIZE;
129
130         RTEMS.SEMAPHORE_DELETE( SMID, STATUS );
131     
132      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
133     
134      TIME_TEST_SUPPORT.PUT_TIME(
135         "SEMAPHORE_DELETE",
136         TMTEST.END_TIME,
137         1,
138         0,
139         RTEMS_CALLING_OVERHEAD.SEMAPHORE_DELETE
140      );
141
142-- Create semaphore for repeated operations.
143
144      RTEMS.SEMAPHORE_CREATE(
145         NAME,
146         TIME_TEST_SUPPORT.OPERATION_COUNT,
147         RTEMS.DEFAULT_ATTRIBUTES,
148         SMID,
149         STATUS
150      );
151      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
152
153-- Perform repeated SEMAPHORE OBTAIN's and RELEASE's
154     
155      for ITERATIONS in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
156      loop
157
158         TIMER_DRIVER.INITIALIZE;
159            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
160            loop
161               TIMER_DRIVER.EMPTY_FUNCTION;
162            end loop;
163         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
164
165         SEMAPHORE_OBTAIN_LOOP_TIME  := SEMAPHORE_OBTAIN_LOOP_TIME +
166                                          TMTEST.END_TIME;
167         SEMAPHORE_RELEASE_LOOP_TIME := SEMAPHORE_RELEASE_LOOP_TIME +
168                                          TMTEST.END_TIME;
169
170         -- Semaphore_obtain (available loop)
171
172         TIMER_DRIVER.INITIALIZE;
173            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
174            loop
175
176               RTEMS.SEMAPHORE_OBTAIN(
177                  SMID,
178                  RTEMS.DEFAULT_OPTIONS,
179                  RTEMS.NO_TIMEOUT,
180                  STATUS
181               );
182   
183            end loop;
184
185         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
186
187         SEMAPHORE_OBTAIN_TIME := SEMAPHORE_OBTAIN_TIME + TMTEST.END_TIME;
188
189         -- Semaphore_release
190
191            TIMER_DRIVER.INITIALIZE;
192     
193               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
194               loop
195
196                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
197     
198               end loop;
199
200            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
201
202            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
203                                        TMTEST.END_TIME;
204
205         -- Semaphore_p (NO_WAIT)
206
207         TIMER_DRIVER.INITIALIZE;
208
209            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
210            loop
211     
212               RTEMS.SEMAPHORE_OBTAIN(
213                  SMID,
214                  RTEMS.NO_WAIT,
215                  RTEMS.NO_TIMEOUT,
216                  STATUS
217               );
218
219            end loop;
220     
221         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
222
223         SEMAPHORE_OBTAIN_NO_WAIT_TIME :=
224            SEMAPHORE_OBTAIN_NO_WAIT_TIME + TMTEST.END_TIME;
225
226         -- Semaphore_v
227
228            TIMER_DRIVER.INITIALIZE;
229     
230               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
231               loop
232
233                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
234     
235               end loop;
236
237            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
238
239            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
240                                        TMTEST.END_TIME;
241
242      end loop;
243
244      TIME_TEST_SUPPORT.PUT_TIME(
245         "SEMAPHORE_OBTAIN (semaphore available)",
246         SEMAPHORE_OBTAIN_TIME,
247         TIME_TEST_SUPPORT.OPERATION_COUNT *
248           TIME_TEST_SUPPORT.OPERATION_COUNT,
249         SEMAPHORE_OBTAIN_LOOP_TIME,
250         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
251      );
252
253      TIME_TEST_SUPPORT.PUT_TIME(
254         "SEMAPHORE_OBTAIN (NO_WAIT)",
255         SEMAPHORE_OBTAIN_NO_WAIT_TIME,
256         TIME_TEST_SUPPORT.OPERATION_COUNT *
257           TIME_TEST_SUPPORT.OPERATION_COUNT,
258         SEMAPHORE_OBTAIN_LOOP_TIME,
259         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
260      );
261
262      TIME_TEST_SUPPORT.PUT_TIME(
263         "SEMAPHORE_RELEASE (no task waiting)",
264         SEMAPHORE_RELEASE_TIME,
265         TIME_TEST_SUPPORT.OPERATION_COUNT *
266           TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
267         SEMAPHORE_RELEASE_LOOP_TIME * 2,
268         RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
269      );
270      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
271   
272   end TASK_1;
273
274end TMTEST;
Note: See TracBrowser for help on using the repository browser.