source: rtems/testsuites/ada/tmtests/tm12/tmtest.adb

Last change on this file was 37426ca, checked in by Joel Sherrill <joel@…>, on 04/06/22 at 21:33:54

testsuites/ada/tmtests/tm1*: Change license to BSD-2

Updates #3053.

  • Property mode set to 100644
File size: 5.8 KB
Line 
1-- SPDX-License-Identifier: BSD-2-Clause
2
3--
4--  TMTEST / BODY
5--
6--  DESCRIPTION:
7--
8--  This package is the implementation of Test 12 of the RTEMS
9--  Timing Test Suite.
10--
11--  DEPENDENCIES:
12--
13-- 
14--
15--  COPYRIGHT (c) 1989-2011.
16--  On-Line Applications Research Corporation (OAR).
17--
18--  Redistribution and use in source and binary forms, with or without
19--  modification, are permitted provided that the following conditions
20--  are met:
21--  1. Redistributions of source code must retain the above copyright
22--     notice, this list of conditions and the following disclaimer.
23--  2. Redistributions in binary form must reproduce the above copyright
24--     notice, this list of conditions and the following disclaimer in the
25--     documentation and/or other materials provided with the distribution.
26--
27--  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28--  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29--  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30--  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31--  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32--  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33--  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34--  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35--  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36--  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37--  POSSIBILITY OF SUCH DAMAGE.
38--
39
40with INTERFACES; use INTERFACES;
41with RTEMS_CALLING_OVERHEAD;
42with TEST_SUPPORT;
43with TEXT_IO;
44with TIME_TEST_SUPPORT;
45with TIMER_DRIVER;
46with RTEMS.MESSAGE_QUEUE;
47
48package body TMTEST is
49
50--
51--  INIT
52--
53
54   procedure INIT (
55      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
56   ) is
57      pragma Unreferenced(ARGUMENT);
58      TASK_ID : RTEMS.ID;
59      STATUS  : RTEMS.STATUS_CODES;
60   begin
61
62      TEXT_IO.NEW_LINE( 2 );
63      TEST_SUPPORT.ADA_TEST_BEGIN;
64
65      RTEMS.TASKS.CREATE(
66         1,
67         251,
68         1024,
69         RTEMS.DEFAULT_MODES,
70         RTEMS.DEFAULT_ATTRIBUTES,
71         TASK_ID,
72         STATUS
73      );
74      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
75
76      RTEMS.TASKS.START(
77         TASK_ID,
78         TMTEST.TEST_INIT'ACCESS,
79         0,
80         STATUS
81      );
82      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
83
84      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
85      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
86
87   end INIT;
88
89--
90--  TEST_INIT
91--
92
93   procedure TEST_INIT (
94      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
95   ) is
96      pragma Unreferenced(ARGUMENT);
97      TASK_ENTRY     : RTEMS.TASKS.ENTRY_POINT;
98      PRIORITY       : RTEMS.TASKS.PRIORITY;
99      TASK_ID        : RTEMS.ID;
100      STATUS         : RTEMS.STATUS_CODES;
101   begin
102
103      RTEMS.MESSAGE_QUEUE.CREATE(
104         RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ),
105         TIME_TEST_SUPPORT.OPERATION_COUNT,
106         16,
107         RTEMS.DEFAULT_OPTIONS,
108         TMTEST.QUEUE_ID,
109         STATUS
110      );
111      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
112
113      PRIORITY := 250;
114
115      for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1
116      loop
117
118         RTEMS.TASKS.CREATE(
119            RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ),
120            PRIORITY,
121            1024,
122            RTEMS.DEFAULT_MODES,
123            RTEMS.DEFAULT_ATTRIBUTES,
124            TASK_ID,
125            STATUS
126         );
127         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
128
129         PRIORITY := PRIORITY - 1;
130
131         if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then
132            TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS;
133         else
134            TASK_ENTRY := TMTEST.LOW_TASKS'ACCESS;
135         end if;
136
137         RTEMS.TASKS.START( TASK_ID, TASK_ENTRY, 0, STATUS );
138         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
139
140      end loop;
141
142   end TEST_INIT;
143
144--
145--  HIGH_TASK
146--
147
148   procedure HIGH_TASK (
149      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
150   ) is
151      pragma Unreferenced(ARGUMENT);
152      BUFFER         : TMTEST.BUFFER;
153      BUFFER_POINTER : RTEMS.ADDRESS;
154      OVERHEAD       : RTEMS.UNSIGNED32;
155      STATUS         : RTEMS.STATUS_CODES;
156   begin
157
158      BUFFER_POINTER := BUFFER'ADDRESS;
159
160      TIMER_DRIVER.INITIALIZE;
161         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
162         loop
163            TIMER_DRIVER.EMPTY_FUNCTION;
164         end loop;
165      OVERHEAD := TIMER_DRIVER.READ_TIMER;
166
167      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
168      loop
169     
170         RTEMS.MESSAGE_QUEUE.SEND(
171            TMTEST.QUEUE_ID,
172            BUFFER_POINTER,
173            16,
174            STATUS
175         );
176         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); --XXX
177
178      end loop;
179
180      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
181
182      TIME_TEST_SUPPORT.PUT_TIME(
183         "MESSAGE_QUEUE_SEND (readying)",
184         TMTEST.END_TIME,
185         TIME_TEST_SUPPORT.OPERATION_COUNT,
186         OVERHEAD,
187         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
188      );
189
190      TEST_SUPPORT.ADA_TEST_END;
191      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
192
193   end HIGH_TASK;
194
195--
196--  LOW_TASK
197--
198
199   procedure LOW_TASKS (
200      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
201   ) is
202      pragma Unreferenced(ARGUMENT);
203      BUFFER         : TMTEST.BUFFER;
204      BUFFER_POINTER : RTEMS.ADDRESS;
205      MESSAGE_SIZE   : RTEMS.Size := 0;
206      STATUS         : RTEMS.STATUS_CODES;
207   begin
208 
209      BUFFER_POINTER := BUFFER'ADDRESS;
210
211      RTEMS.MESSAGE_QUEUE.RECEIVE(
212         TMTEST.QUEUE_ID,
213         BUFFER_POINTER,
214         RTEMS.DEFAULT_OPTIONS,
215         RTEMS.NO_TIMEOUT,
216         MESSAGE_SIZE,
217         STATUS
218      );
219      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" ); --XXX
220 
221   end LOW_TASKS;
222
223end TMTEST;
Note: See TracBrowser for help on using the repository browser.