source: rtems/c/src/ada-tests/tmtests/tm02/tmtest.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: 4.5 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 2 of the RTEMS
7--  Timing 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 RTEMS_CALLING_OVERHEAD;
23with TEST_SUPPORT;
24with TEXT_IO;
25with TIME_TEST_SUPPORT;
26with TIMER_DRIVER;
27with RTEMS.SEMAPHORE;
28
29package body TMTEST is
30
31--
32--  INIT
33--
34
35   procedure INIT (
36      ARGUMENT : in     RTEMS.TASKS.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 2 ***" );
44
45      TMTEST.TEST_INIT;
46
47      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
48      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
49
50   end INIT;
51
52--
53--  TEST_INIT
54--
55
56   procedure TEST_INIT is
57      PRIORITY : RTEMS.TASKS.PRIORITY;
58      HIGH_ID  : RTEMS.ID;
59      LOW_ID   : RTEMS.ID;
60      TASK_ID  : RTEMS.ID;
61      STATUS   : RTEMS.STATUS_CODES;
62   begin
63
64      PRIORITY := 5;
65
66      RTEMS.TASKS.CREATE(
67         RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
68         PRIORITY,
69         1024,
70         RTEMS.DEFAULT_MODES,
71         RTEMS.DEFAULT_ATTRIBUTES,
72         HIGH_ID,
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF HIGH TASK" );
76
77      PRIORITY := PRIORITY + 1;
78
79      RTEMS.TASKS.START(
80         HIGH_ID,
81         TMTEST.HIGH_TASK'ACCESS,
82         0,
83         STATUS
84      );
85      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF HIGH TASK" );
86
87      for INDEX in 2 .. TIME_TEST_SUPPORT.OPERATION_COUNT
88      loop
89
90         RTEMS.TASKS.CREATE(
91            RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ),
92            PRIORITY,
93            1024,
94            RTEMS.DEFAULT_MODES,
95            RTEMS.DEFAULT_ATTRIBUTES,
96            TASK_ID,
97            STATUS
98         );
99         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE MIDDLE" );
100
101         PRIORITY := PRIORITY + 1;
102
103         RTEMS.TASKS.START(
104            TASK_ID,
105            TMTEST.MIDDLE_TASKS'ACCESS,
106            0,
107            STATUS
108         );
109         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START MIDDLE" );
110
111      end loop;
112
113      RTEMS.TASKS.CREATE(
114         RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ),
115         PRIORITY,
116         2048,
117         RTEMS.DEFAULT_MODES,
118         RTEMS.DEFAULT_ATTRIBUTES,
119         LOW_ID,
120         STATUS
121      );
122      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF LOW TASK" );
123
124      RTEMS.TASKS.START( LOW_ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS );
125      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF LOW TASK" );
126
127      RTEMS.SEMAPHORE.CREATE(
128         RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ),
129         0,
130         RTEMS.DEFAULT_ATTRIBUTES,
131         RTEMS.TASKS.NO_PRIORITY,
132         TMTEST.SEMAPHORE_ID,
133         STATUS
134      );
135      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
136
137   end TEST_INIT;
138
139--
140--  HIGH_TASK
141--
142
143   procedure HIGH_TASK (
144      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
145   ) is
146      pragma Unreferenced(ARGUMENT);
147      STATUS                   : RTEMS.STATUS_CODES;
148   begin
149
150      TIMER_DRIVER.INITIALIZE;
151      RTEMS.SEMAPHORE.OBTAIN(
152         TMTEST.SEMAPHORE_ID,
153         RTEMS.DEFAULT_OPTIONS,
154         RTEMS.NO_TIMEOUT,
155         STATUS
156      );
157      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
158
159   end HIGH_TASK;
160
161--
162--  MIDDLE_TASKS
163--
164
165   procedure MIDDLE_TASKS (
166      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
167   ) is
168      pragma Unreferenced(ARGUMENT);
169      STATUS                   : RTEMS.STATUS_CODES;
170   begin
171
172      RTEMS.SEMAPHORE.OBTAIN(
173         TMTEST.SEMAPHORE_ID,
174         RTEMS.DEFAULT_OPTIONS,
175         RTEMS.NO_TIMEOUT,
176         STATUS
177      );
178      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
179
180   end MIDDLE_TASKS;
181
182--
183--  LOW_TASK
184--
185
186   procedure LOW_TASK (
187      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
188   ) is
189      pragma Unreferenced(ARGUMENT);
190   begin
191
192      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
193      TIME_TEST_SUPPORT.PUT_TIME(
194         "SEMAPHORE_OBTAIN (blocking)",
195         TMTEST.END_TIME,
196         TIME_TEST_SUPPORT.OPERATION_COUNT,
197         0,
198         RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN
199      );
200
201      TEXT_IO.PUT_LINE( "*** END OF TIME TEST 2 ***" );
202      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
203
204   end LOW_TASK;
205
206end TMTEST;
Note: See TracBrowser for help on using the repository browser.