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

4.9
Last change on this file since 3b1a322 was 3b1a322, checked in by Joel Sherrill <joel.sherrill@…>, on 09/29/08 at 20:44:38

2008-09-29 Joel Sherrill <joel.sherrill@…>

  • support/timer_driver.adb, support/timer_driver.ads, tmtests/tm01/tmtest.adb, tmtests/tm02/tmtest.adb, tmtests/tm03/tmtest.adb, tmtests/tm04/tmtest.adb, tmtests/tm05/tmtest.adb, tmtests/tm06/tmtest.adb, tmtests/tm07/tmtest.adb, tmtests/tm08/tmtest.adb, tmtests/tm09/tmtest.adb, tmtests/tm10/tmtest.adb, tmtests/tm11/tmtest.adb, tmtests/tm12/tmtest.adb, tmtests/tm13/tmtest.adb, tmtests/tm14/tmtest.adb, tmtests/tm15/tmtest.adb, tmtests/tm16/tmtest.adb, tmtests/tm17/tmtest.adb, tmtests/tm18/tmtest.adb, tmtests/tm19/tmtest.adb, tmtests/tm20/config.h, tmtests/tm20/tmtest.adb, tmtests/tm21/tmtest.adb, tmtests/tm22/tmtest.adb, tmtests/tm23/tmtest.adb, tmtests/tm24/tmtest.adb, tmtests/tm25/tmtest.adb, tmtests/tm28/tmtest.adb, tmtests/tm29/tmtest.adb, tmtests/tmck/tmtest.adb, tmtests/tmoverhd/tmtest.adb: Clean up. Verified to run on psim with gcc 4.3.2.
  • 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--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.com/license/LICENSE.
