source: rtems/c/src/ada-tests/samples/ticker/sptest.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: 3.9 KB
Line 
1--
2--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 1 of the RTEMS
7--  Single Processor 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 TEST_SUPPORT;
23with TEXT_IO;
24with RTEMS.CLOCK;
25
26package body SPTEST is
27
28--
29--  INIT
30--
31
32   procedure INIT (
33      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
34   ) is
35      pragma Unreferenced(ARGUMENT);
36      TIME   : RTEMS.TIME_OF_DAY;
37      STATUS : RTEMS.STATUS_CODES;
38   begin
39
40      TEXT_IO.NEW_LINE( 2 );
41      TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
42
43      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
44
45      RTEMS.CLOCK.SET( TIME, STATUS );
46      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
47
48      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
49      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
50      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
51
52      RTEMS.TASKS.CREATE(
53         SPTEST.TASK_NAME( 1 ),
54         1,
55         2048,
56         RTEMS.DEFAULT_MODES,
57         RTEMS.DEFAULT_ATTRIBUTES,
58         SPTEST.TASK_ID( 1 ),
59         STATUS
60      );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
62
63      RTEMS.TASKS.CREATE(
64         SPTEST.TASK_NAME( 2 ),
65         1,
66         2048,
67         RTEMS.DEFAULT_MODES,
68         RTEMS.DEFAULT_ATTRIBUTES,
69         SPTEST.TASK_ID( 2 ),
70         STATUS
71      );
72      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
73
74      RTEMS.TASKS.CREATE(
75         SPTEST.TASK_NAME( 3 ),
76         1,
77         2048,
78         RTEMS.DEFAULT_MODES,
79         RTEMS.DEFAULT_ATTRIBUTES,
80         SPTEST.TASK_ID( 3 ),
81         STATUS
82      );
83      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
84
85      RTEMS.TASKS.START(
86         SPTEST.TASK_ID( 1 ),
87         SPTEST.TASK_1_THROUGH_3'ACCESS,
88         0,
89         STATUS
90      );
91      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
92
93      RTEMS.TASKS.START(
94         SPTEST.TASK_ID( 2 ),
95         SPTEST.TASK_1_THROUGH_3'ACCESS,
96         0,
97         STATUS
98      );
99      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
100
101      RTEMS.TASKS.START(
102         SPTEST.TASK_ID( 3 ),
103         SPTEST.TASK_1_THROUGH_3'ACCESS,
104         0,
105         STATUS
106      );
107      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
108
109      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
110      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
111
112   end INIT;
113
114--
115--  TASK_1_THROUGH_3
116--
117
118   procedure TASK_1_THROUGH_3 (
119      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
120   ) is
121      pragma Unreferenced(ARGUMENT);
122      TID    : RTEMS.ID;
123      TIME   : RTEMS.TIME_OF_DAY;
124      STATUS : RTEMS.STATUS_CODES;
125   begin
126
127      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
128      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
129   
130      loop
131
132         RTEMS.CLOCK.GET( RTEMS.CLOCK.GET_TOD, TIME'ADDRESS, STATUS );
133         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
134
135         if TIME.SECOND >= 35 then
136            TEXT_IO.PUT_LINE( "*** END OF CLOCK TICK TEST ***" );
137            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
138         end if;
139
140         TEST_SUPPORT.PUT_NAME(
141            SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
142            FALSE
143         );
144
145         TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
146         TEXT_IO.NEW_LINE;
147
148         RTEMS.TASKS.WAKE_AFTER(
149            TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
150              TEST_SUPPORT.TICKS_PER_SECOND,
151            STATUS
152         );
153         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
154         
155      end loop;
156   
157   end TASK_1_THROUGH_3;
158
159end SPTEST;
Note: See TracBrowser for help on using the repository browser.