source: rtems/c/src/ada-tests/sptests/sp22/sptest.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: 8.0 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 22 of the RTEMS
7--  Single Processor 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 TEST_SUPPORT;
23with TEXT_IO;
24with UNSIGNED32_IO;
25with RTEMS.CLOCK;
26with RTEMS.TIMER;
27
28package body SPTEST is
29
30--
31--  INIT
32--
33
34   procedure INIT (
35      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
36   ) is
37      pragma Unreferenced(ARGUMENT);
38      TIME   : RTEMS.TIME_OF_DAY;
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEXT_IO.PUT_LINE( "*** TEST 22 ***" );
44
45      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
46
47      RTEMS.CLOCK.SET( TIME, STATUS );
48      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
49
50      SPTEST.TASK_NAME( 1 )  := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
51      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
52
53      RTEMS.TASKS.CREATE(
54         SPTEST.TASK_NAME( 1 ),
55         1,
56         2048,
57         RTEMS.DEFAULT_MODES,
58         RTEMS.DEFAULT_ATTRIBUTES,
59         SPTEST.TASK_ID( 1 ),
60         STATUS
61      );
62      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
63
64      RTEMS.TASKS.START(
65         SPTEST.TASK_ID( 1 ),
66         SPTEST.TASK_1'ACCESS,
67         0,
68         STATUS
69      );
70      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
71
72      TEXT_IO.PUT_LINE( "INIT - timer_create - creating timer 1" );
73      RTEMS.TIMER.CREATE(
74         SPTEST.TIMER_NAME( 1 ),
75         SPTEST.TIMER_ID( 1 ),
76         STATUS
77      );
78      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
79      TEXT_IO.PUT( "INIT - timer 1 has id (" );
80      UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
81      TEXT_IO.PUT_LINE( ")" );
82     
83      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
84      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
85
86   end INIT;
87
88--
89--  DELAYED_RESUME
90--
91
92   procedure DELAYED_RESUME (
93      IGNORED_ID      : in     RTEMS.ID;
94      IGNORED_ADDRESS : in     RTEMS.ADDRESS
95   ) is
96      pragma Unreferenced(IGNORED_ID);
97      pragma Unreferenced(IGNORED_ADDRESS);
98      STATUS : RTEMS.STATUS_CODES;
99   begin
100
101      RTEMS.TASKS.RESUME( SPTEST.TASK_ID( 1 ), STATUS );
102      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF SELF" );
103
104   end DELAYED_RESUME;
105
106--
107--  PRINT_TIME
108--
109
110   procedure PRINT_TIME
111   is
112      TIME   : RTEMS.TIME_OF_DAY;
113      STATUS : RTEMS.STATUS_CODES;
114   begin
115
116      RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
117      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
118
119      TEST_SUPPORT.PUT_NAME(
120         SPTEST.TASK_NAME( 1 ),
121         FALSE
122      );
123
124      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
125      TEXT_IO.NEW_LINE;
126
127   end PRINT_TIME;
128   
129--
130--  TASK_1
131--
132
133   procedure TASK_1 (
134      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
135   ) is
136      pragma Unreferenced(ARGUMENT);
137      TMID   : RTEMS.ID;
138      TIME   : RTEMS.TIME_OF_DAY;
139      STATUS : RTEMS.STATUS_CODES;
140   begin
141
142-- GET ID
143
144      TEXT_IO.PUT_LINE( "TA1 - timer_ident - identing timer 1" );
145      RTEMS.TIMER.IDENT( SPTEST.TIMER_NAME( 1 ), TMID, STATUS );
146      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_IDENT OF TM1" );
147      TEXT_IO.PUT( "TA1 - timer 1 has id (" );
148      UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
149      TEXT_IO.PUT_LINE( ")" );
150   
151-- AFTER WHICH IS ALLOWED TO FIRE
152
153      SPTEST.PRINT_TIME;
154
155      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
156      RTEMS.TIMER.FIRE_AFTER(
157         TMID,
158         3 * TEST_SUPPORT.TICKS_PER_SECOND,
159         SPTEST.DELAYED_RESUME'ACCESS,
160         RTEMS.NULL_ADDRESS,
161         STATUS
162      );
163      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
164
165      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
166      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
167      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
168         
169      SPTEST.PRINT_TIME;
170
171-- AFTER WHICH IS RESET AND ALLOWED TO FIRE
172
173      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
174      RTEMS.TIMER.FIRE_AFTER(
175         TMID,
176         3 * TEST_SUPPORT.TICKS_PER_SECOND,
177         SPTEST.DELAYED_RESUME'ACCESS,
178         RTEMS.NULL_ADDRESS,
179         STATUS
180      );
181      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
182
183      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
184      RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
185      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
186         
187      SPTEST.PRINT_TIME;
188
189      TEXT_IO.PUT_LINE( "TA1 - timer_reset - timer 1" );
190      RTEMS.TIMER.RESET( TMID, STATUS );
191      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_RESET" );
192         
193      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
194      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
195      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
196
197      SPTEST.PRINT_TIME;
198
199TEST_SUPPORT.PAUSE;
200
201--
202-- Reset the time since we do not know how long the user waited
203-- before pressing <cr> at the pause.  This insures that the
204-- actual output matches the screen.
205--
206
207      TIME := ( 1988, 12, 31, 9, 0, 7, 0 );
208
209      RTEMS.CLOCK.SET( TIME, STATUS );
210      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
211
212-- after which is canceled
213
214      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
215      RTEMS.TIMER.FIRE_AFTER(
216         TMID,
217         3 * TEST_SUPPORT.TICKS_PER_SECOND,
218         SPTEST.DELAYED_RESUME'ACCESS,
219         RTEMS.NULL_ADDRESS,
220         STATUS
221      );
222      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
223
224      TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
225      RTEMS.TIMER.CANCEL( TMID, STATUS );
226      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
227         
228-- when which is allowed to fire
229
230      SPTEST.PRINT_TIME;
231
232      RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
233      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
234
235      TIME.SECOND := TIME.SECOND + 3;
236
237      TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
238      RTEMS.TIMER.FIRE_WHEN(
239         TMID,
240         TIME,
241         SPTEST.DELAYED_RESUME'ACCESS,
242         RTEMS.NULL_ADDRESS,
243         STATUS
244      );
245      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
246
247      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
248      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
249      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
250
251      SPTEST.PRINT_TIME;
252
253-- when which is canceled
254
255      RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
256      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
257
258      TIME.SECOND := TIME.SECOND + 3;
259
260      TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
261      RTEMS.TIMER.FIRE_WHEN(
262         TMID,
263         TIME,
264         SPTEST.DELAYED_RESUME'ACCESS,
265         RTEMS.NULL_ADDRESS,
266         STATUS
267      );
268      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
269
270      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
271      RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
272      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
273         
274      SPTEST.PRINT_TIME;
275
276      TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
277      RTEMS.TIMER.CANCEL( TMID, STATUS );
278      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
279         
280-- delete
281         
282      TEXT_IO.PUT_LINE(
283         "TA1 - task_wake_after - YIELD (only task at priority)"
284      );
285      RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
286      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
287         
288      TEXT_IO.PUT_LINE( "TA1 - timer_delete - timer 1" );
289      RTEMS.TIMER.DELETE( TMID, STATUS );
290      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_DELETE" );
291         
292      TEXT_IO.PUT_LINE( "*** END OF TEST 22 ***" );
293      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
294   
295   end TASK_1;
296
297end SPTEST;
Note: See TracBrowser for help on using the repository browser.