19--
20--  $Id$
21--
22
23with INTERFACES; use INTERFACES;
24with RTEMS;
25with RTEMS_CALLING_OVERHEAD;
26with TEST_SUPPORT;
27with TEXT_IO;
28with TIME_TEST_SUPPORT;
29with UNSIGNED32_IO;
30
31package body TMTEST is
32
33--PAGE
34--
35--  INIT
36--
37
38   procedure INIT (
39      ARGUMENT : in     RTEMS.TASK_ARGUMENT
40   ) is
41      STATUS : RTEMS.STATUS_CODES;
42   begin
43
44      TEXT_IO.NEW_LINE( 2 );
45      TEXT_IO.PUT_LINE( "*** TIME TEST 1 ***" );
46
47      TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
48      TMTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
49      TMTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
50
51      RTEMS.TASK_CREATE(
52         TMTEST.TASK_NAME( 1 ),
53         1,
54         2048,
55         RTEMS.DEFAULT_MODES,
56         RTEMS.DEFAULT_ATTRIBUTES,
57         TMTEST.TASK_ID( 1 ),
58         STATUS
59      );
60      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
61
62      RTEMS.TASK_START(
63         TMTEST.TASK_ID( 1 ),
64         TMTEST.TASK_1'ACCESS,
65         0,
66         STATUS
67      );
68      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
69
70      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
71      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
72
73   end INIT;
74
75--PAGE
76--
77--  TASK_1
78--
79
80   procedure TASK_1 (
81      ARGUMENT : in     RTEMS.TASK_ARGUMENT
82   ) is
83      SEMAPHORE_OBTAIN_TIME         : RTEMS.UNSIGNED32;
84      SEMAPHORE_RELEASE_TIME        : RTEMS.UNSIGNED32;
85      SEMAPHORE_OBTAIN_NO_WAIT_TIME : RTEMS.UNSIGNED32;
86      SEMAPHORE_OBTAIN_LOOP_TIME    : RTEMS.UNSIGNED32;
87      SEMAPHORE_RELEASE_LOOP_TIME   : RTEMS.UNSIGNED32;
88      NAME                          : RTEMS.NAME;
89      SMID                          : RTEMS.ID;
90      STATUS                        : RTEMS.STATUS_CODES;
91   begin
92
93      NAME := RTEMS.BUILD_NAME(  'S', 'M', '1', ' ' );
94     
95      SEMAPHORE_OBTAIN_TIME         := 0;
96      SEMAPHORE_RELEASE_TIME        := 0;
97      SEMAPHORE_OBTAIN_NO_WAIT_TIME := 0;
98      SEMAPHORE_OBTAIN_LOOP_TIME    := 0;
99      SEMAPHORE_RELEASE_LOOP_TIME   := 0;
100   
101-- Time one invocation of SEMAPHORE_CREATE
102
103      TIMER_DRIVER.INITIALIZE;
104
105         RTEMS.SEMAPHORE_CREATE(
106            NAME,
107            TIME_TEST_SUPPORT.OPERATION_COUNT,
108            RTEMS.DEFAULT_ATTRIBUTES,
109            RTEMS.NO_PRIORITY,
110            SMID,
111            STATUS
112         );
113     
114      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
115     
116      TIME_TEST_SUPPORT.PUT_TIME(
117         "SEMAPHORE_CREATE",
118         TMTEST.END_TIME,
119         1,
120         0,
121         RTEMS_CALLING_OVERHEAD.SEMAPHORE_CREATE
122      );
123
124-- Time one invocation of SEMAPHORE_DELETE
125
126      TIMER_DRIVER.INITIALIZE;
127
128         RTEMS.SEMAPHORE_DELETE( SMID, STATUS );
129     
130      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
131     
132      TIME_TEST_SUPPORT.PUT_TIME(
133         "SEMAPHORE_DELETE",
134         TMTEST.END_TIME,
135         1,
136         0,
137         RTEMS_CALLING_OVERHEAD.SEMAPHORE_DELETE
138      );
139
140-- Create semaphore for repeated operations.
141
142      RTEMS.SEMAPHORE_CREATE(
143         NAME,
144         TIME_TEST_SUPPORT.OPERATION_COUNT,
145         RTEMS.DEFAULT_ATTRIBUTES,
146         RTEMS.NO_PRIORITY,
147         SMID,
148         STATUS
149      );
150      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
151
152-- Perform repeated SEMAPHORE OBTAIN's and RELEASE's
153     
154      for ITERATIONS in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
155      loop
156
157         TIMER_DRIVER.INITIALIZE;
158            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
159            loop
160               TIMER_DRIVER.EMPTY_FUNCTION;
161            end loop;
162         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
163
164         SEMAPHORE_OBTAIN_LOOP_TIME  := SEMAPHORE_OBTAIN_LOOP_TIME +
165                                          TMTEST.END_TIME;
166         SEMAPHORE_RELEASE_LOOP_TIME := SEMAPHORE_RELEASE_LOOP_TIME +
167                                          TMTEST.END_TIME;
168
169         -- Semaphore_obtain (available loop)
170
171         TIMER_DRIVER.INITIALIZE;
172            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
173            loop
174
175               RTEMS.SEMAPHORE_OBTAIN(
176                  SMID,
177                  RTEMS.DEFAULT_OPTIONS,
178                  RTEMS.NO_TIMEOUT,
179                  STATUS
180               );
181   
182            end loop;
183
184         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
185
186         SEMAPHORE_OBTAIN_TIME := SEMAPHORE_OBTAIN_TIME + TMTEST.END_TIME;
187
188         -- Semaphore_release
189
190            TIMER_DRIVER.INITIALIZE;
191     
192               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
193               loop
194
195                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
196     
197               end loop;
198
199            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
200
201            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
202                                        TMTEST.END_TIME;
203
204         -- Semaphore_p (NO_WAIT)
205
206         TIMER_DRIVER.INITIALIZE;
207
208            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
209            loop
210     
211               RTEMS.SEMAPHORE_OBTAIN(
212                  SMID,
213                  RTEMS.NO_WAIT,
214                  RTEMS.NO_TIMEOUT,
215                  STATUS
216               );
217
218            end loop;
219     
220         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
221
222         SEMAPHORE_OBTAIN_NO_WAIT_TIME :=
223            SEMAPHORE_OBTAIN_NO_WAIT_TIME + TMTEST.END_TIME;
224
225         -- Semaphore_v
226
227            TIMER_DRIVER.INITIALIZE;
228     
229               for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
230               loop
231
232                  RTEMS.SEMAPHORE_RELEASE( SMID, STATUS );
233     
234               end loop;
235
236            TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
237
238            SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME +
239                                        TMTEST.END_TIME;
240
241      end loop;
242
243      TIME_TEST_SUPPORT.PUT_TIME(
244         "SEMAPHORE_OBTAIN (semaphore available)",
245         SEMAPHORE_OBTAIN_TIME,
246         TIME_TEST_SUPPORT.OPERATION_COUNT *
247           TIME_TEST_SUPPORT.OPERATION_COUNT,
248         SEMAPHORE_OBTAIN_LOOP_TIME,
249         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
250      );
251
252      TIME_TEST_SUPPORT.PUT_TIME(
253         "SEMAPHORE_OBTAIN (NO_WAIT)",
254         SEMAPHORE_OBTAIN_NO_WAIT_TIME,
255         TIME_TEST_SUPPORT.OPERATION_COUNT *
256           TIME_TEST_SUPPORT.OPERATION_COUNT,
257         SEMAPHORE_OBTAIN_LOOP_TIME,
258         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
259      );
260
261      TIME_TEST_SUPPORT.PUT_TIME(
262         "SEMAPHORE_RELEASE (no task waiting)",
263         SEMAPHORE_RELEASE_TIME,
264         TIME_TEST_SUPPORT.OPERATION_COUNT *
265           TIME_TEST_SUPPORT.OPERATION_COUNT * 2,
266         SEMAPHORE_RELEASE_LOOP_TIME * 2,
267         RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE
268      );
269
270      TEXT_IO.PUT_LINE( "*** END OF TIME TEST 1 ***" );
271      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
272   
273   end TASK_1;
274
275end TMTEST;
Note: See TracBrowser for help on using the repository browser.