source: rtems/testsuites/smptests/smpscheduler02/init.c @ ecabd384

5
Last change on this file since ecabd384 was ecabd384, checked in by Sebastian Huber <sebastian.huber@…>, on 07/11/17 at 07:51:43

rtems: Add rtems_scheduler_ident_by_processor_set

Update #3070.

  • Property mode set to 100644
File size: 14.8 KB
Line 
1/*
2 * Copyright (c) 2014, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#include <sched.h>
20
21#include <rtems.h>
22#include <rtems/libcsupport.h>
23
24#include "tmacros.h"
25
26const char rtems_test_name[] = "SMPSCHEDULER 2";
27
28#define SCHED_A rtems_build_name(' ', ' ', ' ', 'A')
29
30#define SCHED_B rtems_build_name(' ', ' ', ' ', 'B')
31
32#define SCHED_C rtems_build_name(' ', ' ', ' ', 'C')
33
34static rtems_id main_task_id;
35
36static rtems_id cmtx_id;
37
38static rtems_id imtx_id;
39
40static volatile bool ready;
41
42static void task(rtems_task_argument arg)
43{
44  rtems_status_code sc;
45
46  (void) arg;
47
48  rtems_test_assert(rtems_get_current_processor() == 1);
49  rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
50  rtems_test_assert(sched_get_priority_max(SCHED_RR) == INT_MAX - 1);
51
52  sc = rtems_semaphore_obtain(cmtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
53  rtems_test_assert(sc == RTEMS_NOT_DEFINED);
54
55  sc = rtems_event_transient_send(main_task_id);
56  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
57
58  sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
59  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
60
61  sc = rtems_semaphore_release(imtx_id);
62  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
63
64  sc = rtems_event_transient_send(main_task_id);
65  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
66
67  while (1) {
68    /* Do nothing */
69  }
70}
71
72static void sticky_task(rtems_task_argument arg)
73{
74  rtems_status_code sc;
75  rtems_id mtx_id;
76
77  (void) arg;
78
79  rtems_test_assert(rtems_get_current_processor() == 0);
80
81  sc = rtems_semaphore_create(
82    rtems_build_name(' ', 'M', 'T', 'X'),
83    1,
84    RTEMS_BINARY_SEMAPHORE | RTEMS_MULTIPROCESSOR_RESOURCE_SHARING,
85    2,
86    &mtx_id
87  );
88  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
89
90  sc = rtems_semaphore_obtain(mtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
91  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
92
93  ready = true;
94
95  sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
96  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
97
98  sc = rtems_semaphore_release(mtx_id);
99  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
100
101  sc = rtems_semaphore_delete(mtx_id);
102  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
103
104  sc = rtems_event_transient_send(main_task_id);
105  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
106
107  while (1) {
108    /* Do nothing */
109  }
110}
111
112static void test_scheduler_add_remove_processors(void)
113{
114  rtems_status_code sc;
115  rtems_id scheduler_a_id;
116  rtems_id scheduler_c_id;
117
118  sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
119  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
120
121  sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
122  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
123
124  sc = rtems_scheduler_add_processor(scheduler_c_id, 62);
125  rtems_test_assert(sc == RTEMS_NOT_CONFIGURED);
126
127  sc = rtems_scheduler_add_processor(scheduler_c_id, 63);
128  rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
129
130  sc = rtems_scheduler_remove_processor(scheduler_c_id, 62);
131  rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
132
133  sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
134  rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
135
136  if (rtems_get_processor_count() > 1) {
137    rtems_id scheduler_id;
138    rtems_id scheduler_b_id;
139    rtems_id task_id;
140    cpu_set_t first_cpu;
141
142    sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
143    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
144
145    sc = rtems_scheduler_remove_processor(scheduler_b_id, 1);
146    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
147
148    sc = rtems_scheduler_add_processor(scheduler_a_id, 1);
149    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
150
151    rtems_test_assert(rtems_get_current_processor() == 0);
152
153    sc = rtems_scheduler_remove_processor(scheduler_a_id, 0);
154    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
155
156    rtems_test_assert(rtems_get_current_processor() == 1);
157
158    CPU_ZERO(&first_cpu);
159    CPU_SET(0, &first_cpu);
160    sc = rtems_scheduler_ident_by_processor_set(
161      sizeof(first_cpu),
162      &first_cpu,
163      &scheduler_id
164    );
165    rtems_test_assert(sc == RTEMS_INCORRECT_STATE);
166
167    sc = rtems_scheduler_add_processor(scheduler_a_id, 0);
168    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
169
170    rtems_test_assert(rtems_get_current_processor() == 1);
171
172    sc = rtems_task_create(
173      rtems_build_name('T', 'A', 'S', 'K'),
174      2,
175      RTEMS_MINIMUM_STACK_SIZE,
176      RTEMS_DEFAULT_MODES,
177      RTEMS_DEFAULT_ATTRIBUTES,
178      &task_id
179    );
180    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
181
182    sc = rtems_task_start(task_id, sticky_task, 0);
183    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
184
185    while (!ready) {
186      /* Wait */
187    }
188
189    sc = rtems_scheduler_remove_processor(scheduler_a_id, 1);
190    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
191
192    rtems_test_assert(rtems_get_current_processor() == 0);
193
194    sc = rtems_event_transient_send(task_id);
195    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
196
197    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
198    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
199
200    sc = rtems_task_delete(task_id);
201    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
202
203    sc = rtems_scheduler_add_processor(scheduler_b_id, 1);
204    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
205  }
206}
207
208static void test(void)
209{
210  rtems_status_code sc;
211  rtems_id task_id;
212  rtems_id scheduler_id;
213  rtems_id scheduler_a_id;
214  rtems_id scheduler_b_id;
215  rtems_id scheduler_c_id;
216  rtems_task_priority prio;
217  cpu_set_t cpuset;
218  cpu_set_t first_cpu;
219  cpu_set_t second_cpu;
220  cpu_set_t all_cpus;
221  cpu_set_t online_cpus;
222  uint32_t cpu_count;
223
224  cpu_count = rtems_get_processor_count();
225  rtems_test_assert(cpu_count == 1 || cpu_count == 2);
226
227  rtems_test_assert(rtems_get_current_processor() == 0);
228
229  main_task_id = rtems_task_self();
230
231  CPU_ZERO(&first_cpu);
232  CPU_SET(0, &first_cpu);
233
234  CPU_ZERO(&second_cpu);
235  CPU_SET(1, &second_cpu);
236
237  CPU_FILL(&all_cpus);
238
239  CPU_ZERO(&online_cpus);
240  CPU_SET(0, &online_cpus);
241
242  if (cpu_count > 1) {
243    CPU_SET(1, &online_cpus);
244  }
245
246  sc = rtems_scheduler_ident(SCHED_A, &scheduler_a_id);
247  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
248
249  if (cpu_count > 1) {
250    sc = rtems_scheduler_ident(SCHED_B, &scheduler_b_id);
251    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
252    rtems_test_assert(scheduler_a_id != scheduler_b_id);
253  }
254
255  sc = rtems_scheduler_ident(SCHED_C, &scheduler_c_id);
256  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
257
258  sc = rtems_semaphore_create(
259    rtems_build_name('C', 'M', 'T', 'X'),
260    1,
261    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_PRIORITY_CEILING,
262    1,
263    &cmtx_id
264  );
265  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
266
267  sc = rtems_semaphore_create(
268    rtems_build_name('I', 'M', 'T', 'X'),
269    1,
270    RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY,
271    1,
272    &imtx_id
273  );
274  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
275
276  prio = 2;
277  sc = rtems_semaphore_set_priority(cmtx_id, scheduler_a_id, prio, &prio);
278  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
279  rtems_test_assert(prio == 1);
280
281  if (cpu_count > 1) {
282    prio = 1;
283    sc = rtems_semaphore_set_priority(cmtx_id, scheduler_b_id, prio, &prio);
284    rtems_test_assert(sc == RTEMS_NOT_DEFINED);
285    rtems_test_assert(prio == 2);
286  }
287
288  CPU_ZERO(&cpuset);
289  sc = rtems_scheduler_get_processor_set(
290    scheduler_a_id,
291    sizeof(cpuset),
292    &cpuset
293  );
294  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
295  rtems_test_assert(CPU_EQUAL(&cpuset, &first_cpu));
296
297  if (cpu_count > 1) {
298    CPU_ZERO(&cpuset);
299    sc = rtems_scheduler_get_processor_set(
300      scheduler_b_id,
301      sizeof(cpuset),
302      &cpuset
303    );
304    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
305    rtems_test_assert(CPU_EQUAL(&cpuset, &second_cpu));
306  }
307
308  sc = rtems_task_create(
309    rtems_build_name('T', 'A', 'S', 'K'),
310    1,
311    RTEMS_MINIMUM_STACK_SIZE,
312    RTEMS_DEFAULT_MODES,
313    RTEMS_DEFAULT_ATTRIBUTES,
314    &task_id
315  );
316  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
317
318  sc = rtems_task_get_scheduler(task_id, &scheduler_id);
319  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
320  rtems_test_assert(scheduler_id == scheduler_a_id);
321
322  CPU_ZERO(&cpuset);
323  sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
324  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
325  rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
326
327  rtems_test_assert(sched_get_priority_min(SCHED_RR) == 1);
328  rtems_test_assert(sched_get_priority_max(SCHED_RR) == 254);
329
330  sc = rtems_task_set_scheduler(task_id, scheduler_c_id, 1);
331  rtems_test_assert(sc == RTEMS_UNSATISFIED);
332
333  sc = rtems_task_set_scheduler(task_id, scheduler_c_id + 1, 1);
334  rtems_test_assert(sc == RTEMS_INVALID_ID);
335
336  if (cpu_count > 1) {
337    sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
338    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
339
340    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
341    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
342    rtems_test_assert(scheduler_id == scheduler_b_id);
343
344    CPU_ZERO(&cpuset);
345    sc = rtems_task_get_affinity(task_id, sizeof(cpuset), &cpuset);
346    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
347    rtems_test_assert(CPU_EQUAL(&cpuset, &online_cpus));
348
349    sc = rtems_task_set_affinity(task_id, sizeof(all_cpus), &all_cpus);
350    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
351
352    sc = rtems_task_set_affinity(task_id, sizeof(first_cpu), &first_cpu);
353    rtems_test_assert(sc == RTEMS_INVALID_NUMBER);
354
355    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
356    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
357    rtems_test_assert(scheduler_id == scheduler_b_id);
358
359    sc = rtems_task_set_affinity(task_id, sizeof(online_cpus), &online_cpus);
360    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
361
362    sc = rtems_task_set_affinity(task_id, sizeof(second_cpu), &second_cpu);
363    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
364
365    sc = rtems_task_set_scheduler(task_id, scheduler_a_id, 1);
366    rtems_test_assert(sc == RTEMS_UNSATISFIED);
367
368    sc = rtems_task_get_scheduler(task_id, &scheduler_id);
369    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
370    rtems_test_assert(scheduler_id == scheduler_b_id);
371
372    sc = rtems_semaphore_obtain(imtx_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
373    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
374
375    sc = rtems_task_set_scheduler(task_id, scheduler_b_id, 1);
376    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
377
378    sc = rtems_task_start(task_id, task, 0);
379    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
380
381    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
382    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
383
384    sc = rtems_task_set_scheduler(RTEMS_SELF, scheduler_b_id, 1);
385    rtems_test_assert(sc == RTEMS_RESOURCE_IN_USE);
386
387    sc = rtems_semaphore_release(imtx_id);
388    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
389
390    sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
391    rtems_test_assert(sc == RTEMS_SUCCESSFUL);
392  }
393
394  sc = rtems_task_delete(task_id);
395  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
396
397  sc = rtems_semaphore_delete(cmtx_id);
398  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
399
400  sc = rtems_semaphore_delete(imtx_id);
401  rtems_test_assert(sc == RTEMS_SUCCESSFUL);
402
403  test_scheduler_add_remove_processors();
404}
405
406static void Init(rtems_task_argument arg)
407{
408  rtems_resource_snapshot snapshot;
409
410  TEST_BEGIN();
411
412  rtems_resource_snapshot_take(&snapshot);
413
414  test();
415
416  rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
417
418  TEST_END();
419  rtems_test_exit(0);
420}
421
422#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
423#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
424
425#define CONFIGURE_MAXIMUM_TASKS 2
426#define CONFIGURE_MAXIMUM_SEMAPHORES 2
427#define CONFIGURE_MAXIMUM_MRSP_SEMAPHORES 1
428
429/* Lets see when the first RTEMS system hits this limit */
430#define CONFIGURE_MAXIMUM_PROCESSORS 64
431
432#define CONFIGURE_SCHEDULER_EDF_SMP
433#define CONFIGURE_SCHEDULER_PRIORITY_SMP
434#define CONFIGURE_SCHEDULER_SIMPLE_SMP
435
436#include <rtems/scheduler.h>
437
438RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(a, 256);
439
440RTEMS_SCHEDULER_CONTEXT_EDF_SMP(b, CONFIGURE_MAXIMUM_PROCESSORS);
441
442RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(c);
443
444#define CONFIGURE_SCHEDULER_CONTROLS \
445  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(a, SCHED_A), \
446  RTEMS_SCHEDULER_CONTROL_EDF_SMP(b, SCHED_B), \
447  RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(c, SCHED_C)
448
449#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
450  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
451  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
452  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
453  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
454  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
455  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
456  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
457  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
458  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
459  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
460  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
461  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
462  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
463  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
464  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
465  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
466  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
467  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
468  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
469  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
470  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
471  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
472  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
473  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
474  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
475  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
476  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
477  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
478  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
479  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
480  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
481  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
482  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
483  RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
484
485#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
486
487#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
488
489#define CONFIGURE_INIT
490
491#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.