source: rtems/testsuites/ada/sptests/sp17/sptest.adb @ 76bd25e

5
Last change on this file since 76bd25e 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--  SPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 17 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.SIGNAL;
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      STATUS : RTEMS.STATUS_CODES;
37   begin
38
39      TEXT_IO.NEW_LINE( 2 );
40      TEST_SUPPORT.ADA_TEST_BEGIN;
41
42      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
43      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
44
45      SPTEST.TASK_2_PREEMPTED := FALSE;
46
47      RTEMS.TASKS.CREATE(
48         SPTEST.TASK_NAME( 1 ),
49         2,
50         2048,
51         RTEMS.DEFAULT_MODES,
52         RTEMS.DEFAULT_ATTRIBUTES,
53         SPTEST.TASK_ID( 1 ),
54         STATUS
55      );
56      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
57
58      RTEMS.TASKS.CREATE(
59         SPTEST.TASK_NAME( 2 ),
60         1,
61         2048,
62         RTEMS.DEFAULT_MODES,
63         RTEMS.DEFAULT_ATTRIBUTES,
64         SPTEST.TASK_ID( 2 ),
65         STATUS
66      );
67      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
68
69      RTEMS.TASKS.START(
70         SPTEST.TASK_ID( 1 ),
71         SPTEST.TASK_1'ACCESS,
72         0,
73         STATUS
74      );
75      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
76
77      RTEMS.TASKS.START(
78         SPTEST.TASK_ID( 2 ),
79         SPTEST.TASK_2'ACCESS,
80         0,
81         STATUS
82      );
83      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
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--  PROCESS_ASR
92--
93
94   procedure PROCESS_ASR (
95      SIGNALS : in     RTEMS.SIGNAL_SET
96   ) is
97      pragma Unreferenced(SIGNALS);
98      STATUS : RTEMS.STATUS_CODES;
99   begin
100
101      RTEMS.TASKS.RESUME( SPTEST.TASK_ID( 2 ), STATUS );
102      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "ASR - TASK_RESUME OF TA2" );
103
104   end PROCESS_ASR;
105
106--
107--  TASK_1
108--
109
110   procedure TASK_1 (
111      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
112   ) is
113      pragma Unreferenced(ARGUMENT);
114      STATUS : RTEMS.STATUS_CODES;
115   begin
116
117      TEXT_IO.PUT_LINE( "TA1 - signal_catch: initializing signal catcher" );
118      RTEMS.SIGNAL.CATCH(
119         SPTEST.PROCESS_ASR'ACCESS,
120         RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
121         STATUS
122      );
123      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
124
125      TEXT_IO.PUT_LINE( "TA1 - Sending signal to self" );
126      RTEMS.SIGNAL.SEND(
127         SPTEST.TASK_ID( 1 ),
128         RTEMS.SIGNAL_16,
129         STATUS
130      );
131      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
132
133      if SPTEST.TASK_2_PREEMPTED then
134         TEXT_IO.PUT_LINE( "TA1 - TA2 correctly preempted me" );
135      end if;
136
137      TEXT_IO.PUT_LINE( "TA1 - Got Back!!!" );
138     
139      TEST_SUPPORT.ADA_TEST_END;
140      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
141   
142   end TASK_1;
143
144--
145--  TASK_2
146--
147
148   procedure TASK_2 (
149      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
150   ) is
151      pragma Unreferenced(ARGUMENT);
152      STATUS : RTEMS.STATUS_CODES;
153   begin
154
155      SPTEST.TASK_2_PREEMPTED := FALSE;
156
157      TEXT_IO.PUT_LINE( "TA2 - Suspending self" );
158      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
159      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
160
161      TEXT_IO.PUT_LINE( "TA2 - signal_return preempted correctly" );
162
163      SPTEST.TASK_2_PREEMPTED := TRUE;
164
165      RTEMS.TASKS.SUSPEND( RTEMS.SELF, STATUS );
166      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
167
168   end TASK_2;
169
170end SPTEST;
Note: See TracBrowser for help on using the repository browser.