source: rtems/c/src/ada-tests/sptests/sp12/sptest.adb @ 1bce637

4.104.114.84.95
Last change on this file since 1bce637 was e351c26a, checked in by Joel Sherrill <joel.sherrill@…>, on Jun 3, 1997 at 3:25:28 PM

sptest.adb: update Semaphore_Create calling sequence

sp12.adb: doubled the initialization task stack size

  • Property mode set to 100644
File size: 23.2 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 12 of the RTEMS
7--  Single Processor Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body SPTEST is
31
32--PAGE
33--
34--  INIT
35--
36
37   procedure INIT (
38      ARGUMENT : in     RTEMS.TASK_ARGUMENT
39   ) is
40      STATUS : RTEMS.STATUS_CODES;
41   begin
42
43      TEXT_IO.NEW_LINE( 2 );
44      TEXT_IO.PUT_LINE( "*** TEST 12 ***" );
45
46      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
47      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
48      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
49      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
50      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
51
52      SPTEST.PRIORITY_TASK_NAME( 1 ) := 
53         RTEMS.BUILD_NAME(  'P', 'R', 'I', '1' );
54      SPTEST.PRIORITY_TASK_NAME( 2 ) := 
55         RTEMS.BUILD_NAME(  'P', 'R', 'I', '2' );
56      SPTEST.PRIORITY_TASK_NAME( 3 ) := 
57         RTEMS.BUILD_NAME(  'P', 'R', 'I', '3' );
58      SPTEST.PRIORITY_TASK_NAME( 4 ) := 
59         RTEMS.BUILD_NAME(  'P', 'R', 'I', '4' );
60      SPTEST.PRIORITY_TASK_NAME( 5 ) := 
61         RTEMS.BUILD_NAME(  'P', 'R', 'I', '5' );
62
63      SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'M', '1', ' ' );
64      SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME(  'S', 'M', '2', ' ' );
65      SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME(  'S', 'M', '3', ' ' );
66
67      RTEMS.SEMAPHORE_CREATE( 
68         SPTEST.SEMAPHORE_NAME( 1 ), 
69         1,
70         RTEMS.DEFAULT_ATTRIBUTES,
71         RTEMS.NO_PRIORITY,
72         SPTEST.SEMAPHORE_ID( 1 ),
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
76
77      RTEMS.SEMAPHORE_CREATE( 
78         SPTEST.SEMAPHORE_NAME( 2 ), 
79         0,
80         RTEMS.PRIORITY,
81         RTEMS.NO_PRIORITY,
82         SPTEST.SEMAPHORE_ID( 2 ),
83         STATUS
84      );
85      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
86
87      RTEMS.SEMAPHORE_CREATE( 
88         SPTEST.SEMAPHORE_NAME( 3 ), 
89         1,
90         RTEMS.DEFAULT_ATTRIBUTES,
91         RTEMS.NO_PRIORITY,
92         SPTEST.SEMAPHORE_ID( 3 ),
93         STATUS
94      );
95      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM3" );
96
97      TEXT_IO.PUT_LINE( "INIT - Forward priority queue test" );
98      SPTEST.PRIORITY_TEST_DRIVER( 0 );
99
100      TEXT_IO.PUT_LINE( "INIT - Backward priority queue test" );
101      SPTEST.PRIORITY_TEST_DRIVER( 32 );
102
103TEST_SUPPORT.PAUSE;
104
105      TEXT_IO.PUT_LINE( 
106        "INIT - Binary Semaphore and Priority Inheritance Test" 
107      );
108
109      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
110      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
111
112      TEXT_IO.PUT_LINE( 
113        "INIT - semaphore_create - allocated binary semaphore"
114      );
115      RTEMS.SEMAPHORE_CREATE( 
116         SPTEST.SEMAPHORE_NAME( 2 ), 
117         0,
118         RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
119         RTEMS.NO_PRIORITY,
120         SPTEST.SEMAPHORE_ID( 2 ),
121         STATUS
122      );
123      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
124
125      TEXT_IO.PUT_LINE( 
126        "INIT - semaphore_release - allocated binary semaphore"
127      );
128      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
129      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
130
131      TEXT_IO.PUT_LINE( 
132        "INIT - semaphore_delete - allocated binary semaphore"
133      );
134      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
135      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
136
137      RTEMS.SEMAPHORE_CREATE( 
138         SPTEST.SEMAPHORE_NAME( 2 ), 
139         1,
140         RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
141         RTEMS.NO_PRIORITY,
142         SPTEST.SEMAPHORE_ID( 2 ),
143         STATUS
144      );
145      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
146
147      SPTEST.PRIORITY_TEST_DRIVER( 64 );
148
149TEST_SUPPORT.PAUSE;
150
151      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
152      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
153
154      RTEMS.SEMAPHORE_CREATE( 
155         SPTEST.SEMAPHORE_NAME( 2 ), 
156         0,
157         RTEMS.PRIORITY,
158         RTEMS.NO_PRIORITY,
159         SPTEST.SEMAPHORE_ID( 2 ),
160         STATUS
161      );
162      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
163
164      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
165      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
166
167      RTEMS.TASK_CREATE( 
168         SPTEST.TASK_NAME( 1 ), 
169         4, 
170         2048, 
171         RTEMS.DEFAULT_MODES,
172         RTEMS.DEFAULT_ATTRIBUTES,
173         SPTEST.TASK_ID( 1 ),
174         STATUS
175      );
176      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
177
178      RTEMS.TASK_CREATE( 
179         SPTEST.TASK_NAME( 2 ), 
180         4, 
181         2048, 
182         RTEMS.DEFAULT_MODES,
183         RTEMS.DEFAULT_ATTRIBUTES,
184         SPTEST.TASK_ID( 2 ),
185         STATUS
186      );
187      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
188
189      RTEMS.TASK_CREATE( 
190         SPTEST.TASK_NAME( 3 ), 
191         4, 
192         2048, 
193         RTEMS.DEFAULT_MODES,
194         RTEMS.DEFAULT_ATTRIBUTES,
195         SPTEST.TASK_ID( 3 ),
196         STATUS
197      );
198      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
199
200      RTEMS.TASK_START(
201         SPTEST.TASK_ID( 1 ),
202         SPTEST.TASK_1'ACCESS,
203         0,
204         STATUS
205      );
206      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
207
208      RTEMS.TASK_START(
209         SPTEST.TASK_ID( 2 ),
210         SPTEST.TASK_2'ACCESS,
211         0,
212         STATUS
213      );
214      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
215
216      RTEMS.TASK_START(
217         SPTEST.TASK_ID( 3 ),
218         SPTEST.TASK_3'ACCESS,
219         0,
220         STATUS
221      );
222      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
223
224      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
225      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
226
227   end INIT;
228
229--PAGE
230--
231--  PRIORITY_TEST_DRIVER
232--
233
234   procedure PRIORITY_TEST_DRIVER (
235      PRIORITY_BASE : in     RTEMS.UNSIGNED32
236   ) is 
237      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
238      STATUS            : RTEMS.STATUS_CODES;
239   begin
240
241      for INDEX in 1 .. 5
242      loop
243
244         case INDEX is
245            when 1 | 2 | 3 => 
246               SPTEST.TASK_PRIORITY( INDEX )  := 
247                  PRIORITY_BASE + RTEMS.TASK_PRIORITY( INDEX );
248            when others    => 
249               SPTEST.TASK_PRIORITY( INDEX )  := PRIORITY_BASE + 3;
250         end case;
251
252         RTEMS.TASK_CREATE( 
253            SPTEST.PRIORITY_TASK_NAME( INDEX ), 
254            SPTEST.TASK_PRIORITY( INDEX ), 
255            2048, 
256            RTEMS.DEFAULT_MODES,
257            RTEMS.DEFAULT_ATTRIBUTES,
258            SPTEST.PRIORITY_TASK_ID( INDEX ),
259            STATUS
260         );
261         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
262
263      end loop;
264
265      if PRIORITY_BASE = 0 then
266
267         for INDEX in 1 .. 5
268         loop
269
270            RTEMS.TASK_START( 
271               SPTEST.PRIORITY_TASK_ID( INDEX ),
272               SPTEST.PRIORITY_TASK'ACCESS,
273               RTEMS.TASK_ARGUMENT( INDEX ), 
274               STATUS
275            );
276            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
277     
278         end loop;
279
280      else
281
282         for INDEX in reverse 1 .. 5
283         loop
284
285            RTEMS.TASK_START( 
286               SPTEST.PRIORITY_TASK_ID( INDEX ),
287               SPTEST.PRIORITY_TASK'ACCESS,
288               RTEMS.TASK_ARGUMENT( INDEX ), 
289               STATUS
290            );
291            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
292     
293            RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
294            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER LOOP" );
295
296            if PRIORITY_BASE = 64 then
297               if INDEX = 4 then
298                  RTEMS.TASK_SET_PRIORITY( 
299                     SPTEST.PRIORITY_TASK_ID( 5 ),
300                     PRIORITY_BASE + 4,
301                     PREVIOUS_PRIORITY,
302                     STATUS
303                  );
304                  TEXT_IO.PUT( "PDRV - change priority of PRI5 from " );
305                  UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
306                  TEXT_IO.PUT( " to " );
307                  UNSIGNED32_IO.PUT( PRIORITY_BASE + 4 );
308                  TEXT_IO.NEW_LINE;
309                  TEST_SUPPORT.DIRECTIVE_FAILED( 
310                     STATUS, 
311                     "PDRV TASK_SET_PRIORITY" 
312                  );
313               end if;
314
315               RTEMS.TASK_SET_PRIORITY( 
316                  SPTEST.PRIORITY_TASK_ID( 5 ),
317                  RTEMS.CURRENT_PRIORITY,
318                  PREVIOUS_PRIORITY,
319                  STATUS
320               );
321               TEXT_IO.PUT( "PDRV - priority of PRI5 is " );
322               UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
323               TEXT_IO.NEW_LINE;
324               TEST_SUPPORT.DIRECTIVE_FAILED( 
325                  STATUS, 
326                  "PDRV TASK_SET_PRIORITY" 
327               );
328            end if;
329
330         end loop;
331
332      end if;
333
334      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
335      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER AFTER LOOP" );
336
337      if PRIORITY_BASE = 0 then
338         for INDEX in 1 .. 5
339         loop
340
341            RTEMS.SEMAPHORE_RELEASE( 
342               SPTEST.SEMAPHORE_ID( 2 ),
343               STATUS
344            );
345            TEST_SUPPORT.DIRECTIVE_FAILED( 
346               STATUS,
347               "SEMAPHORE_RELEASE LOOP"
348            );
349
350         end loop;
351      end if;
352
353      if PRIORITY_BASE = 64 then
354
355         TEXT_IO.PUT_LINE( "PDRV - task_resume - PRI5" );
356         RTEMS.TASK_RESUME( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
357         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
358
359         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
360         TEST_SUPPORT.DIRECTIVE_FAILED( 
361           STATUS, 
362           "TASK_WAKE_AFTER SO PRI5 can run" 
363         );
364
365         RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
366         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PRI5" );
367      else
368
369         for INDEX in 1 .. 5
370         loop
371
372            RTEMS.TASK_DELETE( 
373               SPTEST.PRIORITY_TASK_ID( INDEX ),
374               STATUS
375            );
376            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
377
378         end loop;
379      end if;
380
381
382   end PRIORITY_TEST_DRIVER;
383
384--PAGE
385--
386--  PRIORITY_TASK
387--
388
389   procedure PRIORITY_TASK (
390      ITS_INDEX : in     RTEMS.TASK_ARGUMENT
391   ) is 
392      TIMEOUT          : RTEMS.INTERVAL;
393      ITS_PRIORITY     : RTEMS.TASK_PRIORITY;
394      CURRENT_PRIORITY : RTEMS.TASK_PRIORITY;
395      STATUS           : RTEMS.STATUS_CODES;
396   begin
397
398      ITS_PRIORITY := SPTEST.TASK_PRIORITY( INTEGER( ITS_INDEX ) );
399
400      if ITS_PRIORITY < 3 then
401         TIMEOUT := 5 * TEST_SUPPORT.TICKS_PER_SECOND;
402      else
403         TIMEOUT := RTEMS.NO_TIMEOUT;
404      end if;
405
406      TEST_SUPPORT.PUT_NAME( PRIORITY_TASK_NAME( INTEGER(ITS_INDEX) ), FALSE );
407      TEXT_IO.PUT_LINE( " - semaphore_obtain - wait forever on SM2" );
408   
409      RTEMS.SEMAPHORE_OBTAIN( 
410         SPTEST.SEMAPHORE_ID( 2 ), 
411         RTEMS.DEFAULT_OPTIONS, 
412         TIMEOUT, 
413         STATUS
414      );
415      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN OF SM2" );
416
417      if ITS_PRIORITY < 64 then
418         TEXT_IO.PUT( "PRI" );
419         UNSIGNED32_IO.PUT( ITS_INDEX );
420         TEXT_IO.PUT( " - WHY AM I HERE? (priority = " );
421         UNSIGNED32_IO.PUT( ITS_PRIORITY );
422         TEXT_IO.PUT_LINE( " )" );
423         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
424      end if;
425
426      if ITS_INDEX = 5 then
427         TEXT_IO.PUT_LINE(
428            "PRI5 - task_suspend - until all priority tasks blocked" 
429         );
430      end if;
431
432      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
433      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
434
435      TEXT_IO.PUT_LINE( "PRI5 - task_delete - all tasks waiting on SM2" );
436      for INDEX in 1 .. 4 
437      loop
438
439         RTEMS.TASK_DELETE(  SPTEST.PRIORITY_TASK_ID( INDEX ), STATUS );
440         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
441
442      end loop;
443
444      TEXT_IO.PUT_LINE( "PRI5 - semaphore_obtain - nested" );
445      RTEMS.SEMAPHORE_OBTAIN( 
446         SPTEST.SEMAPHORE_ID( 2 ), 
447         RTEMS.DEFAULT_OPTIONS, 
448         TIMEOUT, 
449         STATUS
450      );
451      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN NESTED" );
452
453      TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - nested" );
454      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
455      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE NESTED" );
456
457      TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - restore priority" );
458      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
459      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
460
461      RTEMS.TASK_SET_PRIORITY( 
462         SPTEST.PRIORITY_TASK_ID( 5 ),
463         RTEMS.CURRENT_PRIORITY,
464         CURRENT_PRIORITY,
465         STATUS
466      );
467      TEXT_IO.PUT( "PRI5 - priority of PRI5 is " );
468      UNSIGNED32_IO.PUT( CURRENT_PRIORITY );
469      TEXT_IO.NEW_LINE;
470      TEST_SUPPORT.DIRECTIVE_FAILED( 
471         STATUS, 
472         "PRI5 TASK_SET_PRIORITY CURRENT" 
473      );
474      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
475
476   end PRIORITY_TASK;
477   
478--PAGE
479--
480--  TASK_1
481--
482
483   procedure TASK_1 (
484      ARGUMENT : in     RTEMS.TASK_ARGUMENT
485   ) is
486      SMID   : RTEMS.ID;
487      STATUS : RTEMS.STATUS_CODES;
488   begin
489
490      RTEMS.SEMAPHORE_IDENT( 
491         SPTEST.SEMAPHORE_NAME( 1 ), 
492         RTEMS.SEARCH_ALL_NODES, 
493         SMID, 
494         STATUS
495      );
496      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_IDENT OF SM1" );
497      TEXT_IO.PUT( "TA1 - semaphore_ident - smid => " );
498      UNSIGNED32_IO.PUT( SMID, WIDTH => 8, BASE => 16 );
499      TEXT_IO.NEW_LINE;
500
501      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM2" );
502      RTEMS.SEMAPHORE_OBTAIN( 
503         SPTEST.SEMAPHORE_ID( 2 ),
504         RTEMS.DEFAULT_MODES, 
505         RTEMS.NO_TIMEOUT,
506         STATUS
507      );
508      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
509     
510      TEXT_IO.PUT_LINE( "TA1 - got SM2" );
511
512      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM3" );
513      RTEMS.SEMAPHORE_OBTAIN( 
514         SPTEST.SEMAPHORE_ID( 3 ),
515         RTEMS.DEFAULT_MODES, 
516         RTEMS.NO_TIMEOUT,
517         STATUS
518      );
519      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
520     
521      TEXT_IO.PUT_LINE( "TA1 - got SM3" );
522   
523      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - get SM1 - NO_WAIT" );
524      RTEMS.SEMAPHORE_OBTAIN( 
525         SPTEST.SEMAPHORE_ID( 1 ),
526         RTEMS.NO_WAIT, 
527         RTEMS.NO_TIMEOUT,
528         STATUS
529      );
530      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
531     
532      TEXT_IO.PUT_LINE( "TA1 - got SM1" );
533
534      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
535      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
536      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
537
538TEST_SUPPORT.PAUSE;
539
540      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
541      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
542      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
543     
544      TEXT_IO.PUT_LINE( 
545         "TA1 - semaphore_obtain - waiting for SM1 with 10 second timeout"
546      );
547      RTEMS.SEMAPHORE_OBTAIN( 
548         SPTEST.SEMAPHORE_ID( 1 ),
549         RTEMS.DEFAULT_MODES, 
550         10 * TEST_SUPPORT.TICKS_PER_SECOND,
551         STATUS
552      );
553      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
554     
555      TEXT_IO.PUT_LINE( "TA1 - got SM1" );
556   
557      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM2" );
558      RTEMS.SEMAPHORE_RELEASE( 
559         SPTEST.SEMAPHORE_ID( 2 ),
560         STATUS
561      );
562      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
563
564      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
565      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
566      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
567
568TEST_SUPPORT.PAUSE;
569
570      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
571      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
572      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
573
574      RTEMS.TASK_CREATE( 
575         SPTEST.TASK_NAME( 4 ), 
576         4, 
577         2048, 
578         RTEMS.DEFAULT_MODES,
579         RTEMS.DEFAULT_ATTRIBUTES,
580         SPTEST.TASK_ID( 4 ),
581         STATUS
582      );
583      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
584
585      RTEMS.TASK_CREATE( 
586         SPTEST.TASK_NAME( 5 ), 
587         4, 
588         2048, 
589         RTEMS.DEFAULT_MODES,
590         RTEMS.DEFAULT_ATTRIBUTES,
591         SPTEST.TASK_ID( 5 ),
592         STATUS
593      );
594      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
595
596      RTEMS.TASK_START(
597         SPTEST.TASK_ID( 4 ),
598         SPTEST.TASK_4'ACCESS,
599         0,
600         STATUS
601      );
602      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
603
604      RTEMS.TASK_START(
605         SPTEST.TASK_ID( 5 ),
606         SPTEST.TASK_5'ACCESS,
607         0,
608         STATUS
609      );
610      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
611
612      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
613      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
614      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
615
616      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
617      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
618      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
619
620      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
621      RTEMS.SEMAPHORE_RELEASE( 
622         SPTEST.SEMAPHORE_ID( 1 ),
623         STATUS
624      );
625      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
626
627      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
628      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
629      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
630
631      TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM1" );
632      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
633      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
634
635      TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM3" );
636      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 3 ), STATUS );
637      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM3" );
638
639      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
640      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
641      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
642
643   end TASK_1;
644
645--PAGE
646--
647--  TASK_2
648--
649
650   procedure TASK_2 (
651      ARGUMENT : in    RTEMS.TASK_ARGUMENT
652   ) is
653      STATUS            : RTEMS.STATUS_CODES;
654      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
655   begin
656 
657      TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM1" );
658      RTEMS.SEMAPHORE_OBTAIN( 
659         SPTEST.SEMAPHORE_ID( 1 ),
660         RTEMS.DEFAULT_MODES, 
661         RTEMS.NO_TIMEOUT,
662         STATUS
663      );
664      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
665     
666      TEXT_IO.PUT_LINE( "TA2 - got SM1" );
667   
668      TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM1" );
669      RTEMS.SEMAPHORE_RELEASE( 
670         SPTEST.SEMAPHORE_ID( 1 ),
671         STATUS
672      );
673      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
674
675      TEXT_IO.PUT_LINE( 
676         "TA2 - task_set_priority - make self highest priority task" 
677      );
678      RTEMS.TASK_SET_PRIORITY(
679         RTEMS.SELF,
680         3,
681         PREVIOUS_PRIORITY,
682         STATUS
683      );
684      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY ON TA2" );
685     
686      TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM2" );
687      RTEMS.SEMAPHORE_OBTAIN( 
688         SPTEST.SEMAPHORE_ID( 2 ),
689         RTEMS.DEFAULT_MODES, 
690         RTEMS.NO_TIMEOUT,
691         STATUS
692      );
693      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
694     
695      TEXT_IO.PUT_LINE( "TA2 - got SM2" );
696   
697      TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM2" );
698      RTEMS.SEMAPHORE_RELEASE( 
699         SPTEST.SEMAPHORE_ID( 2 ),
700         STATUS
701      );
702      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
703   
704      TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
705      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
706      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
707
708   end TASK_2;
709
710--PAGE
711--
712--  TASK_3
713--
714
715   procedure TASK_3 (
716      ARGUMENT : in    RTEMS.TASK_ARGUMENT
717   ) is
718      STATUS : RTEMS.STATUS_CODES;
719   begin
720 
721      TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM2" );
722      RTEMS.SEMAPHORE_OBTAIN( 
723         SPTEST.SEMAPHORE_ID( 2 ),
724         RTEMS.DEFAULT_MODES, 
725         RTEMS.NO_TIMEOUT,
726         STATUS
727      );
728      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
729      TEXT_IO.PUT_LINE( "TA3 - got SM2" );
730   
731      TEXT_IO.PUT_LINE( "TA3 - semaphore_release - release SM2" );
732      RTEMS.SEMAPHORE_RELEASE( 
733         SPTEST.SEMAPHORE_ID( 2 ),
734         STATUS
735      );
736      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
737   
738      TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM3" );
739      RTEMS.SEMAPHORE_OBTAIN( 
740         SPTEST.SEMAPHORE_ID( 3 ),
741         RTEMS.DEFAULT_MODES, 
742         RTEMS.NO_TIMEOUT,
743         STATUS
744      );
745      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
746     
747   end TASK_3;
748
749--PAGE
750--
751--  TASK_4
752--
753
754   procedure TASK_4 (
755      ARGUMENT : in    RTEMS.TASK_ARGUMENT
756   ) is
757      STATUS : RTEMS.STATUS_CODES;
758   begin
759 
760      TEXT_IO.PUT_LINE( "TA4 - semaphore_obtain - wait forever on SM1" );
761      RTEMS.SEMAPHORE_OBTAIN( 
762         SPTEST.SEMAPHORE_ID( 1 ),
763         RTEMS.DEFAULT_MODES, 
764         RTEMS.NO_TIMEOUT,
765         STATUS
766      );
767      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
768     
769   end TASK_4;
770
771--PAGE
772--
773--  TASK_5
774--
775
776   procedure TASK_5 (
777      ARGUMENT : in    RTEMS.TASK_ARGUMENT
778   ) is
779      STATUS : RTEMS.STATUS_CODES;
780   begin
781 
782      TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
783      RTEMS.SEMAPHORE_OBTAIN( 
784         SPTEST.SEMAPHORE_ID( 1 ),
785         RTEMS.DEFAULT_MODES, 
786         RTEMS.NO_TIMEOUT,
787         STATUS
788      );
789      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
790     
791      TEXT_IO.PUT_LINE( "TA5 - got SM1" );
792   
793      TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
794      RTEMS.SEMAPHORE_OBTAIN( 
795         SPTEST.SEMAPHORE_ID( 1 ),
796         RTEMS.DEFAULT_MODES, 
797         RTEMS.NO_TIMEOUT,
798         STATUS
799      );
800      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
801         STATUS, 
802         RTEMS.OBJECT_WAS_DELETED, 
803         "SEMAPHORE_OBTAIN ON SM1" 
804      );
805      TEXT_IO.PUT_LINE( "TA5 - SM1 deleted by TA1" );
806   
807      TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
808      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
809   
810   end TASK_5;
811
812end SPTEST;
Note: See TracBrowser for help on using the repository browser.