source:
rtems/c/src/tests/tmtests/tm29/task1.c
@
95a81ab
Last change on this file since 95a81ab was 95a81ab, checked in by Joel Sherrill <joel.sherrill@…>, on 09/04/03 at 18:53:55 | |
---|---|
|
|
File size: 4.3 KB |
Line | |
---|---|
1 | /* |
2 | * |
3 | * COPYRIGHT (c) 1989-1999. |
4 | * On-Line Applications Research Corporation (OAR). |
5 | * |
6 | * The license and distribution terms for this file may be |
7 | * found in the file LICENSE in this distribution or at |
8 | * http://www.rtems.com/license/LICENSE. |
9 | * |
10 | * $Id$ |
11 | */ |
12 | |
13 | #define TEST_INIT |
14 | #include "system.h" |
15 | |
16 | rtems_name Period_name; |
17 | |
18 | rtems_task Tasks( |
19 | rtems_task_argument argument |
20 | ); |
21 | |
22 | rtems_task Low_task( |
23 | rtems_task_argument argument |
24 | ); |
25 | |
26 | rtems_unsigned32 Task_count; |
27 | |
28 | rtems_task Init( |
29 | rtems_task_argument argument |
30 | ) |
31 | { |
32 | rtems_id id; |
33 | rtems_unsigned32 index; |
34 | rtems_status_code status; |
35 | |
36 | Print_Warning(); |
37 | |
38 | puts( "\n\n*** TIME TEST 29 ***" ); |
39 | |
40 | Period_name = rtems_build_name( 'P', 'R', 'D', ' ' ); |
41 | |
42 | Timer_initialize(); |
43 | (void) rtems_rate_monotonic_create( Period_name, &id ); |
44 | end_time = Read_timer(); |
45 | |
46 | put_time( |
47 | "rtems_rate_monotonic_create", |
48 | end_time, |
49 | 1, |
50 | 0, |
51 | CALLING_OVERHEAD_RATE_MONOTONIC_CREATE |
52 | ); |
53 | |
54 | Timer_initialize(); |
55 | (void) rtems_rate_monotonic_period( id, 10 ); |
56 | end_time = Read_timer(); |
57 | |
58 | put_time( |
59 | "rtems_rate_monotonic_period: initiate period -- returns to caller", |
60 | end_time, |
61 | 1, |
62 | 0, |
63 | CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD |
64 | ); |
65 | |
66 | Timer_initialize(); |
67 | (void) rtems_rate_monotonic_period( id, RTEMS_PERIOD_STATUS ); |
68 | end_time = Read_timer(); |
69 | |
70 | put_time( |
71 | "rtems_rate_monotonic_period: obtain status", |
72 | end_time, |
73 | 1, |
74 | 0, |
75 | CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD |
76 | ); |
77 | |
78 | Timer_initialize(); |
79 | (void) rtems_rate_monotonic_cancel( id ); |
80 | end_time = Read_timer(); |
81 | |
82 | put_time( |
83 | "rtems_rate_monotonic_cancel", |
84 | end_time, |
85 | 1, |
86 | 0, |
87 | CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL |
88 | ); |
89 | |
90 | Timer_initialize(); |
91 | (void) rtems_rate_monotonic_delete( id ); |
92 | end_time = Read_timer(); |
93 | |
94 | put_time( |
95 | "rtems_rate_monotonic_delete: inactive", |
96 | end_time, |
97 | 1, |
98 | 0, |
99 | CALLING_OVERHEAD_RATE_MONOTONIC_DELETE |
100 | ); |
101 | |
102 | status = rtems_rate_monotonic_create( Period_name, &id ); |
103 | directive_failed( status, "rtems_rate_monotonic_create" ); |
104 | |
105 | status = rtems_rate_monotonic_period( id, 10 ); |
106 | directive_failed( status, "rtems_rate_monotonic_period" ); |
107 | |
108 | Timer_initialize(); |
109 | rtems_rate_monotonic_delete( id ); |
110 | end_time = Read_timer(); |
111 | |
112 | put_time( |
113 | "rtems_rate_monotonic_delete: active", |
114 | end_time, |
115 | 1, |
116 | 0, |
117 | CALLING_OVERHEAD_RATE_MONOTONIC_DELETE |
118 | ); |
119 | |
120 | for ( index=1 ; index <= OPERATION_COUNT ; index++ ) { |
121 | status = rtems_task_create( |
122 | rtems_build_name( 'T', 'E', 'S', 'T' ), |
123 | 128, |
124 | RTEMS_MINIMUM_STACK_SIZE, |
125 | RTEMS_DEFAULT_MODES, |
126 | RTEMS_DEFAULT_ATTRIBUTES, |
127 | &id |
128 | ); |
129 | directive_failed( status, "rtems_task_create LOOP" ); |
130 | |
131 | status = rtems_task_start( id, Tasks, 0 ); |
132 | directive_failed( status, "rtems_task_start LOOP" ); |
133 | } |
134 | |
135 | status = rtems_task_create( |
136 | rtems_build_name( 'L', 'O', 'W', ' ' ), |
137 | 200, |
138 | RTEMS_MINIMUM_STACK_SIZE, |
139 | RTEMS_DEFAULT_MODES, |
140 | RTEMS_DEFAULT_ATTRIBUTES, |
141 | &id |
142 | ); |
143 | directive_failed( status, "rtems_task_create LOW" ); |
144 | |
145 | status = rtems_task_start( id, Low_task, 0 ); |
146 | directive_failed( status, "rtems_task_start LOW" ); |
147 | |
148 | Task_count = 0; |
149 | |
150 | status = rtems_task_delete( RTEMS_SELF ); |
151 | directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); |
152 | } |
153 | |
154 | rtems_task Tasks( |
155 | rtems_task_argument argument |
156 | ) |
157 | { |
158 | rtems_id id; |
159 | rtems_status_code status; |
160 | |
161 | status = rtems_rate_monotonic_create( 1, &id ); |
162 | directive_failed( status, "rtems_rate_monotonic_create" ); |
163 | |
164 | status = rtems_rate_monotonic_period( id, 100 ); |
165 | directive_failed( status, "rtems_rate_monotonic_period" ); |
166 | |
167 | /* |
168 | * Give up the processor to allow all tasks to actually |
169 | * create and start their period timer before the benchmark |
170 | * timer is initialized. |
171 | */ |
172 | |
173 | (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); |
174 | |
175 | Task_count++; |
176 | |
177 | if ( Task_count == 1 ) |
178 | Timer_initialize(); |
179 | |
180 | (void) rtems_rate_monotonic_period( id, 100 ); |
181 | } |
182 | |
183 | rtems_task Low_task( |
184 | rtems_task_argument argument |
185 | ) |
186 | { |
187 | rtems_unsigned32 index; |
188 | |
189 | end_time = Read_timer(); |
190 | |
191 | Timer_initialize(); |
192 | for ( index=1 ; index <= OPERATION_COUNT ; index++ ) |
193 | (void) Empty_function(); |
194 | overhead = Read_timer(); |
195 | |
196 | put_time( |
197 | "rtems_rate_monotonic_period: conclude periods -- caller blocks", |
198 | end_time, |
199 | OPERATION_COUNT, |
200 | overhead, |
201 | CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD |
202 | ); |
203 | |
204 | puts( "*** END OF TEST 29 ***" ); |
205 | rtems_test_exit( 0 ); |
206 | } |
Note: See TracBrowser
for help on using the repository browser.