|
0
|
1 //=========================================================================== |
|
|
2 // |
|
|
3 // test8.c |
|
|
4 // |
|
|
5 // uITRON "C" test program eight |
|
|
6 // |
|
|
7 //=========================================================================== |
|
|
8 //####COPYRIGHTBEGIN#### |
|
|
9 // |
|
|
10 // ------------------------------------------- |
|
|
11 // The contents of this file are subject to the Cygnus eCos Public License |
|
|
12 // Version 1.0 (the "License"); you may not use this file except in |
|
|
13 // compliance with the License. You may obtain a copy of the License at |
|
|
14 // http://sourceware.cygnus.com/ecos |
|
|
15 // |
|
|
16 // Software distributed under the License is distributed on an "AS IS" |
|
|
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
|
18 // License for the specific language governing rights and limitations under |
|
|
19 // the License. |
|
|
20 // |
|
|
21 // The Original Code is eCos - Embedded Cygnus Operating System, released |
|
|
22 // September 30, 1998. |
|
|
23 // |
|
|
24 // The Initial Developer of the Original Code is Cygnus. Portions created |
|
2
|
25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. |
|
0
|
26 // ------------------------------------------- |
|
|
27 // |
|
|
28 //####COPYRIGHTEND#### |
|
|
29 //=========================================================================== |
|
|
30 //#####DESCRIPTIONBEGIN#### |
|
|
31 // |
|
|
32 // Author(s): hmt |
|
|
33 // Contributors: hmt |
|
|
34 // Date: 1998-10-12 |
|
|
35 // Purpose: uITRON API testing |
|
|
36 // Description: |
|
|
37 // |
|
|
38 //####DESCRIPTIONEND#### |
|
|
39 // |
|
|
40 //=========================================================================== |
|
|
41 |
|
|
42 #include <pkgconf/uitron.h> // uITRON setup CYGNUM_UITRON_SEMAS |
|
|
43 // CYGPKG_UITRON et al |
|
|
44 #include <cyg/infra/testcase.h> // testing infrastructure |
|
|
45 |
|
|
46 #ifdef CYGPKG_UITRON // we DO want the uITRON package |
|
|
47 |
|
|
48 #ifdef CYGSEM_KERNEL_SCHED_MLQUEUE // we DO want prioritized threads |
|
|
49 |
|
|
50 #ifdef CYGFUN_KERNEL_THREADS_TIMER // we DO want timout-able calls |
|
|
51 |
|
|
52 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK // we DO want the realtime clock |
|
|
53 |
|
|
54 // we're OK if it's C++ or neither of those two is defined: |
|
|
55 #if defined( __cplusplus ) || \ |
|
|
56 (!defined( CYGIMP_UITRON_INLINE_FUNCS ) && \ |
|
|
57 !defined( CYGIMP_UITRON_CPP_OUTLINE_FUNCS) ) |
|
|
58 |
|
|
59 // =================== TEST CONFIGURATION =================== |
|
|
60 #if \ |
|
|
61 /* test configuration for enough tasks */ \ |
|
|
62 (CYGNUM_UITRON_TASKS >= 4) && \ |
|
|
63 (CYGNUM_UITRON_TASKS < 90) && \ |
|
|
64 (CYGNUM_UITRON_START_TASKS == 1) && \ |
|
|
65 ( !defined(CYGPKG_UITRON_TASKS_CREATE_DELETE) || \ |
|
|
66 CYGNUM_UITRON_TASKS_INITIALLY >= 4 ) && \ |
|
|
67 \ |
|
|
68 /* test configuration for enough semaphores */ \ |
|
|
69 defined( CYGPKG_UITRON_SEMAS ) && \ |
|
|
70 (CYGNUM_UITRON_SEMAS >= 3) && \ |
|
|
71 (CYGNUM_UITRON_SEMAS < 90) && \ |
|
|
72 ( !defined(CYGPKG_UITRON_SEMAS_CREATE_DELETE) || \ |
|
|
73 CYGNUM_UITRON_SEMAS_INITIALLY >= 3 ) && \ |
|
|
74 \ |
|
|
75 /* the end of the large #if statement */ \ |
|
|
76 1 |
|
|
77 |
|
|
78 // ============================ END ============================ |
|
|
79 |
|
|
80 |
|
|
81 |
|
|
82 #include <cyg/compat/uitron/uit_func.h> // uITRON |
|
|
83 |
|
|
84 externC void |
|
|
85 cyg_package_start( void ) |
|
|
86 { |
|
|
87 CYG_TEST_INIT(); |
|
|
88 CYG_TEST_INFO( "Calling cyg_uitron_start()" ); |
|
|
89 cyg_uitron_start(); |
|
|
90 } |
|
|
91 |
|
|
92 volatile int intercount = 0; |
|
|
93 INT scratch; |
|
|
94 |
|
|
95 void newtask( unsigned int arg ); |
|
|
96 void task2( unsigned int arg ); |
|
|
97 void task3( unsigned int arg ); |
|
|
98 void task4( unsigned int arg ); |
|
|
99 |
|
|
100 T_CTSK t_ctsk = { NULL, 0, (FP)&newtask, 1, CYGNUM_UITRON_STACK_SIZE }; |
|
|
101 T_RTSK t_rtsk; |
|
|
102 |
|
|
103 void task1( unsigned int arg ) |
|
|
104 { |
|
|
105 ER ercd; |
|
|
106 |
|
|
107 CYG_TEST_INFO( "Task 1 running" ); |
|
|
108 |
|
|
109 // change us to prio 3 for flexibility |
|
|
110 ercd = chg_pri( 0, 3 ); |
|
|
111 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" ); |
|
|
112 |
|
|
113 #ifdef CYGPKG_UITRON_TASKS_CREATE_DELETE |
|
|
114 // first, check that we can delete a task: |
|
|
115 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS |
|
|
116 ercd = del_tsk( -6 ); |
|
|
117 CYG_TEST_CHECK( E_ID == ercd, "del_tsk bad ercd !E_ID" ); |
|
|
118 ercd = del_tsk( 99 ); |
|
|
119 CYG_TEST_CHECK( E_ID == ercd, "del_tsk bad ercd !E_ID" ); |
|
|
120 ercd = cre_tsk( -6, &t_ctsk ); |
|
|
121 CYG_TEST_CHECK( E_ID == ercd, "cre_tsk bad ercd !E_ID" ); |
|
|
122 ercd = cre_tsk( 99, &t_ctsk ); |
|
|
123 CYG_TEST_CHECK( E_ID == ercd, "cre_tsk bad ercd !E_ID" ); |
|
|
124 #endif // we can test bad param error returns |
|
|
125 // try a pre-existing object |
|
|
126 ercd = cre_tsk( 2, &t_ctsk ); |
|
|
127 CYG_TEST_CHECK( E_OBJ == ercd, "cre_tsk bad ercd !E_OBJ" ); |
|
|
128 // try a pre-existing object - ourselves! |
|
|
129 ercd = cre_tsk( 1, &t_ctsk ); |
|
|
130 CYG_TEST_CHECK( E_OBJ == ercd, "cre_tsk bad ercd !E_OBJ" ); |
|
|
131 // try deleting an active task |
|
|
132 ercd = dis_dsp(); |
|
|
133 CYG_TEST_CHECK( E_OK == ercd, "dis_dsp bad ercd" ); |
|
|
134 ercd = sta_tsk( 2, 22222 ); |
|
|
135 CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" ); |
|
|
136 ercd = chg_pri( 2, 5 ); |
|
|
137 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" ); |
|
|
138 ercd = ena_dsp(); |
|
|
139 CYG_TEST_CHECK( E_OK == ercd, "ena_dsp bad ercd" ); |
|
|
140 // Task 2 is now ready-to-run, lower prio than us |
|
|
141 ercd = del_tsk( 2 ); |
|
|
142 CYG_TEST_CHECK( E_OBJ == ercd, "del_tsk bad ercd !E_OBJ" ); |
|
|
143 ercd = dly_tsk( 10 ); |
|
|
144 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" ); |
|
|
145 // Task 2 is now sleeping |
|
|
146 CYG_TEST_CHECK( 1 == intercount, "bad intercount !1" ); |
|
|
147 ercd = del_tsk( 2 ); |
|
|
148 CYG_TEST_CHECK( E_OBJ == ercd, "del_tsk bad ercd !E_OBJ" ); |
|
|
149 // try deleting a running task - ourselves! |
|
|
150 ercd = del_tsk( 1 ); |
|
|
151 CYG_TEST_CHECK( E_OBJ == ercd, "del_tsk bad ercd !E_OBJ" ); |
|
|
152 // terminate task 2; should then be OK to delete it |
|
|
153 ercd = ter_tsk( 2 ); |
|
|
154 CYG_TEST_CHECK( E_OK == ercd, "ter_tsk bad ercd" ); |
|
|
155 CYG_TEST_CHECK( 1 == intercount, "bad intercount !1" ); |
|
|
156 ercd = del_tsk( 2 ); |
|
|
157 CYG_TEST_CHECK( E_OK == ercd, "del_tsk bad ercd" ); |
|
|
158 CYG_TEST_CHECK( 1 == intercount, "bad intercount !1" ); |
|
|
159 // and check it is deleted |
|
|
160 ercd = sta_tsk( 2, 99 ); |
|
|
161 CYG_TEST_CHECK( E_NOEXS == ercd, "sta_tsk bad ercd !E_NOEXS" ); |
|
|
162 ercd = ter_tsk( 2 ); |
|
|
163 CYG_TEST_CHECK( E_NOEXS == ercd, "ter_tsk bad ercd !E_NOEXS" ); |
|
|
164 ercd = chg_pri( 2, 6 ); |
|
|
165 CYG_TEST_CHECK( E_NOEXS == ercd, "chg_pri bad ercd !E_NOEXS" ); |
|
|
166 ercd = rel_wai( 2 ); |
|
|
167 CYG_TEST_CHECK( E_NOEXS == ercd, "rel_wai bad ercd !E_NOEXS" ); |
|
|
168 ercd = sus_tsk( 2 ); |
|
|
169 CYG_TEST_CHECK( E_NOEXS == ercd, "sus_tsk bad ercd !E_NOEXS" ); |
|
|
170 ercd = rsm_tsk( 2 ); |
|
|
171 CYG_TEST_CHECK( E_NOEXS == ercd, "rsm_tsk bad ercd !E_NOEXS" ); |
|
|
172 ercd = frsm_tsk( 2 ); |
|
|
173 CYG_TEST_CHECK( E_NOEXS == ercd, "frsm_tsk bad ercd !E_NOEXS" ); |
|
|
174 ercd = wup_tsk( 2 ); |
|
|
175 CYG_TEST_CHECK( E_NOEXS == ercd, "wup_tsk bad ercd !E_NOEXS" ); |
|
|
176 ercd = can_wup( &scratch, 2 ); |
|
|
177 CYG_TEST_CHECK( E_NOEXS == ercd, "can_wup bad ercd !E_NOEXS" ); |
|
|
178 ercd = ref_tsk( &t_rtsk, 2 ); |
|
|
179 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_tsk bad ercd !E_NOEXS" ); |
|
|
180 ercd = del_tsk( 2 ); |
|
|
181 CYG_TEST_CHECK( E_NOEXS == ercd, "del_tsk bad ercd !E_NOEXS" ); |
|
|
182 // recreate task2, with the same function |
|
|
183 t_ctsk.task = (FP)&task2; |
|
|
184 t_ctsk.itskpri = 7; |
|
|
185 ercd = cre_tsk( 2, &t_ctsk ); |
|
|
186 CYG_TEST_CHECK( E_OK == ercd, "cre_tsk bad ercd" ); |
|
|
187 ercd = ref_tsk( &t_rtsk, 2 ); |
|
|
188 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" ); |
|
|
189 CYG_TEST_CHECK( 7 == t_rtsk.tskpri, "Bad tskpri in new task2 !7" ); |
|
|
190 CYG_TEST_CHECK( TTS_DMT == t_rtsk.tskstat, |
|
|
191 "Bad tskstat in new task2 !TTS_DMT" ); |
|
|
192 CYG_TEST_CHECK( 1 == intercount, "bad intercount !1" ); |
|
|
193 // now start the task and do the same lot again... |
|
|
194 ercd = cre_tsk( 2, &t_ctsk ); |
|
|
195 CYG_TEST_CHECK( E_OBJ == ercd, "cre_tsk bad ercd !E_OBJ" ); |
|
|
196 // try deleting an active task |
|
|
197 ercd = sta_tsk( 2, 22222 ); |
|
|
198 CYG_TEST_CHECK( E_OK == ercd, "sta_tsk bad ercd" ); |
|
|
199 // Task 2 is now ready-to-run, lower prio than us |
|
|
200 ercd = del_tsk( 2 ); |
|
|
201 CYG_TEST_CHECK( E_OBJ == ercd, "del_tsk bad ercd !E_OBJ" ); |
|
|
202 CYG_TEST_CHECK( 1 == intercount, "bad intercount !1" ); |
|
|
203 ercd = dly_tsk( 10 ); |
|
|
204 CYG_TEST_CHECK( E_OK == ercd, "dly_tsk bad ercd" ); |
|
|
205 CYG_TEST_CHECK( 2 == intercount, "bad intercount !2" ); |
|
|
206 // Task 2 is now sleeping |
|
|
207 ercd = ref_tsk( &t_rtsk, 2 ); |
|
|
208 CYG_TEST_CHECK( E_OK == ercd, "ref_tsk bad ercd" ); |
|
|
209 CYG_TEST_CHECK( 7 == t_rtsk.tskpri, "Bad tskpri in new task2 !7" ); |
|
|
210 CYG_TEST_CHECK( TTS_WAI == t_rtsk.tskstat, |
|
|
211 "Bad tskstat in new task2 !TTS_WAI" ); |
|
|
212 ercd = del_tsk( 2 ); |
|
|
213 CYG_TEST_CHECK( E_OBJ == ercd, "del_tsk bad ercd !E_OBJ" ); |
|
|
214 // up its priority |
|
|
215 ercd = chg_pri( 2, 1 ); |
|
|
216 CYG_TEST_CHECK( E_OK == ercd, "chg_pri bad ercd" ); |
|
|
217 // awaken task 2; it will then exit-and-delete itself: |
|
|
218 CYG_TEST_CHECK( 2 == intercount, "bad intercount !2" ); |
|
|
219 ercd = wup_tsk( 2 ); |
|
|
220 CYG_TEST_CHECK( E_OK == ercd, "wup_tsk bad ercd" ); |
|
|
221 CYG_TEST_CHECK( 3 == intercount, "bad intercount !3" ); |
|
|
222 // and check it is deleted |
|
|
223 ercd = sta_tsk( 2, 99 ); |
|
|
224 CYG_TEST_CHECK( E_NOEXS == ercd, "sta_tsk bad ercd !E_NOEXS" ); |
|
|
225 CYG_TEST_CHECK( 3 == intercount, "bad intercount !3" ); |
|
|
226 ercd = ter_tsk( 2 ); |
|
|
227 CYG_TEST_CHECK( E_NOEXS == ercd, "ter_tsk bad ercd !E_NOEXS" ); |
|
|
228 ercd = chg_pri( 2, 1 ); |
|
|
229 CYG_TEST_CHECK( E_NOEXS == ercd, "chg_pri bad ercd !E_NOEXS" ); |
|
|
230 ercd = rel_wai( 2 ); |
|
|
231 CYG_TEST_CHECK( E_NOEXS == ercd, "rel_wai bad ercd !E_NOEXS" ); |
|
|
232 ercd = sus_tsk( 2 ); |
|
|
233 CYG_TEST_CHECK( E_NOEXS == ercd, "sus_tsk bad ercd !E_NOEXS" ); |
|
|
234 ercd = rsm_tsk( 2 ); |
|
|
235 CYG_TEST_CHECK( E_NOEXS == ercd, "rsm_tsk bad ercd !E_NOEXS" ); |
|
|
236 ercd = frsm_tsk( 2 ); |
|
|
237 CYG_TEST_CHECK( E_NOEXS == ercd, "frsm_tsk bad ercd !E_NOEXS" ); |
|
|
238 ercd = wup_tsk( 2 ); |
|
|
239 CYG_TEST_CHECK( E_NOEXS == ercd, "wup_tsk bad ercd !E_NOEXS" ); |
|
|
240 ercd = can_wup( &scratch, 2 ); |
|
|
241 CYG_TEST_CHECK( E_NOEXS == ercd, "can_wup bad ercd !E_NOEXS" ); |
|
|
242 ercd = ref_tsk( &t_rtsk, 2 ); |
|
|
243 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_tsk bad ercd !E_NOEXS" ); |
|
|
244 CYG_TEST_CHECK( 3 == intercount, "bad intercount !3" ); |
|
|
245 ercd = del_tsk( 2 ); |
|
|
246 CYG_TEST_CHECK( E_NOEXS == ercd, "del_tsk bad ercd !E_NOEXS" ); |
|
|
247 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS |
|
|
248 // now try creating it (badly) |
|
|
249 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR |
|
|
250 ercd = cre_tsk( 2, NULL ); |
|
|
251 CYG_TEST_CHECK( E_PAR == ercd, "cre_tsk bad ercd !E_PAR" ); |
|
|
252 #endif |
|
|
253 ercd = cre_tsk( 2, NADR ); |
|
|
254 CYG_TEST_CHECK( E_PAR == ercd, "cre_tsk bad ercd !E_PAR" ); |
|
|
255 t_ctsk.stksz = 0x40000000; |
|
|
256 ercd = cre_tsk( 2, &t_ctsk ); |
|
|
257 CYG_TEST_CHECK( E_NOMEM == ercd, "cre_tsk bad ercd !E_NOMEM" ); |
|
|
258 t_ctsk.stksz = CYGNUM_UITRON_STACK_SIZE; |
|
|
259 CYG_TEST_CHECK( 3 == intercount, "bad intercount !3" ); |
|
|
260 #endif // we can test bad param error returns |
|
|
261 |
|
|
262 ercd = del_tsk( 3 ); |
|
|
263 CYG_TEST_CHECK( E_OK == ercd, "del_tsk bad ercd" ); |
|
|
264 t_ctsk.task = (FP)&task4; |
|
|
265 t_ctsk.itskpri = 9; |
|
|
266 ercd = cre_tsk( 3, &t_ctsk ); |
|
|
267 CYG_TEST_CHECK( E_OK == ercd, "cre_tsk bad ercd" ); |
|
|
268 // check we can delete it again immediately |
|
|
269 ercd = del_tsk( 3 ); |
|
|
270 CYG_TEST_CHECK( E_OK == ercd, "del_tsk bad ercd" ); |
|
|
271 ercd = ref_tsk( &t_rtsk, 3 ); |
|
|
272 CYG_TEST_CHECK( E_NOEXS == ercd, "ref_tsk bad ercd !E_NOEXS" ); |
|
|
273 t_ctsk.task = (FP)&newtask; |
|
|
274 t_ctsk.itskpri = 1; |
|
|
275 ercd = cre_tsk( 3, &t_ctsk ); |
|
|
276 CYG_TEST_CHECK( E_OK == ercd, "cre_tsk bad ercd" ); |
|
|
277 CYG_TEST_CHECK( 3 == intercount, "bad intercount !3" ); |
|
|
278 ercd = sta_tsk( 3, 999 ); |
|
|
279 CYG_TEST_CHECK( E_OK == ercd, "cre_tsk bad ercd" ); |
|
|
280 // it should have run now, and exited |
|
|
281 CYG_TEST_CHECK( 5 == intercount, "bad intercount !5" ); |
|
|
282 ercd = wai_sem( 1 ); |
|
|
283 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" ); |
|
|
284 // and check that it will just run again... |
|
|
285 ercd = sta_tsk( 3, 999 ); |
|
|
286 CYG_TEST_CHECK( E_OK == ercd, "cre_tsk bad ercd" ); |
|
|
287 // it should have run now, and exited |
|
|
288 CYG_TEST_CHECK( 7 == intercount, "bad intercount !7" ); |
|
|
289 ercd = wai_sem( 1 ); |
|
|
290 CYG_TEST_CHECK( E_OK == ercd, "wai_sem bad ercd" ); |
|
|
291 // all done. |
|
|
292 |
|
|
293 CYG_TEST_PASS("create/delete tasks"); |
|
|
294 |
|
|
295 // all done |
|
|
296 CYG_TEST_EXIT( "All done" ); |
|
|
297 #else // ! CYGPKG_UITRON_TASKS_CREATE_DELETE |
|
2
|
298 CYG_TEST_NA( "Tasks do not have create/delete enabled" ); |
|
0
|
299 #endif // ! CYGPKG_UITRON_TASKS_CREATE_DELETE |
|
|
300 ext_tsk(); |
|
|
301 } |
|
|
302 |
|
|
303 |
|
|
304 |
|
|
305 void newtask( unsigned int arg ) |
|
|
306 { |
|
|
307 ER ercd; |
|
|
308 int i; |
|
|
309 CYG_TEST_INFO( "Newtask running" ); |
|
|
310 CYG_TEST_CHECK( 999 == arg, "Bad arg to newtask() !999" ); |
|
|
311 ercd = get_tid( &i ); |
|
|
312 CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" ); |
|
|
313 CYG_TEST_CHECK( 3 == i, "tid not 3" ); |
|
|
314 intercount++; |
|
|
315 ercd = sig_sem( 1 ); |
|
|
316 CYG_TEST_CHECK( E_OK == ercd, "sig_sem bad ercd" ); |
|
|
317 intercount++; |
|
|
318 // and just return |
|
|
319 } |
|
|
320 |
|
|
321 void task2( unsigned int arg ) |
|
|
322 { |
|
|
323 ER ercd; |
|
|
324 int i; |
|
|
325 CYG_TEST_INFO( "Task 2 running" ); |
|
|
326 ercd = get_tid( &i ); |
|
|
327 CYG_TEST_CHECK( E_OK == ercd, "get_tid bad ercd" ); |
|
|
328 CYG_TEST_CHECK( 2 == i, "tid not 2" ); |
|
|
329 if ( 22222 != arg ) |
|
|
330 CYG_TEST_FAIL( "Task 2 arg not 22222" ); |
|
|
331 |
|
|
332 intercount++; |
|
|
333 |
|
|
334 ercd = slp_tsk(); |
|
|
335 CYG_TEST_CHECK( E_OK == ercd, "slp_tsk bad ercd" ); |
|
|
336 |
|
|
337 intercount++; |
|
|
338 |
|
|
339 exd_tsk(); // if we are not killed first |
|
|
340 |
|
|
341 intercount++; // shouldn't happen |
|
|
342 } |
|
|
343 |
|
|
344 void task3( unsigned int arg ) |
|
|
345 { |
|
|
346 CYG_TEST_FAIL( "How come I'm being run?" ); |
|
|
347 } |
|
|
348 |
|
|
349 void task4( unsigned int arg ) |
|
|
350 { |
|
|
351 CYG_TEST_FAIL( "How come I'm being run?" ); |
|
|
352 } |
|
|
353 |
|
|
354 #else // not enough (or too many) uITRON objects configured in |
|
|
355 #define N_A_MSG "not enough uITRON objects to run test" |
|
|
356 #endif // not enough (or too many) uITRON objects configured in |
|
|
357 #else // not C++ and some C++ specific options enabled |
|
|
358 #define N_A_MSG "C++ specific options selected but this is C" |
|
|
359 #endif // not C++ and some C++ specific options enabled |
|
|
360 #else // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it |
|
|
361 #define N_A_MSG "no CYGVAR_KERNEL_COUNTERS_CLOCK" |
|
|
362 #endif // ! CYGVAR_KERNEL_COUNTERS_CLOCK - can't test without it |
|
|
363 #else // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it |
|
|
364 #define N_A_MSG "no CYGFUN_KERNEL_THREADS_TIMER" |
|
|
365 #endif // ! CYGFUN_KERNEL_THREADS_TIMER - can't test without it |
|
|
366 #else // ! CYGIMP_THREAD_PRIORITY - can't test without it |
|
|
367 #define N_A_MSG "no CYGSEM_KERNEL_SCHED_MLQUEUE" |
|
|
368 #endif // ! CYGSEM_KERNEL_SCHED_MLQUEUE - can't test without it |
|
|
369 #else // ! CYGPKG_UITRON |
|
|
370 #define N_A_MSG "uITRON Compatibility layer disabled" |
|
|
371 #endif // CYGPKG_UITRON |
|
|
372 |
|
|
373 #ifdef N_A_MSG |
|
|
374 void |
|
|
375 cyg_start( void ) |
|
|
376 { |
|
|
377 CYG_TEST_INIT(); |
|
2
|
378 CYG_TEST_NA( N_A_MSG ); |
|
0
|
379 } |
|
|
380 #endif // N_A_MSG defined ie. we are N/A. |
|
|
381 |
|
|
382 // EOF test8.c |