source: rtems/testsuites/tmtests/tm19/task1.c @ e58e29fd

5
Last change on this file since e58e29fd was e58e29fd, checked in by Sebastian Huber <sebastian.huber@…>, on 11/24/17 at 06:58:55

Remove coverhd.h

This header file contained timing overhead values which are hard to
maintain.

Update #3254.

  • Property mode set to 100644
File size: 4.2 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2013.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.org/license/LICENSE.
8 */
9
10#ifdef HAVE_CONFIG_H
11#include "config.h"
12#endif
13
14#define CONFIGURE_INIT
15#include "system.h"
16
17const char rtems_test_name[] = "TIME TEST 19";
18
19rtems_asr Process_asr_for_pass_1(
20  rtems_signal_set signals
21);
22
23rtems_asr Process_asr_for_pass_2(
24  rtems_signal_set signals
25);
26
27rtems_task Task_1(
28  rtems_task_argument argument
29);
30
31rtems_task Task_2(
32  rtems_task_argument argument
33);
34
35rtems_task Task_3(
36  rtems_task_argument argument
37);
38
39rtems_task Init(
40  rtems_task_argument argument
41)
42{
43  rtems_status_code status;
44
45  Print_Warning();
46
47  TEST_BEGIN();
48
49  status = rtems_task_create(
50    rtems_build_name( 'T', 'I', 'M', 'E' ),
51    (RTEMS_MAXIMUM_PRIORITY / 2u) + 1u,
52    RTEMS_MINIMUM_STACK_SIZE,
53    RTEMS_DEFAULT_MODES,
54    RTEMS_DEFAULT_ATTRIBUTES,
55    &Task_id[ 1 ]
56  );
57  directive_failed( status, "rtems_task_create of TASK1" );
58
59  status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
60  directive_failed( status, "rtems_task_start of TASK1" );
61
62  status = rtems_task_create(
63    rtems_build_name( 'T', 'I', 'M', 'E' ),
64    (RTEMS_MAXIMUM_PRIORITY / 2),
65    RTEMS_MINIMUM_STACK_SIZE,
66    RTEMS_DEFAULT_MODES,
67    RTEMS_DEFAULT_ATTRIBUTES,
68    &Task_id[ 2 ]
69  );
70  directive_failed( status, "rtems_task_create of TASK2" );
71
72  status = rtems_task_start( Task_id[ 2 ], Task_2, 0 );
73  directive_failed( status, "rtems_task_start of TASK2" );
74
75  status = rtems_task_create(
76    rtems_build_name( 'T', 'I', 'M', 'E' ),
77    (RTEMS_MAXIMUM_PRIORITY / 2u) - 1u,
78    RTEMS_MINIMUM_STACK_SIZE,
79    RTEMS_DEFAULT_MODES,
80    RTEMS_DEFAULT_ATTRIBUTES,
81    &Task_id[ 3 ]
82  );
83  directive_failed( status, "rtems_task_create of TASK3" );
84
85  status = rtems_task_start( Task_id[ 3 ], Task_3, 0 );
86  directive_failed( status, "rtems_task_start of TASK3" );
87
88  status = rtems_task_delete( RTEMS_SELF );
89  directive_failed( status, "rtems_task_delete of RTEMS_SELF" );
90}
91
92rtems_asr Process_asr_for_pass_1(
93  rtems_signal_set signals
94)
95{
96  end_time = benchmark_timer_read();
97
98  put_time(
99    "rtems_signal_send: signal to self",
100    end_time,
101    1,
102    0,
103    0
104  );
105
106  benchmark_timer_initialize();
107}
108
109rtems_asr Process_asr_for_pass_2(
110  rtems_signal_set signals
111)
112{
113  rtems_status_code status;
114
115  status = rtems_task_resume( Task_id[ 3 ] );
116  directive_failed( status, "rtems_task_resume" );
117
118  benchmark_timer_initialize();
119}
120
121rtems_task Task_1(
122  rtems_task_argument argument
123)
124{
125  rtems_status_code status;
126
127  benchmark_timer_initialize();
128    (void) rtems_signal_catch( Process_asr_for_pass_1, RTEMS_DEFAULT_MODES );
129  end_time = benchmark_timer_read();
130
131  put_time(
132    "rtems_signal_catch: only case",
133    end_time,
134    1,
135    0,
136    0
137  );
138
139  benchmark_timer_initialize();
140    rtems_signal_send( Task_id[ 2 ], 1 );
141  end_time = benchmark_timer_read();
142
143  put_time(
144    "rtems_signal_send: returns to caller",
145    end_time,
146    1,
147    0,
148    0
149  );
150
151  benchmark_timer_initialize();
152    (void) rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 );
153
154  /* end time is done is RTEMS_ASR */
155
156  end_time = benchmark_timer_read();
157
158  put_time(
159    "rtems_signal: exit ASR overhead returns to calling task",
160    end_time,
161    1,
162    0,
163    0
164  );
165
166  status = rtems_signal_catch( Process_asr_for_pass_2, RTEMS_NO_PREEMPT );
167  directive_failed( status, "rtems_signal_catch" );
168
169  benchmark_timer_initialize();
170    (void) rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 );
171}
172
173/* avoid warnings for no prototype */
174rtems_asr Process_asr_for_task_2(
175  rtems_signal_set signals
176);
177
178rtems_asr Process_asr_for_task_2(
179  rtems_signal_set signals
180)
181{
182  ;
183}
184
185rtems_task Task_2(
186  rtems_task_argument argument
187)
188{
189  rtems_status_code status;
190
191  status = rtems_signal_catch( Process_asr_for_task_2, RTEMS_DEFAULT_MODES );
192  directive_failed( status, "rtems_signal_catch" );
193
194  (void) rtems_task_suspend( RTEMS_SELF );
195}
196
197rtems_task Task_3(
198  rtems_task_argument argument
199)
200{
201  (void) rtems_task_suspend( RTEMS_SELF );
202
203  end_time = benchmark_timer_read();
204
205  put_time(
206    "rtems_signal: exit ASR overhead returns to preempting task",
207    end_time,
208    1,
209    0,
210    0
211  );
212
213  TEST_END();
214  rtems_test_exit( 0 );
215}
Note: See TracBrowser for help on using the repository browser.