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