source: rtems/c/src/ada-tests/tmtests/tm15/tmtest.adb @ c499856

4.115
Last change on this file since c499856 was c499856, checked in by Chris Johns <chrisj@…>, on 03/20/14 at 21:10:47

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 6.3 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 15 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 RTEMS_CALLING_OVERHEAD;
22with TEST_SUPPORT;
23with TEXT_IO;
24with TIMER_DRIVER;
25with RTEMS.EVENT;
26
27package body TMTEST is
28
29--
30--  INIT
31--
32
33   procedure INIT (
34      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
35   ) is
36      pragma Unreferenced(ARGUMENT);
37      STATUS  : RTEMS.STATUS_CODES;
38   begin
39
40      TEXT_IO.NEW_LINE( 2 );
41      TEXT_IO.PUT_LINE( "*** TIME TEST 15 ***" );
42
43      TMTEST.TEST_INIT;
44
45      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
46      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
47
48   end INIT;
49
50--
51--  TEST_INIT
52--
53
54   procedure TEST_INIT
55   is
56      ID        : RTEMS.ID;
57      OVERHEAD  : RTEMS.UNSIGNED32;
58      EVENT_OUT : RTEMS.EVENT_SET;
59      STATUS    : RTEMS.STATUS_CODES;
60   begin
61
62      TMTEST.TIME_SET := FALSE;
63
64      RTEMS.TASKS.CREATE(
65         RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
66         10,
67         1024,
68         RTEMS.NO_PREEMPT,
69         RTEMS.DEFAULT_ATTRIBUTES,
70         ID,
71         STATUS
72      );
73      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" );
74
75      RTEMS.TASKS.START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
76      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" );
77
78      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
79      loop
80
81         RTEMS.TASKS.CREATE(
82            RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
83            5,
84            1024,
85            RTEMS.DEFAULT_MODES,
86            RTEMS.DEFAULT_ATTRIBUTES,
87            TMTEST.TASK_ID( INDEX ),
88            STATUS
89         );
90         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
91
92         RTEMS.TASKS.START(
93            TMTEST.TASK_ID( INDEX ),
94            TMTEST.HIGH_TASKS'ACCESS,
95            0,
96            STATUS
97         );
98         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
99
100      end loop;
101
102      TIMER_DRIVER.INITIALIZE;
103         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
104         loop
105            TIMER_DRIVER.EMPTY_FUNCTION;
106         end loop;
107      OVERHEAD := TIMER_DRIVER.READ_TIMER;
108
109      TIMER_DRIVER.INITIALIZE;
110         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
111         loop
112            RTEMS.EVENT.RECEIVE(
113               RTEMS.PENDING_EVENTS,
114               RTEMS.DEFAULT_OPTIONS,
115               RTEMS.NO_TIMEOUT,
116               EVENT_OUT,
117               STATUS
118            );
119         end loop;
120      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
121
122      TIME_TEST_SUPPORT.PUT_TIME(
123         "EVENT_RECEIVE (current)",
124         TMTEST.END_TIME,
125         TIME_TEST_SUPPORT.OPERATION_COUNT,
126         OVERHEAD,
127         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
128      );
129
130      TIMER_DRIVER.INITIALIZE;
131         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
132         loop
133            RTEMS.EVENT.RECEIVE(
134               RTEMS.ALL_EVENTS,
135               RTEMS.NO_WAIT,
136               RTEMS.NO_TIMEOUT,
137               EVENT_OUT,
138               STATUS
139            );
140         end loop;
141      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
142
143      TIME_TEST_SUPPORT.PUT_TIME(
144         "EVENT_RECEIVE (NO_WAIT)",
145         TMTEST.END_TIME,
146         TIME_TEST_SUPPORT.OPERATION_COUNT,
147         OVERHEAD,
148         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
149      );
150
151   end TEST_INIT;
152
153--
154--  LOW_TASK
155--
156
157   procedure LOW_TASK (
158      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
159   ) is
160      pragma Unreferenced(ARGUMENT);
161      EVENT_OUT : RTEMS.EVENT_SET;
162      OVERHEAD  : RTEMS.UNSIGNED32;
163      STATUS    : RTEMS.STATUS_CODES;
164   begin
165   
166      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
167
168      TIME_TEST_SUPPORT.PUT_TIME(
169         "EVENT_RECEIVE (blocking)",
170         TMTEST.END_TIME,
171         TIME_TEST_SUPPORT.OPERATION_COUNT,
172         0,
173         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
174      );
175
176      TIMER_DRIVER.INITIALIZE;
177         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
178         loop
179            TIMER_DRIVER.EMPTY_FUNCTION;
180         end loop;
181      OVERHEAD := TIMER_DRIVER.READ_TIMER;
182
183      TIMER_DRIVER.INITIALIZE;
184         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
185         loop
186            RTEMS.EVENT.SEND( RTEMS.SELF, RTEMS.EVENT_16, STATUS );
187         end loop;
188      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
189
190      TIME_TEST_SUPPORT.PUT_TIME(
191         "EVENT_SEND (returns to caller)",
192         TMTEST.END_TIME,
193         TIME_TEST_SUPPORT.OPERATION_COUNT,
194         OVERHEAD,
195         RTEMS_CALLING_OVERHEAD.EVENT_SEND
196      );
197
198      TIMER_DRIVER.INITIALIZE;
199         RTEMS.EVENT.RECEIVE(
200            RTEMS.EVENT_16,
201            RTEMS.DEFAULT_OPTIONS,
202            RTEMS.NO_TIMEOUT,
203            EVENT_OUT,
204            STATUS
205         );
206      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
207
208      TIME_TEST_SUPPORT.PUT_TIME(
209         "EVENT_RECEIVE (available)",
210         TMTEST.END_TIME,
211         1,
212         0,
213         RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE
214      );
215
216      TIMER_DRIVER.INITIALIZE;
217         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
218         loop
219            RTEMS.EVENT.SEND(
220               TMTEST.TASK_ID( INDEX ),
221               RTEMS.EVENT_16,
222               STATUS
223            );
224         end loop;
225      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
226
227      TIME_TEST_SUPPORT.PUT_TIME(
228         "EVENT_SEND (readying)",
229         TMTEST.END_TIME,
230         TIME_TEST_SUPPORT.OPERATION_COUNT,
231         OVERHEAD,
232         RTEMS_CALLING_OVERHEAD.EVENT_SEND
233      );
234
235      TEXT_IO.PUT_LINE( "*** END OF TIME TEST 15 ***" );
236      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
237
238   end LOW_TASK;
239
240--
241--  HIGH_TASKS
242--
243
244   procedure HIGH_TASKS (
245      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
246   ) is
247      pragma Unreferenced(ARGUMENT);
248      EVENT_OUT : RTEMS.EVENT_SET;
249      STATUS    : RTEMS.STATUS_CODES;
250   begin
251
252      if TMTEST.TIME_SET = FALSE then
253         TMTEST.TIME_SET := TRUE;
254         TIMER_DRIVER.INITIALIZE;
255      end if;
256
257      RTEMS.EVENT.RECEIVE(
258         16#7FFFFFFF#,
259         RTEMS.DEFAULT_OPTIONS,
260         RTEMS.NO_TIMEOUT,
261         EVENT_OUT,
262         STATUS
263      );
264   
265   end HIGH_TASKS;
266
267end TMTEST;
Note: See TracBrowser for help on using the repository browser.