source: rtems/testsuites/ada/tmtests/tm24/tmtest.adb @ f6c9334d

5
Last change on this file since f6c9334d was f6c9334d, checked in by Sebastian Huber <sebastian.huber@…>, on 12/01/17 at 07:51:17

ada: Add standard test begin/end message

  • Property mode set to 100644
File size: 3.8 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 24 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;
27
28package body TMTEST is
29
30--
31--  INIT
32--
33
34   procedure INIT (
35      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
36   ) is
37      pragma Unreferenced(ARGUMENT);
38      ID         : RTEMS.ID;
39      STATUS     : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEST_SUPPORT.ADA_TEST_BEGIN;
44
45      TIMER_DRIVER.INITIALIZE;
46         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
47         loop
48            TIMER_DRIVER.EMPTY_FUNCTION;
49         end loop;
50      TMTEST.OVERHEAD := TIMER_DRIVER.READ_TIMER;
51
52      RTEMS.TASKS.CREATE(
53         RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ),
54         10,
55         1024,
56         RTEMS.DEFAULT_MODES,
57         RTEMS.DEFAULT_ATTRIBUTES,
58         ID,
59         STATUS
60      );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" );
62
63      RTEMS.TASKS.START( ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" );
65
66      for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
67      loop
68
69         RTEMS.TASKS.CREATE(
70            RTEMS.BUILD_NAME( 'R', 'E', 'S', 'T' ),
71            128,
72            1024,
73            RTEMS.DEFAULT_MODES,
74            RTEMS.DEFAULT_ATTRIBUTES,
75            ID,
76            STATUS
77         );
78         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
79
80         RTEMS.TASKS.START( ID, TMTEST.TASKS'ACCESS, 0, STATUS );
81         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
82
83      end loop;
84
85      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
86      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
87
88   end INIT;
89
90--
91--  HIGH_TASK
92--
93
94   procedure HIGH_TASK (
95      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
96   ) is
97      pragma Unreferenced(ARGUMENT);
98      STATUS   : RTEMS.STATUS_CODES;
99   begin
100
101      TIMER_DRIVER.INITIALIZE;
102         for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
103         loop
104            RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
105         end loop;
106      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
107
108      TIME_TEST_SUPPORT.PUT_TIME(
109         "TASK_WAKE_AFTER (no context switch)",
110         TMTEST.END_TIME,
111         TIME_TEST_SUPPORT.OPERATION_COUNT,
112         TMTEST.OVERHEAD,
113         RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER
114      );
115
116      TMTEST.TASK_COUNT := 0;
117
118      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
119      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
120
121   end HIGH_TASK;
122
123--
124--  TASKS
125--
126
127   procedure TASKS (
128      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
129   ) is
130      pragma Unreferenced(ARGUMENT);
131      STATUS            : RTEMS.STATUS_CODES;
132   begin
133
134      TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1;
135
136      if TMTEST.TASK_COUNT = 1 then
137         
138         TIMER_DRIVER.INITIALIZE;
139
140      elsif TMTEST.TASK_COUNT = TIME_TEST_SUPPORT.OPERATION_COUNT then
141         TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
142
143         TIME_TEST_SUPPORT.PUT_TIME(
144            "TASK_WAKE_AFTER (context switch)",
145            TMTEST.END_TIME,
146            TIME_TEST_SUPPORT.OPERATION_COUNT,
147            TMTEST.OVERHEAD,
148         RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER
149         );
150
151      TEST_SUPPORT.ADA_TEST_END;
152         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
153
154      end if;
155
156      RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
157      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
158
159   end TASKS;
160
161end TMTEST;
Note: See TracBrowser for help on using the repository browser.