source: rtems/c/src/ada-tests/tmtests/tm29/tmtest.adb @ bf9ae83

4.104.114.84.95
Last change on this file since bf9ae83 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: 5.7 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 29 of the RTEMS
7--  Timing 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 RTEMS_CALLING_OVERHEAD;
27with TEST_SUPPORT;
28with TEXT_IO;
29with TIME_TEST_SUPPORT;
30with UNSIGNED32_IO;
31
32package body TMTEST is
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      ID     : RTEMS.ID;
43      STATUS : RTEMS.STATUS_CODES;
44   begin
45
46      TEXT_IO.NEW_LINE( 2 );
47      TEXT_IO.PUT_LINE( "*** TIME TEST 29 ***" );
48
49      TMTEST.PERIOD_NAME := RTEMS.BUILD_NAME( 'P', 'R', 'D', ' ' );
50
51      TIMER_DRIVER.INITIALIZE;
52         RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
53      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
54
55      TIME_TEST_SUPPORT.PUT_TIME(
56         "RATE_MONOTONIC_CREATE",
57         TMTEST.END_TIME,
58         1,
59         0,
60         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CREATE
61      );
62
63      TIMER_DRIVER.INITIALIZE;
64         RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
65      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
66
67      TIME_TEST_SUPPORT.PUT_TIME(
68         "RATE_MONOTONIC_PERIOD (initial)",
69         TMTEST.END_TIME,
70         1,
71         0,
72         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
73      );
74
75      TIMER_DRIVER.INITIALIZE;
76         RTEMS.RATE_MONOTONIC_PERIOD( ID, RTEMS.PERIOD_STATUS, STATUS );
77      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
78
79      TIME_TEST_SUPPORT.PUT_TIME(
80         "RATE_MONOTONIC_PERIOD (STATUS)",
81         TMTEST.END_TIME,
82         1,
83         0,
84         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
85      );
86
87      TIMER_DRIVER.INITIALIZE;
88         RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS );
89      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
90
91      TIME_TEST_SUPPORT.PUT_TIME(
92         "RATE_MONOTONIC_CANCEL",
93         TMTEST.END_TIME,
94         1,
95         0,
96         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CANCEL
97      );
98
99      TIMER_DRIVER.INITIALIZE;
100         RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
101      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
102
103      TIME_TEST_SUPPORT.PUT_TIME(
104         "RATE_MONOTONIC_DELETE (cancelled)",
105         TMTEST.END_TIME,
106         1,
107         0,
108         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE
109      );
110
111      RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
112      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
113
114      RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
115      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_PERIOD" );
116
117      TIMER_DRIVER.INITIALIZE;
118         RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS );
119      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
120
121      TIME_TEST_SUPPORT.PUT_TIME(
122         "RATE_MONOTONIC_DELETE (active)",
123         TMTEST.END_TIME,
124         1,
125         0,
126         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE
127      );
128
129      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
130      loop
131
132         RTEMS.TASK_CREATE(
133            RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ),
134            128,
135            1024,
136            RTEMS.DEFAULT_MODES,
137            RTEMS.DEFAULT_ATTRIBUTES,
138            ID,
139            STATUS
140         );
141         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
142
143         RTEMS.TASK_START( ID, TMTEST.TASKS'ACCESS, 0, STATUS );
144         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
145
146      end loop;
147
148      RTEMS.TASK_CREATE(
149         RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
150         200,
151         2048,
152         RTEMS.DEFAULT_MODES,
153         RTEMS.DEFAULT_ATTRIBUTES,
154         ID,
155         STATUS
156      );
157      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
158
159      RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
160      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
161
162      TMTEST.TASK_COUNT := 0;
163
164      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
165      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
166
167   end INIT;
168
169--PAGE
170--
171--  TASKS
172--
173
174   procedure TASKS (
175      ARGUMENT : in     RTEMS.TASK_ARGUMENT
176   ) is
177      ID     : RTEMS.NAME;
178      STATUS : RTEMS.STATUS_CODES;
179   begin
180
181      RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS );
182      RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS );
183
184      -- Give up the processor to allow all tasks to actually
185      -- create and start their period timer before the benchmark
186      -- timer driver is initialized.
187
188      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
189
190      TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
191
192      if TMTEST.TASK_COUNT = 1 then
193         TIMER_DRIVER.INITIALIZE;
194      end if;
195
196      RTEMS.RATE_MONOTONIC_PERIOD( ID, 100, STATUS );
197
198   end TASKS;
199
200--PAGE
201--
202--  LOW_TASK
203--
204
205   procedure LOW_TASK (
206      ARGUMENT : in     RTEMS.TASK_ARGUMENT
207   ) is
208      INDEX    : RTEMS.UNSIGNED32;
209      OVERHEAD : RTEMS.UNSIGNED32;
210      STATUS   : RTEMS.STATUS_CODES;
211   begin
212
213      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
214
215      TIMER_DRIVER.INITIALIZE;
216         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
217         loop
218            TIMER_DRIVER.EMPTY_FUNCTION;
219         end loop;
220      OVERHEAD := TIMER_DRIVER.READ_TIMER;
221
222      TIME_TEST_SUPPORT.PUT_TIME(
223         "RATE_MONOTONIC_PERIOD (blocking)",
224         TMTEST.END_TIME,
225         TIME_TEST_SUPPORT.OPERATION_COUNT,
226         OVERHEAD,
227         RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD
228      );
229   
230      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
231
232   end LOW_TASK;
233
234end TMTEST;
Note: See TracBrowser for help on using the repository browser.