source: rtems/c/src/ada-tests/sptests/sp24/sptest.adb @ d0d73ec

4.104.114.84.95
Last change on this file since d0d73ec was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:32:11

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 4.3 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 24 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;
28
29package body SPTEST is
30
31--PAGE
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASK_ARGUMENT
38   ) is
39      TIME   : RTEMS.TIME_OF_DAY;
40      INDEX  : RTEMS.UNSIGNED32;
41      STATUS : RTEMS.STATUS_CODES;
42   begin
43
44      TEXT_IO.NEW_LINE( 2 );
45      TEXT_IO.PUT_LINE( "*** TEST 24 ***" );
46
47      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
48
49      RTEMS.CLOCK_SET( TIME, STATUS );
50      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
51
52      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
53      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
54      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
55
56      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
57      SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
58      SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'M', '3', ' ' );
59
60      for INDEX in 1 .. 3
61      loop
62
63         RTEMS.TASK_CREATE(
64            SPTEST.TASK_NAME( INDEX ),
65            1,
66            2048,
67            RTEMS.DEFAULT_MODES,
68            RTEMS.DEFAULT_ATTRIBUTES,
69            SPTEST.TASK_ID( INDEX ),
70            STATUS
71         );
72         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
73
74         RTEMS.TIMER_CREATE(
75            SPTEST.TIMER_NAME( INDEX ),
76            SPTEST.TIMER_ID( INDEX ),
77            STATUS
78         );
79         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE LOOP" );
80
81      end loop;
82
83      for INDEX in 1 .. 3
84      loop
85
86         RTEMS.TASK_START(
87            SPTEST.TASK_ID( INDEX ),
88            SPTEST.TASK_1_THROUGH_3'ACCESS,
89            RTEMS.TASK_ARGUMENT( INDEX ),
90            STATUS
91         );
92         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
93
94      end loop;
95
96      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
97      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
98
99   end INIT;
100
101--PAGE
102--
103--  RESUME_TASK
104--
105
106   procedure RESUME_TASK (
107      TIMER_ID        : in     RTEMS.ID;
108      IGNORED_ADDRESS : in     RTEMS.ADDRESS
109   ) is
110      TASK_TO_RESUME : RTEMS.ID;
111      STATUS         : RTEMS.STATUS_CODES;
112   begin
113
114      TASK_TO_RESUME := SPTEST.TASK_ID(INTEGER( RTEMS.GET_INDEX( TIMER_ID ) ));
115      RTEMS.TASK_RESUME( TASK_TO_RESUME, STATUS );
116      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
117
118   end RESUME_TASK;
119
120--PAGE
121--
122--  TASK_1_THROUGH_3
123--
124
125   procedure TASK_1_THROUGH_3 (
126      ARGUMENT : in     RTEMS.TASK_ARGUMENT
127   ) is
128      TID    : RTEMS.ID;
129      TIME   : RTEMS.TIME_OF_DAY;
130      STATUS : RTEMS.STATUS_CODES;
131   begin
132
133      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
134      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
135   
136      loop
137
138         RTEMS.TIMER_FIRE_AFTER(
139            SPTEST.TIMER_ID( INTEGER( ARGUMENT ) ),
140            TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
141              TEST_SUPPORT.TICKS_PER_SECOND,
142            SPTEST.RESUME_TASK'ACCESS,
143            RTEMS.NULL_ADDRESS,
144            STATUS
145         );
146         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
147
148         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
149         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
150
151         if TIME.SECOND >= 35 then
152            TEXT_IO.PUT_LINE( "*** END OF TEST 24 ***" );
153            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
154         end if;
155
156         TEST_SUPPORT.PUT_NAME(
157            SPTEST.TASK_NAME( INTEGER( TEST_SUPPORT.TASK_NUMBER( TID ) ) ),
158            FALSE
159         );
160
161         TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
162         TEXT_IO.NEW_LINE;
163
164         RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
165         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
166         
167      end loop;
168   
169   end TASK_1_THROUGH_3;
170
171end SPTEST;
Note: See TracBrowser for help on using the repository browser.