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