source: rtems/doc/user/conf.t @ 14c55cc

4.115
Last change on this file since 14c55cc was 14c55cc, checked in by Sebastian Huber <sebastian.huber@…>, on 04/10/13 at 12:42:26

doc: Config documentation changes throughout

  • Property mode set to 100644
File size: 112.2 KB
Line 
1@c  COPYRIGHT (c) 1988-2013.
2@c  On-Line Applications Research Corporation (OAR).
3@c  All rights reserved.
4
5@c TODO:
6@c   + Ensure all macros are documented.
7@c   + Verify which structures may actually be defined by a user
8@c   + Add Go configuration.
9
10@c Questions:
11@c   + Should there be examples of defining your own
12@c     Device Driver Table, Init task table, etc.?
13@c
14
15@chapter Configuring a System
16
17@c
18@c === Introduction ===
19@c
20@section Introduction
21
22RTEMS must be configured for an application.  This configuration
23encompasses a variety of information including the length of each clock
24tick, the maximum number of each information RTEMS object that can
25be created, the application initialization tasks, the task scheduling
26algorithm to be used, and the device drivers in the application.
27
28Although this information is contained in data structures that are used
29by RTEMS at system initialization time, the data structures themselves
30should only rarely to be generated by hand. RTEMS provides a set of
31macros system which provides a simple standard mechanism to automate
32the generation of these structures.
33
34@ifset is-Ada
35System configuration is ALWAYS done from C.  When developing
36an Ada application, the user is responsible for creating at
37least one C file which contains the Ada run-time initialization
38and the RTEMS System Configuration.  There is no Ada binding
39for RTEMS System Configuration information.  Thus all examples
40and data structures shown in this chapter are in C.
41@end ifset
42
43@cindex confdefs.h
44@findex confdefs.h
45@cindex <rtems/confdefs.h>
46@findex <rtems/confdefs.h>
47
48The RTEMS header file @code{<rtems/confdefs.h>} is at the core of the
49automatic generation of system configuration. It is based on the idea
50of setting macros which define configuration parameters of interest to
51the application and defaulting or calculating all others. This variety
52of macros can automatically produce all of the configuration data
53required for an RTEMS application.
54
55Trivia: @code{confdefs} is shorthand for a @b{Configuration Defaults}.
56
57As a general rule, application developers only specify values
58for the configuration parameters of interest to them. They define what
59resources or features they require. In most cases, when a parameter is
60not specified, it defaults to zero (0) instances, a standards compliant
61value, or disabled as appropriate. For example, by default there will be
62256 task priority levels but this can be lowered by the application. This
63number of priority levels is required to be compliant with the RTEID/ORKID
64standards upon which the Classic API is based. There are similar cases
65where the default is selected to be compliant with with the POSIX standard.
66
67For each configuration parameter in the configuration tables, the macro
68corresponding to that field is discussed. The RTEMS Maintainers
69expect that all systems can be easily configured using the
70@code{<rtems/confdefs.h>} mechanism and that using this mechanism will
71avoid internal RTEMS configuration changes impacting applications.
72
73@c
74@c === Philosophy ===
75@c
76@section Default Value Selection Philosophy
77
78The user should be aware that the defaults are intentionally set as
79low as possible.  By default, no application resources are configured.
80The @code{<rtems/confdefs.h>} file ensures that at least one application
81task or thread is configured and that at least one of the initialization
82task/thread tables is configured.
83
84@c
85@c === Sizing the RTEMS Workspace ===
86@c
87@section Sizing the RTEMS Workspace
88
89The RTEMS Workspace is a user-specified block of memory reserved for
90use by RTEMS.  The application should NOT modify this memory.  This area
91consists primarily of the RTEMS data structures whose exact size depends
92upon the values specified in the Configuration Table.  In addition,
93task stacks and floating point context areas are dynamically allocated
94from the RTEMS Workspace.
95
96The @code{<rtems/confdefs.h>} mechanism calculates the size of the RTEMS
97Workspace automatically.  It assumes that all tasks are floating point and
98that all will be allocated the minimum stack space.  This calculation
99includes the amount of memory that will be allocated for internal use
100by RTEMS. The automatic calculation may underestimate the workspace
101size truly needed by the application, in which case one can use the
102@code{CONFIGURE_MEMORY_OVERHEAD} macro to add a value to the estimate. See
103@ref{Configuring a System Specify Memory Overhead} for more details.
104
105The memory area for the RTEMS Workspace is determined by the BSP.  In case the
106RTEMS Workspace is too large for the available memory, then a fatal run-time
107error occurs and the system terminates.
108
109The file @code{<rtems/confdefs.h>} will calculate the value of the
110@code{work_space_size} parameter of the Configuration Table. There
111are many parameters the application developer can specify to
112help @code{<rtems/confdefs.h>} in its calculations.  Correctly
113specifying the application requirements via parameters such as
114@code{CONFIGURE_EXTRA_TASK_STACKS} and @code{CONFIGURE_MAXIMUM_TASKS}
115is critical for production software.
116
117For each class of objects, the allocation can operate in one of two ways.
118The default way has an ceiling on the maximum number of object instances
119which can concurrently exist in the system. Memory for all instances of
120that object class is reserved at system initialization.  The second
121way allocates memory for an initial number of objects and increases the
122current allocation by a fixed increment when required. Both ways allocate
123space from inside the RTEMS Workspace.
124
125See @ref{Configuring a System Unlimited Objects} for more details about
126the second way, which allows for dynamic allocation of objects and
127therefore does not provide determinism.  This mode is useful mostly for
128when the number of objects cannot be determined ahead of time or when
129porting software for which you do not know the object requirements.
130
131The space needed for stacks and for RTEMS objects will vary from
132one version of RTEMS and from one target processor to another.
133Therefore it is safest to use @code{<rtems/confdefs.h>} and specify
134your application's requirements in terms of the numbers of objects and
135multiples of @code{RTEMS_MINIMUM_STACK_SIZE}, as far as is possible. The
136automatic estimates of space required will in general change when:
137
138@itemize @bullet
139@item a configuration parameter is changed,
140@item task or interrupt stack sizes change,
141@item the floating point attribute of a task changes,
142@item task floating point attribute is altered,
143@item RTEMS is upgraded, or
144@item the target processor is changed.
145@end itemize
146
147Failure to provide enough space in the RTEMS Workspace may result in fatal
148run-time errors terminating the system.
149
150@c
151@c === Potential Issues ===
152@c
153@section Potential Issues with RTEMS Workspace Size Estimation
154
155The @code{<rtems/confdefs.h>} file estimates the amount of memory
156required for the RTEMS Workspace.  This estimate is only as accurate
157as the information given to @code{<rtems/confdefs.h>} and may be either
158too high or too low for a variety of reasons.  Some of the reasons that
159@code{<rtems/confdefs.h>} may reserve too much memory for RTEMS are:
160
161@itemize @bullet
162@item All tasks/threads are assumed to be floating point.
163@end itemize
164
165Conversely, there are many more reasons that the resource estimate could be
166too low:
167
168@itemize @bullet
169@item Task/thread stacks greater than minimum size must be
170accounted for explicitly by developer.
171
172@item Memory for messages is not included.
173
174@item Device driver requirements are not included.
175
176@item Network stack requirements are not included.
177
178@item Requirements for add-on libraries are not included.
179@end itemize
180
181In general, @code{<rtems/confdefs.h>} is very accurate when given enough
182information.  However, it is quite easy to use a library and forget to
183account for its resources.
184
185@c
186@c === Configuration Example ===
187@c
188@section Configuration Example
189
190In the following example, the configuration information for a system
191with a single message queue, four (4) tasks, and a timeslice of
192fifty (50) milliseconds is as follows:
193
194@example
195@group
196#include <bsp.h>
197
198#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
199#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
200
201#define CONFIGURE_MICROSECONDS_PER_TICK   1000 /* 1 millisecond */
202#define CONFIGURE_TICKS_PER_TIMESLICE       50 /* 50 milliseconds */
203
204#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
205
206#define CONFIGURE_MAXIMUM_TASKS 4
207#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
208
209#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
210  CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
211
212#define CONFIGURE_INIT
213#include <rtems/confdefs.h>
214@end group
215@end example
216
217In this example, only a few configuration parameters are specified. The
218impact of these are as follows:
219
220@itemize @bullet
221
222@item The example specified @code{CONFIGURE_RTEMS_INIT_TASK_TABLE}
223but did not specify any additional parameters. This results in a
224configuration of an application which will begin execution of a single
225initialization task named @code{Init} which is non-preemptible and at
226priority one (1).
227
228@item By specifying @code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER},
229this application is configured to have a clock tick device
230driver. Without a clock tick device driver, RTEMS has no way to know
231that time is passing and will be unable to support delays and wall
232time. Further configuration details about time are
233provided. Per @code{CONFIGURE_MICROSECONDS_PER_TICK} and
234@code{CONFIGURE_TICKS_PER_TIMESLICE}, the user specified they wanted a
235clock tick to occur each millisecond, and that the length of a timeslice
236would be fifty (50) milliseconds.
237
238@item By specifying @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER},
239the application will include a console device driver. Although the
240console device driver may support a combination of multiple serial
241ports and display and keyboard combinations, it is only required to
242provide a single device named @code{/dev/console}. This device will
243be used for Standard Input, Output and Error I/O Streams. Thus when
244@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is specified, implicitly
245three (3) file descriptors are reserved for the Standard I/O Streams and
246those file descriptors are associated with @code{/dev/console} during
247initialization. All console devices are expected to support the POSIX
248@i{termios} interface.
249
250@item The example above specifies via @code{CONFIGURE_MAXIMUM_TASKS}
251that the application requires a maximum of four (4)
252simultaneously existing Classic API tasks. Similarly, by specifying
253@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES}, there may be a maximum of only
254one (1) concurrently existent Classic API message queues.
255
256@item The most surprising configuration parameter in this example is the
257use of @code{CONFIGURE_MESSAGE_BUFFER_MEMORY}. Message buffer memory is
258allocated from the RTEMS Workspace and must be accounted for. In this
259example, the single message queue will have up to twenty (20) messages
260of type @code{struct USER_MESSAGE}.
261
262@item The @code{CONFIGURE_INIT} constant must be defined in order to
263make @code{<rtems/confdefs.h>} instantiate the configuration data
264structures.  This can only be defined in one source file per
265application that includes @code{<rtems/confdefs.h>} or the symbol
266table will be instantiated multiple times and linking errors
267produced.
268
269@end itemize
270
271This example illustrates that parameters have default values. Among
272other things, the application implicitly used the following defaults:
273
274@itemize @bullet
275@item All unspecified types of communications and synchronization objects
276in the Classic and POSIX Threads API have maximums of zero (0).
277
278@item The filesystem will be the default filesystem which is the In-Memory File
279System (IMFS).
280
281@item The application will have the default number of priority levels.
282
283@item The minimum task stack size will be that recommended by RTEMS for
284the target architecture.
285@end itemize
286
287@c
288@c === Unlimited Objects ===
289@c
290@subsection Unlimited Objects
291
292In real-time embedded systems the RAM is normally a limited, critical
293resource and dynamic allocation is avoided as much as possible to
294ensure predictable, deterministic execution times. For such cases, see
295@ref{Configuring a System Sizing the RTEMS Workspace} for an overview
296of how to tune the size of the workspace.  Frequently when users are
297porting software to RTEMS the precise resource requirements of the
298software is unknown. In these situations users do not need to control
299the size of the workspace very tightly because they just want to get
300the new software to run; later they can tune the workspace size as needed.
301
302The following object classes in the Classic API can be configured in
303unlimited mode:
304
305@itemize @bullet
306@item Tasks
307@item Timers
308@item Semaphores
309@item Message Queues
310@item Periods
311@item Barriers
312@item Partitions
313@item Regions
314@item Ports
315@end itemize
316
317Additionally, the following object classes from the POSIX API can be
318configured in unlimited mode:
319
320@itemize @bullet
321@item Threads
322@item Mutexes
323@item Condition Variables
324@item Keys
325@item Timers
326@item Message Queues
327@item Message Queue Descriptors
328@item Semaphores
329@item Barriers
330@item Read/Write Locks
331@item Spinlocks
332@end itemize
333
334Due to how the POSIX object memory requirements are configured the
335unlimited object support does not provide unlimited size declarations
336for POSIX keys or queued signals.
337
338Users are cautioned that using unlimited objects is not recommended for
339production software unless the dynamic growth is absolutely required. It
340is generally considered a safer embedded systems programming practice to
341know the system limits rather than experience an out of memory error
342at an arbitrary and largely unpredictable time in the field.
343
344@c
345@c === Per Object Class Unlimited Object Instances ===
346@c
347@subsection Per Object Class Unlimited Object Instances
348
349@findex rtems_resource_unlimited
350When the number of objects is not known ahead of time, RTEMS provides an
351auto-extending mode that can be enabled individually for each object
352type by using the macro @code{rtems_resource_unlimited}. This takes a value
353as a parameter, and is used to set the object maximum number field in
354an API Configuration table. The value is an allocation unit size. When
355RTEMS is required to grow the object table it is grown by this
356size. The kernel will return the object memory back to the RTEMS Workspace
357when an object is destroyed. The kernel will only return an allocated
358block of objects to the RTEMS Workspace if at least half the allocation
359size of free objects remain allocated. RTEMS always keeps one
360allocation block of objects allocated. Here is an example of using
361@code{rtems_resource_unlimited}:
362
363@example
364#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
365@end example
366
367@findex rtems_resource_is_unlimited
368@findex rtems_resource_maximum_per_allocation
369Object maximum specifications can be evaluated with the
370@code{rtems_resource_is_unlimited} and
371@code{rtems_resource_maximum_per_allocation} macros.
372
373@c
374@c === Unlimited Object Instances ===
375@c
376@subsection Unlimited Object Instances
377
378To ease the burden of developers who are porting new software RTEMS
379also provides the capability to make all object classes listed above
380operate in unlimited mode in a simple manner. The application developer
381is only responsible for enabling unlimited objects and specifying the
382allocation size.
383
384@c
385@c === CONFIGURE_OBJECTS_UNLIMITED ===
386@c
387@subsection Enable Unlimited Object Instances
388
389@findex CONFIGURE_OBJECTS_UNLIMITED
390
391@table @b
392@item CONSTANT:
393@code{CONFIGURE_OBJECTS_UNLIMITED}
394
395@item DATA TYPE:
396Boolean feature macro.
397
398@item RANGE:
399Defined or undefined.
400
401@item DEFAULT VALUE:
402This is not defined by default.
403
404@end table
405
406@subheading DESCRIPTION:
407@code{CONFIGURE_OBJECTS_UNLIMITED} enables @code{rtems_resource_unlimited}
408mode for Classic API and POSIX API objects that do not already have a
409specific maximum limit defined.
410
411@subheading NOTES:
412When using unlimited objects, it is common practice to also specify
413@code{CONFIGURE_UNIFIED_WORK_AREAS} so the system operates with a single
414pool of memory for both RTEMS and application memory allocations.
415
416@c
417@c === CONFIGURE_OBJECTS_ALLOCATION_SIZE ===
418@c
419@subsection Specify Unlimited Objects Allocation Size
420
421@table @b
422@item CONSTANT:
423@code{CONFIGURE_OBJECTS_ALLOCATION_SIZE}
424
425@item DATA TYPE:
426Unsigned integer (@code{uint32_t}).
427
428@item RANGE:
429Positive.
430
431@item DEFAULT VALUE:
432If not defined and @code{CONFIGURE_OBJECTS_UNLIMITED} is defined, the
433default value is eight (8).
434
435@end table
436
437@subheading DESCRIPTION:
438@code{CONFIGURE_OBJECTS_ALLOCATION_SIZE} provides an
439allocation size to use for @code{rtems_resource_unlimited} when using
440@code{CONFIGURE_OBJECTS_UNLIMITED}.
441
442@subheading NOTES:
443By allowing users to declare all resources as being unlimited
444the user can avoid identifying and limiting the resources used.
445@code{CONFIGURE_OBJECTS_UNLIMITED} does not support varying the allocation
446sizes for different objects; users who want that much control can define
447the @code{rtems_resource_unlimited} macros themselves.
448
449@example
450#define CONFIGURE_OBJECTS_UNLIMITED
451#define CONFIGURE_OBJECTS_ALLOCATION_SIZE 5
452@end example
453
454@c
455@c === Classic API Configuration ===
456@c
457@section Classic API Configuration
458
459This section defines the Classic API related system configuration
460parameters supported by @code{<rtems/confdefs.h>}.
461
462@c
463@c === CONFIGURE_MAXIMUM_TASKS ===
464@c
465@subsection Specify Maximum Classic API Tasks
466
467@findex CONFIGURE_MAXIMUM_TASKS
468
469@table @b
470@item CONSTANT:
471@code{CONFIGURE_MAXIMUM_TASKS}
472
473@item DATA TYPE:
474Unsigned integer (@code{uint32_t}).
475
476@item RANGE:
477Zero or positive.
478
479@item DEFAULT VALUE:
480The default for this field is 0.
481
482@end table
483
484@subheading DESCRIPTION:
485@code{CONFIGURE_MAXIMUM_TASKS} is the maximum number of Classic API
486Tasks that can be concurrently active.
487
488@subheading NOTES:
489This object class can be configured in unlimited allocation mode.
490
491The calculations for the required memory in the RTEMS Workspace
492for tasks assume that each task has a minimum stack size and
493has floating point support enabled.  The configuration parameter
494@code{CONFIGURE_EXTRA_TASK_STACKS} is used to specify task stack
495requirements @b{ABOVE} the minimum size required.  See
496@ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
497for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
498
499The maximumm number of POSIX threads is specified by
500@code{CONFIGURE_MAXIMUM_POSIX_THREADS}.
501@c XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
502
503A future enhancement to @code{<rtems/confdefs.h>} could be to eliminate
504the assumption that all tasks have floating point enabled. This would
505require the addition of a new configuration parameter to specify the
506number of tasks which enable floating point support.
507
508@c
509@c === CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS ===
510@c
511@subsection Disable Classic API Notepads
512
513@findex CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
514
515@table @b
516@item CONSTANT:
517@code{CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS}
518
519@item DATA TYPE:
520Boolean feature macro.
521
522@item RANGE:
523Defined or undefined.
524
525@item DEFAULT VALUE:
526By default, this is not defined and Classic API Notepads are supported.
527
528@end table
529
530@subheading DESCRIPTION:
531@code{CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS} should be defined if the
532user does not want to have support for Classic API Notepads in their
533application.
534
535@subheading NOTES:
536Disabling Classic API Notepads saves the allocation of sixteen (16)
537thirty-two bit integers. This saves sixty-four bytes per task/thread
538plus the allocation overhead. Notepads are rarely used in applications
539and this can save significant memory in a low RAM system.
540
541@c
542@c === CONFIGURE_MAXIMUM_TIMERS ===
543@c
544@subsection Specify Maximum Classic API Timers
545
546@findex CONFIGURE_MAXIMUM_TIMERS
547
548@table @b
549@item CONSTANT:
550@code{CONFIGURE_MAXIMUM_TIMERS}
551
552@item DATA TYPE:
553Unsigned integer (@code{uint32_t}).
554
555@item RANGE:
556Zero or positive.
557
558@item DEFAULT VALUE:
559The default for this field is 0.
560
561@end table
562
563@subheading DESCRIPTION:
564@code{CONFIGURE_MAXIMUM_TIMERS} is the maximum number of Classic API
565Timers that can be concurrently active.
566
567@subheading NOTES:
568This object class can be configured in unlimited allocation mode.
569
570@c
571@c === CONFIGURE_MAXIMUM_SEMAPHORES ===
572@c
573@subsection Specify Maximum Classic API Semaphores
574
575@findex CONFIGURE_MAXIMUM_SEMAPHORES
576
577@table @b
578@item CONSTANT:
579@code{CONFIGURE_MAXIMUM_SEMAPHORES}
580
581@item DATA TYPE:
582Unsigned integer (@code{uint32_t}).
583
584@item RANGE:
585Zero or positive.
586
587@item DEFAULT VALUE:
588The default for this field is 0.
589
590@end table
591
592@subheading DESCRIPTION:
593@code{CONFIGURE_MAXIMUM_SEMAPHORES} is the maximum number of Classic
594API Semaphores that can be concurrently active.
595
596@subheading NOTES:
597This object class can be configured in unlimited allocation mode.
598
599@c
600@c === CONFIGURE_MAXIMUM_MESSAGE_QUEUES ===
601@c
602@subsection Specify Maximum Classic API Message Queues
603
604@findex CONFIGURE_MAXIMUM_MESSAGE_QUEUES
605
606@table @b
607@item CONSTANT:
608@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES}
609
610@item DATA TYPE:
611Unsigned integer (@code{uint32_t}).
612
613@item RANGE:
614Zero or positive.
615
616@item DEFAULT VALUE:
617The default for this field is 0.
618
619@end table
620
621@subheading DESCRIPTION:
622@code{CONFIGURE_MAXIMUM_MESSAGE_QUEUES} is the maximum number of Classic
623API Message Queues that can be concurrently active.
624
625@subheading NOTES:
626This object class can be configured in unlimited allocation mode.
627
628@c
629@c === CONFIGURE_MAXIMUM_BARRIERS ===
630@c
631@subsection Specify Maximum Classic API Barriers
632
633@findex CONFIGURE_MAXIMUM_BARRIERS
634
635@table @b
636@item CONSTANT:
637@code{CONFIGURE_MAXIMUM_BARRIERS}
638
639@item DATA TYPE:
640Unsigned integer (@code{uint32_t}).
641
642@item RANGE:
643Zero or positive.
644
645@item DEFAULT VALUE:
646The default for this field is 0.
647
648@end table
649
650@subheading DESCRIPTION:
651@code{CONFIGURE_MAXIMUM_BARRIERS} is the maximum number of Classic
652API Barriers that can be concurrently active.
653
654@subheading NOTES:
655This object class can be configured in unlimited allocation mode.
656
657@c
658@c === CONFIGURE_MAXIMUM_PERIODS ===
659@c
660@subsection Specify Maximum Classic API Periods
661
662@findex CONFIGURE_MAXIMUM_PERIODS
663
664@table @b
665@item CONSTANT:
666@code{CONFIGURE_MAXIMUM_PERIODS}
667
668@item DATA TYPE:
669Unsigned integer (@code{uint32_t}).
670
671@item RANGE:
672Zero or positive.
673
674@item DEFAULT VALUE:
675The default for this field is 0.
676
677@end table
678
679@subheading DESCRIPTION:
680@code{CONFIGURE_MAXIMUM_PERIODS} is the maximum number of Classic
681API Periods that can be concurrently active.
682
683@subheading NOTES:
684This object class can be configured in unlimited allocation mode.
685
686@c
687@c === CONFIGURE_MAXIMUM_PARTITIONS ===
688@c
689@subsection Specify Maximum Classic API Partitions
690
691@findex CONFIGURE_MAXIMUM_PARTITIONS
692
693@table @b
694@item CONSTANT:
695@code{CONFIGURE_MAXIMUM_PARTITIONS}
696
697@item DATA TYPE:
698Unsigned integer (@code{uint32_t}).
699
700@item RANGE:
701Zero or positive.
702
703@item DEFAULT VALUE:
704The default for this field is 0.
705
706@end table
707
708@subheading DESCRIPTION:
709@code{CONFIGURE_MAXIMUM_PARTITIONS} is the maximum number of Classic
710API Partitions that can be concurrently active.
711
712@subheading NOTES:
713This object class can be configured in unlimited allocation mode.
714
715@c
716@c === CONFIGURE_MAXIMUM_REGIONS ===
717@c
718@subsection Specify Maximum Classic API Regions
719
720@findex CONFIGURE_MAXIMUM_REGIONS
721
722@table @b
723@item CONSTANT:
724@code{CONFIGURE_MAXIMUM_REGIONS}
725
726@item DATA TYPE:
727Unsigned integer (@code{uint32_t}).
728
729@item RANGE:
730Zero or positive.
731
732@item DEFAULT VALUE:
733The default for this field is 0.
734
735@end table
736
737@subheading DESCRIPTION:
738@code{CONFIGURE_MAXIMUM_REGIONS} is the maximum number of Classic
739API Regions that can be concurrently active.
740
741@subheading NOTES:
742None.
743
744@c
745@c === CONFIGURE_MAXIMUM_PORTS ===
746@c
747@subsection Specify Maximum Classic API Ports
748
749@findex CONFIGURE_MAXIMUM_PORTS
750
751@table @b
752@item CONSTANT:
753@code{CONFIGURE_MAXIMUM_PORTS}
754
755@item DATA TYPE:
756Unsigned integer (@code{uint32_t}).
757
758@item RANGE:
759Zero or positive.
760
761@item DEFAULT VALUE:
762The default for this field is 0.
763
764@end table
765
766@subheading DESCRIPTION:
767@code{CONFIGURE_MAXIMUM_PORTS} is the maximum number of Classic
768API Ports that can be concurrently active.
769
770@subheading NOTES:
771This object class can be configured in unlimited allocation mode.
772
773@c
774@c === CONFIGURE_MAXIMUM_USER_EXTENSIONS ===
775@c
776@subsection Specify Maximum Classic API User Extensions
777
778@findex CONFIGURE_MAXIMUM_USER_EXTENSIONS
779
780@table @b
781@item CONSTANT:
782@code{CONFIGURE_MAXIMUM_USER_EXTENSIONS}
783
784@item DATA TYPE:
785Unsigned integer (@code{uint32_t}).
786
787@item RANGE:
788Zero or positive.
789
790@item DEFAULT VALUE:
791The default for this field is 0.
792
793@end table
794
795@subheading DESCRIPTION:
796@code{CONFIGURE_MAXIMUM_USER_EXTENSIONS} is the maximum number of Classic
797API User Extensions that can be concurrently active.
798
799@subheading NOTES:
800This object class can be configured in unlimited allocation mode.
801
802@c
803@c === Classic API Initialization Task Configuration ===
804@c
805@section Classic API Initialization Tasks Table Configuration
806
807The @code{<rtems/confdefs.h>} configuration system can automatically
808generate an Initialization Tasks Table named
809@code{Initialization_tasks} with a single entry.  The following
810parameters control the generation of that table.
811
812@c
813@c === CONFIGURE_RTEMS_INIT_TASKS_TABLE ===
814@c
815@subsection Instantiate Classic API Initialization Task Table
816
817@findex CONFIGURE_RTEMS_INIT_TASKS_TABLE
818
819@table @b
820@item CONSTANT:
821@code{CONFIGURE_RTEMS_INIT_TASKS_TABLE}
822
823@item DATA TYPE:
824Boolean feature macro.
825
826@item RANGE:
827Defined or undefined.
828
829@item DEFAULT VALUE:
830This is not defined by default.
831
832@end table
833
834@subheading DESCRIPTION:
835@code{CONFIGURE_RTEMS_INIT_TASKS_TABLE} is defined if the user wishes
836to use a Classic RTEMS API Initialization Task Table. The table built by
837@code{<rtems/confdefs.h>} specifies the parameters for a single task. This
838is sufficient for applications which initialization the system from a
839single task.
840
841By default, this field is not defined as the user MUST select their own
842API for initialization tasks.
843
844@subheading NOTES:
845The application may choose to use the initialization tasks or threads
846table from another API.
847
848A compile time error will be generated if the user does not configure
849any initialization tasks or threads.
850
851@c
852@c === CONFIGURE_INIT_TASK_ENTRY_POINT ===
853@c
854@subsection Specifying Classic API Initialization Task Entry Point
855
856@findex CONFIGURE_INIT_TASK_ENTRY_POINT
857
858@table @b
859@item CONSTANT:
860@code{CONFIGURE_INIT_TASK_ENTRY_POINT}
861
862@item DATA TYPE:
863Task entry function pointer (@code{rtems_task_entry}).
864
865@item RANGE:
866Valid task entry function pointer.
867
868@item DEFAULT VALUE:
869By default the value is @code{Init}.
870
871@end table
872
873@subheading DESCRIPTION:
874@code{CONFIGURE_INIT_TASK_ENTRY_POINT} is the entry point (a.k.a. function
875name) of the single initialization task defined by the Classic API
876Initialization Tasks Table.
877
878@subheading NOTES:
879The user must implement the function @code{Init} or the function name provided
880in this configuration parameter.
881
882@c
883@c === CONFIGURE_INIT_TASK_NAME ===
884@c
885@subsection Specifying Classic API Initialization Task Name
886
887@findex CONFIGURE_INIT_TASK_NAME
888
889@table @b
890@item CONSTANT:
891@code{CONFIGURE_INIT_TASK_NAME}
892
893@item DATA TYPE:
894RTEMS Name (@code{rtems_name}).
895
896@item RANGE:
897Any value.
898
899@item DEFAULT VALUE:
900By default the value is @code{rtems_build_name( 'U', 'I', '1', ' ' )}.
901
902@end table
903
904@subheading DESCRIPTION:
905@code{CONFIGURE_INIT_TASK_NAME} is the name of the single initialization
906task defined by the Classic API Initialization Tasks Table.
907
908@subheading NOTES:
909None.
910
911@c
912@c === CONFIGURE_INIT_TASK_STACK_SIZE ===
913@c
914@subsection Specifying Classic API Initialization Task Stack Size
915
916@findex CONFIGURE_INIT_TASK_STACK_SIZE
917
918@table @b
919@item CONSTANT:
920@code{CONFIGURE_INIT_TASK_STACK_SIZE}
921
922@item DATA TYPE:
923Unsigned integer (@code{size_t}).
924
925@item RANGE:
926Zero or positive.
927
928@item DEFAULT VALUE:
929By default value is the configured minimum stack size.
930
931@end table
932
933@subheading DESCRIPTION:
934@code{CONFIGURE_INIT_TASK_STACK_SIZE} is the stack size of the single
935initialization task defined by the Classic API Initialization Tasks Table.
936
937@subheading NOTES:
938If the stack size specified is greater than the configured minimum,
939it must be accounted for in @code{CONFIGURE_EXTRA_TASK_STACKS}.
940See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
941for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
942
943@c
944@c === CONFIGURE_INIT_TASK_PRIORITY ===
945@c
946@subsection Specifying Classic API Initialization Task Priority
947
948@findex CONFIGURE_INIT_TASK_PRIORITY
949
950@table @b
951@item CONSTANT:
952@code{CONFIGURE_INIT_TASK_PRIORITY}
953
954@item DATA TYPE:
955RTEMS Task Priority (@code{rtems_task_priority}).
956
957@item RANGE:
958One (1) to CONFIGURE_MAXIMUM_PRIORITY.
959
960@item DEFAULT VALUE:
961By default the value is one (1) which is the highest priority in the
962Classic API.
963
964@end table
965
966@subheading DESCRIPTION:
967@code{CONFIGURE_INIT_TASK_PRIORITY} is the initial priority of the single
968initialization task defined by the Classic API Initialization Tasks Table.
969
970@subheading NOTES:
971None.
972
973@c
974@c === CONFIGURE_INIT_TASK_ATTRIBUTES ===
975@c
976@subsection Specifying Classic API Initialization Task Attributes
977
978@findex CONFIGURE_INIT_TASK_ATTRIBUTES
979
980@table @b
981@item CONSTANT:
982@code{CONFIGURE_INIT_TASK_ATTRIBUTES}
983
984
985@item DATA TYPE:
986RTEMS Attributes (@code{rtems_attribute}).
987
988@item RANGE:
989Valid task attribute sets.
990
991@item DEFAULT VALUE:
992By default the tvalue is @code{RTEMS_DEFAULT_ATTRIBUTES}.
993
994@end table
995
996@subheading DESCRIPTION:
997@code{CONFIGURE_INIT_TASK_ATTRIBUTES} is the task attributes of the single
998initialization task defined by the Classic API Initialization Tasks Table.
999
1000@subheading NOTES:
1001None.
1002
1003@c
1004@c === CONFIGURE_INIT_TASK_INITIAL_MODES ===
1005@c
1006@subsection Specifying Classic API Initialization Task Modes
1007
1008@findex CONFIGURE_INIT_TASK_INITIAL_MODES
1009
1010@table @b
1011@item CONSTANT:
1012@code{CONFIGURE_INIT_TASK_INITIAL_MODES}
1013
1014@item DATA TYPE:
1015RTEMS Mode (@code{rtems_mode}).
1016
1017@item RANGE:
1018Valid task mode sets.
1019
1020@item DEFAULT VALUE:
1021By default the value is @code{RTEMS_NO_PREEMPT}.
1022
1023@end table
1024
1025@subheading DESCRIPTION:
1026@code{CONFIGURE_INIT_TASK_INITIAL_MODES} is the initial execution mode of
1027the single initialization task defined by the Classic API Initialization
1028Tasks Table.
1029
1030@subheading NOTES:
1031None.
1032
1033@c
1034@c === CONFIGURE_INIT_TASK_ARGUMENTS ===
1035@c
1036@subsection Specifying Classic API Initialization Task Arguments
1037
1038@findex CONFIGURE_INIT_TASK_ARGUMENTS
1039
1040@table @b
1041@item CONSTANT:
1042@code{CONFIGURE_INIT_TASK_ARGUMENTS}
1043
1044@item DATA TYPE:
1045RTEMS Task Argument (@code{rtems_task_argument}).
1046
1047@item RANGE:
1048Complete range of the type.
1049
1050@item DEFAULT VALUE:
1051By default the value is 0.
1052
1053@end table
1054
1055@subheading DESCRIPTION:
1056@code{CONFIGURE_INIT_TASK_ARGUMENTS} is the task argument of the single
1057initialization task defined by the Classic API Initialization Tasks Table.
1058
1059@subheading NOTES:
1060None.
1061
1062@c
1063@c === CONFIGURE_HAS_OWN_INIT_TASK_TABLE ===
1064@c
1065@subsection Not Using Generated Initialization Tasks Table
1066
1067@findex CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1068
1069@table @b
1070@item CONSTANT:
1071@code{CONFIGURE_HAS_OWN_INIT_TASK_TABLE}
1072
1073@item DATA TYPE:
1074Boolean feature macro.
1075
1076@item RANGE:
1077Defined or undefined.
1078
1079@item DEFAULT VALUE:
1080This is not defined by default.
1081
1082@end table
1083
1084@subheading DESCRIPTION:
1085@code{CONFIGURE_HAS_OWN_INIT_TASK_TABLE} is defined if the user wishes
1086to define their own Classic API Initialization Tasks Table.  This table
1087should be named @code{Initialization_tasks}.
1088
1089@subheading NOTES:
1090This is a seldom used configuration parameter. The most likely use case
1091is when an application desires to have more than one initialization task.
1092
1093@c
1094@c === POSIX API Configuration ===
1095@c
1096@section POSIX API Configuration
1097
1098The parameters in this section are used to configure resources
1099for the RTEMS POSIX API.  They are only relevant if the POSIX API
1100is enabled at configure time using the @code{--enable-posix} option.
1101
1102@c
1103@c === CONFIGURE_MAXIMUM_POSIX_THREADS ===
1104@c
1105@subsection Specify Maximum POSIX API Threads
1106
1107@findex CONFIGURE_MAXIMUM_POSIX_THREADS
1108
1109@table @b
1110@item CONSTANT:
1111@code{CONFIGURE_MAXIMUM_POSIX_THREADS}
1112
1113@item DATA TYPE:
1114Unsigned integer (@code{uint32_t}).
1115
1116@item RANGE:
1117Zero or positive.
1118
1119@item DEFAULT VALUE:
1120The default for this field is 0.
1121
1122@end table
1123
1124@subheading DESCRIPTION:
1125@code{CONFIGURE_MAXIMUM_POSIX_THREADS} is the maximum number of POSIX API
1126Threads that can be concurrently active.
1127
1128@subheading NOTES:
1129This object class can be configured in unlimited allocation mode.
1130
1131This calculations for the required memory in the RTEMS Workspace
1132for threads assume that each thread has a minimum stack size and
1133has floating point support enabled.  The configuration parameter
1134@code{CONFIGURE_EXTRA_TASK_STACKS} is used to specify thread stack
1135requirements @b{ABOVE} the minimum size required.
1136See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
1137for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
1138
1139The maximum number of Classic API Tasks is specified by
1140@code{CONFIGURE_MAXIMUM_TASKS}.
1141
1142All POSIX threads have floating point enabled.
1143
1144@c XXX - Add xref to CONFIGURE_MAXIMUM_TASKS.
1145
1146@c
1147@c === CONFIGURE_MAXIMUM_POSIX_MUTEXES ===
1148@c
1149@subsection Specify Maximum POSIX API Mutexes
1150
1151@findex CONFIGURE_MAXIMUM_POSIX_MUTEXES
1152
1153@table @b
1154@item CONSTANT:
1155@code{CONFIGURE_MAXIMUM_POSIX_MUTEXES}
1156
1157@item DATA TYPE:
1158Unsigned integer (@code{uint32_t}).
1159
1160@item RANGE:
1161Zero or positive.
1162
1163@item DEFAULT VALUE:
1164The default for this field is 0.
1165
1166@end table
1167
1168@subheading DESCRIPTION:
1169@code{CONFIGURE_MAXIMUM_POSIX_MUTEXES} is the maximum number of POSIX
1170API Mutexes that can be concurrently active.
1171
1172@subheading NOTES:
1173This object class can be configured in unlimited allocation mode.
1174
1175@c
1176@c === CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ===
1177@c
1178@subsection Specify Maximum POSIX API Condition Variables
1179
1180@findex CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
1181
1182@table @b
1183@item CONSTANT:
1184@code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES}
1185
1186@item DATA TYPE:
1187Unsigned integer (@code{uint32_t}).
1188
1189@item RANGE:
1190Zero or positive.
1191
1192@item DEFAULT VALUE:
1193The default for this field is 0.
1194
1195@end table
1196
1197@subheading DESCRIPTION:
1198@code{CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES} is the maximum number
1199of POSIX API Condition Variables that can be concurrently active.
1200
1201@subheading NOTES:
1202This object class can be configured in unlimited allocation mode.
1203
1204@c
1205@c === CONFIGURE_MAXIMUM_POSIX_KEYS ===
1206@c
1207@subsection Specify Maximum POSIX API Keys
1208
1209@findex CONFIGURE_MAXIMUM_POSIX_KEYS
1210
1211@table @b
1212@item CONSTANT:
1213@code{CONFIGURE_MAXIMUM_POSIX_KEYS}
1214
1215@item DATA TYPE:
1216Unsigned integer (@code{uint32_t}).
1217
1218@item RANGE:
1219Zero or positive.
1220
1221@item DEFAULT VALUE:
1222The default for this field is 0.
1223
1224@end table
1225
1226@subheading DESCRIPTION:
1227@code{CONFIGURE_MAXIMUM_POSIX_KEYS} is the maximum number of POSIX
1228API Keys that can be concurrently active.
1229
1230@subheading NOTES:
1231This object class can be configured in unlimited allocation mode.
1232
1233@c XXX - Key pairs
1234
1235@c
1236@c === CONFIGURE_MAXIMUM_POSIX_TIMERS ===
1237@c
1238@subsection Specify Maximum POSIX API Timers
1239
1240@findex CONFIGURE_MAXIMUM_POSIX_TIMERS
1241
1242@table @b
1243@item CONSTANT:
1244@code{CONFIGURE_MAXIMUM_POSIX_TIMERS}
1245
1246@item DATA TYPE:
1247Unsigned integer (@code{uint32_t}).
1248
1249@item RANGE:
1250Zero or positive.
1251
1252@item DEFAULT VALUE:
1253The default for this field is 0.
1254
1255@end table
1256
1257@subheading DESCRIPTION:
1258@code{CONFIGURE_MAXIMUM_POSIX_TIMERS} is the maximum number of POSIX
1259API Timers that can be concurrently active.
1260
1261@subheading NOTES:
1262This object class can be configured in unlimited allocation mode.
1263
1264@c
1265@c === CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ===
1266@c
1267@subsection Specify Maximum POSIX API Queued Signals
1268
1269@findex CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1270
1271@table @b
1272@item CONSTANT:
1273@code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS}
1274
1275@item DATA TYPE:
1276Unsigned integer (@code{uint32_t}).
1277
1278@item RANGE:
1279Zero or positive.
1280
1281@item DEFAULT VALUE:
1282The default for this field is 0.
1283
1284@end table
1285
1286@subheading DESCRIPTION:
1287@code{CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS} is the maximum number of POSIX
1288API Queued Signals that can be concurrently active.
1289
1290@subheading NOTES:
1291None.
1292
1293@c
1294@c === CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ===
1295@c
1296@subsection Specify Maximum POSIX API Message Queues
1297
1298@findex CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1299
1300@table @b
1301@item CONSTANT:
1302@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES}
1303
1304@item DATA TYPE:
1305Unsigned integer (@code{uint32_t}).
1306
1307@item RANGE:
1308Zero or positive.
1309
1310@item DEFAULT VALUE:
1311The default for this field is 0.
1312
1313@end table
1314
1315@subheading DESCRIPTION:
1316@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES} is the maximum number of POSIX
1317API Message Queues that can be concurrently active.
1318
1319@subheading NOTES:
1320This object class can be configured in unlimited allocation mode.
1321
1322@c XXX - memory for buffers note
1323
1324@c
1325@c === CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS ===
1326@c
1327@subsection Specify Maximum POSIX API Message Queue Descriptors
1328
1329@findex CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
1330
1331@table @b
1332@item CONSTANT:
1333@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS}
1334
1335@item DATA TYPE:
1336Unsigned integer (@code{uint32_t}).
1337
1338@item RANGE:
1339greater than or equal to @code{CONFIGURE_MAXIMUM_POSIX_MESSAGES_QUEUES}
1340
1341@item DEFAULT VALUE:
1342The default for this field is 0.
1343
1344@end table
1345
1346@subheading DESCRIPTION:
1347@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS} is the maximum
1348number of POSIX API Message Queue Descriptors that can be concurrently
1349active.
1350
1351@subheading NOTES:
1352This object class can be configured in unlimited allocation mode.
1353
1354@code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS} should be
1355greater than or equal to @code{CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES}.
1356
1357@c
1358@c === CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ===
1359@c
1360@subsection Specify Maximum POSIX API Semaphores
1361
1362@findex CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1363
1364@table @b
1365@item CONSTANT:
1366@code{CONFIGURE_MAXIMUM_POSIX_SEMAPHORES}
1367
1368@item DATA TYPE:
1369Unsigned integer (@code{uint32_t}).
1370
1371@item RANGE:
1372Zero or positive.
1373
1374@item DEFAULT VALUE:
1375The default for this field is 0.
1376
1377@end table
1378
1379@subheading DESCRIPTION:
1380@code{CONFIGURE_MAXIMUM_POSIX_SEMAPHORES} is the maximum number of POSIX
1381API Semaphores that can be concurrently active.
1382
1383@subheading NOTES:
1384None.
1385
1386@c
1387@c === CONFIGURE_MAXIMUM_POSIX_BARRIERS ===
1388@c
1389@subsection Specify Maximum POSIX API Barriers
1390
1391@findex CONFIGURE_MAXIMUM_POSIX_BARRIERS
1392
1393@table @b
1394@item CONSTANT:
1395@code{CONFIGURE_MAXIMUM_POSIX_BARRIERS}
1396
1397@item DATA TYPE:
1398Unsigned integer (@code{uint32_t}).
1399
1400@item RANGE:
1401Zero or positive.
1402
1403@item DEFAULT VALUE:
1404The default for this field is 0.
1405
1406@end table
1407
1408@subheading DESCRIPTION:
1409@code{CONFIGURE_MAXIMUM_POSIX_BARRIERS} is the maximum number of POSIX
1410API Barriers that can be concurrently active.
1411
1412@subheading NOTES:
1413This object class can be configured in unlimited allocation mode.
1414
1415@c
1416@c === CONFIGURE_MAXIMUM_POSIX_SPINLOCKS ===
1417@c
1418@subsection Specify Maximum POSIX API Spinlocks
1419
1420@findex CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
1421
1422@table @b
1423@item CONSTANT:
1424@code{CONFIGURE_MAXIMUM_POSIX_SPINLOCKS}
1425
1426@item DATA TYPE:
1427Unsigned integer (@code{uint32_t}).
1428
1429@item RANGE:
1430Zero or positive.
1431
1432@item DEFAULT VALUE:
1433The default for this field is 0.
1434
1435@end table
1436
1437@subheading DESCRIPTION:
1438@code{CONFIGURE_MAXIMUM_POSIX_SPINLOCKS} is the maximum number of POSIX
1439API Spinlocks that can be concurrently active.
1440
1441@subheading NOTES:
1442This object class can be configured in unlimited allocation mode.
1443
1444@c
1445@c === CONFIGURE_MAXIMUM_POSIX_RWLOCKS ===
1446@c
1447@subsection Specify Maximum POSIX API Read/Write Locks
1448
1449@findex CONFIGURE_MAXIMUM_POSIX_RWLOCKS
1450
1451@table @b
1452@item CONSTANT:
1453@code{CONFIGURE_MAXIMUM_POSIX_RWLOCKS}
1454
1455@item DATA TYPE:
1456Unsigned integer (@code{uint32_t}).
1457
1458@item RANGE:
1459Zero or positive.
1460
1461@item DEFAULT VALUE:
1462The default for this field is 0.
1463
1464@end table
1465
1466@subheading DESCRIPTION:
1467@code{CONFIGURE_MAXIMUM_POSIX_RWLOCKS} is the maximum number of POSIX
1468API Read/Write Locks that can be concurrently active.
1469
1470@subheading NOTES:
1471This object class can be configured in unlimited allocation mode.
1472
1473@c
1474@c === POSIX Initialization Threads Table Configuration ===
1475@c
1476@section POSIX Initialization Threads Table Configuration
1477
1478The @code{<rtems/confdefs.h>} configuration system can automatically
1479generate a POSIX Initialization Threads Table named
1480@code{POSIX_Initialization_threads} with a single entry.  The following
1481parameters control the generation of that table.
1482
1483@c
1484@c === CONFIGURE_POSIX_INIT_THREAD_TABLE ===
1485@c
1486@subsection Instantiate POSIX API Initialization Thread Table
1487
1488@findex CONFIGURE_POSIX_INIT_THREAD_TABLE
1489
1490@table @b
1491@item CONSTANT:
1492@findex CONFIGURE_POSIX_INIT_THREAD_TABLE
1493
1494@item DATA TYPE:
1495Boolean feature macro.
1496
1497@item RANGE:
1498Defined or undefined.
1499
1500@item DEFAULT VALUE:
1501By default, this field is not defined as the user MUST select their own
1502API for initialization tasks.
1503
1504@end table
1505
1506@subheading DESCRIPTION:
1507@code{CONFIGURE_POSIX_INIT_THREAD_TABLE} is defined if the user wishes
1508to use a POSIX API Initialization Threads Table.  The table built
1509by @code{<rtems/confdefs.h>} specifies the parameters for a single
1510thread. This is sufficient for applications which initialization the
1511system from a
1512single task.
1513
1514By default, this field is not defined as the user MUST select their own
1515API for initialization tasks.
1516
1517@subheading NOTES:
1518The application may choose to use the initialization tasks or threads
1519table from another API.
1520
1521A compile time error will be generated if the user does not configure
1522any initialization tasks or threads.
1523
1524@c
1525@c === CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT ===
1526@c
1527@subsection Specifying POSIX API Initialization Thread Entry Point
1528
1529@findex CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1530
1531@table @b
1532@item CONSTANT:
1533@code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT}
1534
1535@item DATA TYPE:
1536POSIX thread function pointer (@code{void *(*entry_point)(void *)}).
1537
1538@item RANGE:
1539Undefined or a valid POSIX thread function pointer.
1540
1541@item DEFAULT VALUE:
1542By default the value is @code{POSIX_Init}.
1543
1544@end table
1545
1546@subheading DESCRIPTION:
1547@code{CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT} is the entry point
1548(a.k.a. function name) of the single initialization thread defined by
1549the POSIX API Initialization Threads Table.
1550
1551@subheading NOTES:
1552The user must implement the function @code{POSIX_Init} or the function name
1553provided in this configuration parameter.
1554
1555@c
1556@c === CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE ===
1557@c
1558@subsection Specifying POSIX API Initialization Thread Stack Size
1559
1560@findex CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1561
1562@table @b
1563@item CONSTANT:
1564@code{CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE}
1565
1566@item DATA TYPE:
1567Unsigned integer (@code{size_t}).
1568
1569@item RANGE:
1570Zero or positive.
1571
1572@item DEFAULT VALUE:
1573By default value is twice the configured minimum stack size.
1574
1575@end table
1576
1577@subheading DESCRIPTION:
1578@code{CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE} is the stack size of the
1579single initialization thread defined by the POSIX API Initialization
1580Threads Table.
1581
1582@subheading NOTES:
1583If the stack size specified is greater than the configured minimum,
1584it must be accounted for in @code{CONFIGURE_EXTRA_TASK_STACKS}.
1585See @ref{Configuring a System Reserve Task/Thread Stack Memory Above Minimum}
1586for more information about @code{CONFIGURE_EXTRA_TASK_STACKS}.
1587
1588@c
1589@c === CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE ===
1590@c
1591@subsection Not Using Generated POSIX Initialization Threads Table
1592
1593@findex CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1594
1595@table @b
1596@item CONSTANT:
1597@code{CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE}
1598
1599@item DATA TYPE:
1600Boolean feature macro.
1601
1602@item RANGE:
1603Defined or undefined.
1604
1605@item DEFAULT VALUE:
1606This is not defined by default.
1607
1608@end table
1609
1610@subheading DESCRIPTION:
1611@code{CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE} is defined if the
1612user wishes to define their own POSIX API Initialization Threads Table.
1613This table should be named @code{POSIX_Initialization_threads}.
1614
1615@subheading NOTES:
1616This is a seldom used configuration parameter. The most likely use case
1617is when an application desires to have more than one initialization task.
1618
1619@c
1620@c === Basic System Information ===
1621@c
1622@section Basic System Information
1623
1624This section defines the general system configuration parameters supported by
1625@code{<rtems/confdefs.h>}.
1626
1627@c
1628@c === CONFIGURE_UNIFIED_WORK_AREAS ===
1629@c
1630@subsection Separate or Unified Work Areas
1631
1632@findex CONFIGURE_UNIFIED_WORK_AREAS
1633@cindex unified work areas
1634@cindex separate work areas
1635@cindex RTEMS Workspace
1636@cindex C Program Heap
1637
1638@table @b
1639@item CONSTANT:
1640@code{CONFIGURE_UNIFIED_WORK_AREAS}
1641
1642@item DATA TYPE:
1643Boolean feature macro.
1644
1645@item RANGE:
1646Defined or undefined.
1647
1648@item DEFAULT VALUE:
1649By default, this is undefined which specifies that the C Program Heap
1650and the RTEMS Workspace will be separate.
1651
1652@end table
1653
1654@subheading DESCRIPTION:
1655When defined, the C Program Heap and the RTEMS Workspace will be one pool
1656of memory.
1657
1658When not defined, there will be separate memory pools for the RTEMS
1659Workspace and C Program Heap.
1660
1661@subheading NOTES:
1662Having separate pools does have some advantages in the event a task blows
1663a stack or writes outside its memory area. However, in low memory systems
1664the overhead of the two pools plus the potential for unused memory in
1665either pool is very undesirable.
1666
1667In high memory environments, this is desirable when you want to use the
1668RTEMS "unlimited" objects option.  You will be able to create objects
1669until you run out of all available memory rather then just until you
1670run out of RTEMS Workspace.
1671
1672@c
1673@c === CONFIGURE_MICROSECONDS_PER_TICK ===
1674@c
1675@subsection Length of Each Clock Tick
1676
1677@findex CONFIGURE_MICROSECONDS_PER_TICK
1678@cindex tick quantum
1679
1680@table @b
1681@item CONSTANT:
1682@code{CONFIGURE_MICROSECONDS_PER_TICK}
1683
1684@item DATA TYPE:
1685Unsigned integer (@code{uint32_t}).
1686
1687@item RANGE:
1688Positive.
1689
1690@item DEFAULT VALUE:
1691When not defined, the clock tick quantum is configured to be 10,000
1692microseconds which is ten (10) milliseconds.
1693
1694@end table
1695
1696@subheading DESCRIPTION:
1697This constant is  used to specify the length of time between clock ticks.
1698
1699When the clock tick quantum value is too low, the system will spend so
1700much time processing clock ticks that it does not have processing time
1701available to perform application work. In this case, the system will
1702become unresponsive.
1703
1704The lowest practical time quantum varies widely based upon the speed
1705of the target hardware and the architectural overhead associated with
1706interrupts. In general terms, you do not want to configure it lower than
1707is needed for the application.
1708
1709The clock tick quantum should be selected such that it all blocking and
1710delay times in the application are evenly divisible by it. Otherwise,
1711rounding errors will be introduced which may negatively impact the
1712application.
1713
1714@subheading NOTES:
1715This configuration parameter has no impact if the Clock Tick Device
1716driver is not configured.
1717
1718There may be BSP specific limits on the resolution or maximum value of
1719a clock tick quantum.
1720
1721@c
1722@c === CONFIGURE_TICKS_PER_TIMESLICE ===
1723@c
1724@subsection Specifying Timeslicing Quantum
1725
1726@findex CONFIGURE_TICKS_PER_TIMESLICE
1727@cindex ticks per timeslice
1728
1729@table @b
1730@item CONSTANT:
1731@code{CONFIGURE_TICKS_PER_TIMESLICE}
1732
1733
1734@item DATA TYPE:
1735Unsigned integer (@code{uint32_t}).
1736
1737@item RANGE:
1738Positive.
1739
1740@item DEFAULT VALUE:
1741If unspecified, this parameter defaults to fifty (50).
1742
1743@end table
1744
1745@subheading DESCRIPTION:
1746This configuration parameter specifies the length of the timeslice
1747quantum in ticks for each task.
1748
1749@subheading NOTES:
1750This configuration parameter has no impact if the Clock Tick Device
1751driver is not configured.
1752
1753@c
1754@c === CONFIGURE_MAXIMUM_PRIORITY ===
1755@c
1756@subsection Specifying the Number of Thread Priority Levels
1757
1758@findex CONFIGURE_MAXIMUM_PRIORITY
1759@cindex maximum priority
1760@cindex number of priority levels
1761
1762@table @b
1763@item CONSTANT:
1764@code{CONFIGURE_MAXIMUM_PRIORITY}
1765
1766@item DATA TYPE:
1767Unsigned integer (@code{uint8_t}).
1768
1769@item RANGE:
1770Valid values for this configuration parameter must be one (1) less than
1771than a power of two (2) between 4 and 256 inclusively.  In other words,
1772valid values are 3, 7, 31, 63, 127, and 255.
1773
1774@item DEFAULT VALUE:
1775By default, RTEMS must support 256 priority levels to be compliant with
1776various standards. These priorities range from zero (0) to 255.  Thus,
1777the default value for this field is 255.
1778
1779@end table
1780
1781@subheading DESCRIPTION:
1782This configuration parameter specified the maximum numeric priority
1783of any task in the system and one less that the number of priority levels
1784in the system.
1785
1786Reducing the number of priorities in the system reduces the amount of
1787memory allocated from the RTEMS Workspace.
1788
1789@subheading NOTES:
1790The numerically greatest priority is the logically lowest priority in
1791the system and will thus be used by the IDLE task.
1792
1793Priority zero (0) is reserved for internal use by RTEMS and is not
1794available to applications.
1795
1796With some schedulers, reducing the number of priorities can reduce the
1797amount of memory used by the scheduler. For example, the Deterministic
1798Priority Scheduler (DPS) used by default uses three pointers of storage
1799per priority level. Reducing the number of priorities from 256 levels
1800to sixteen (16) can reduce memory usage by about three (3) kilobytes.
1801
1802@c
1803@c === CONFIGURE_MINIMUM_TASK_STACK_SIZE ===
1804@c
1805@subsection Specifying the Minimum Task Size
1806
1807@findex CONFIGURE_MINIMUM_TASK_STACK_SIZE
1808@cindex minimum task stack size
1809
1810@table @b
1811@item CONSTANT:
1812@code{CONFIGURE_MINIMUM_TASK_STACK_SIZE}
1813
1814@item DATA TYPE:
1815Unsigned integer (@code{uint32_t}).
1816
1817@item RANGE:
1818Positive.
1819
1820@item DEFAULT VALUE:
1821When not defined by the application, this is set to the recommended
1822minimum stack size for this processor.
1823
1824@end table
1825
1826@subheading DESCRIPTION:
1827The configuration parameter is set to the number of bytes the application
1828wants the minimum stack size to be for every task or thread in the system.
1829
1830Adjusting this parameter should be done with caution. Examining the actual
1831usage using the Stack Checker Usage Reporting facility is recommended.
1832
1833@subheading NOTES:
1834This parameter can be used to lower the minimum from that
1835recommended. This can be used in low memory systems to reduce memory
1836consumption for stacks. However, this must be done with caution as it
1837could increase the possibility of a blown task stack.
1838
1839This parameter can be used to increase the minimum from that
1840recommended. This can be used in higher memory systems to reduce the
1841risk of stack overflow without performing analysis on actual consumption.
1842
1843@c
1844@c === CONFIGURE_INTERRUPT_STACK_SIZE ===
1845@c
1846@subsection Configuring the Size of the Interrupt Stack
1847
1848@findex CONFIGURE_INTERRUPT_STACK_SIZE
1849@cindex interrupt stack size
1850
1851@table @b
1852@item CONSTANT:
1853@code{CONFIGURE_INTERRUPT_STACK_SIZE}
1854
1855@item DATA TYPE:
1856Unsigned integer (@code{uint32_t}).
1857
1858@item RANGE:
1859Positive.
1860
1861@item DEFAULT VALUE:
1862If not specified, the interrupt stack will be of minimum size.
1863The default value is the configured minimum task stack size.
1864
1865@end table
1866
1867@subheading DESCRIPTION:
1868@code{CONFIGURE_INTERRUPT_STACK_SIZE} is set to the size of the
1869interrupt stack.  The interrupt stack size is often set by the BSP but
1870since this memory may be allocated from the RTEMS Workspace, it must be
1871accounted for.
1872
1873@subheading NOTES:
1874In some BSPs, changing this constant does NOT change the
1875size of the interrupt stack, only the amount of memory
1876reserved for it.
1877
1878Patches which result in this constant only being used in memory
1879calculations when the interrupt stack is intended to be allocated
1880from the RTEMS Workspace would be welcomed by the RTEMS Project.
1881
1882@c
1883@c === CONFIGURE_EXTRA_TASK_STACKS ===
1884@c
1885@subsection Reserve Task/Thread Stack Memory Above Minimum
1886
1887@findex CONFIGURE_EXTRA_TASK_STACKS
1888@cindex memory for task tasks
1889
1890@table @b
1891@item CONSTANT:
1892@code{CONFIGURE_EXTRA_TASK_STACKS}
1893
1894@item DATA TYPE:
1895Unsigned integer (@code{size_t}).
1896
1897@item RANGE:
1898Undefined or positive.
1899
1900@item DEFAULT VALUE:
1901When this is not defined, the default value is 0.
1902
1903@end table
1904
1905@subheading DESCRIPTION:
1906This configuration parameter is set to the number of bytes the
1907applications wishes to add to the task stack requirements calculated
1908by @code{<rtems/confdefs.h>}.
1909
1910@subheading NOTES:
1911This parameter is very important.  If the application creates tasks with
1912stacks larger then the minimum, then that memory is NOT accounted for
1913by @code{<rtems/confdefs.h>}.
1914
1915@c
1916@c === CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY ===
1917@c
1918@subsection Automatically Zeroing the RTEMS Workspace and C Program Heap
1919
1920@findex CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1921@cindex clear C Program Heap
1922@cindex clear RTEMS Workspace
1923@cindex zero C Program Heap
1924@cindex zero RTEMS Workspace
1925
1926@table @b
1927@item CONSTANT:
1928@code{CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY}
1929
1930@item DATA TYPE:
1931Boolean feature macro.
1932
1933@item RANGE:
1934Defined or undefined.
1935
1936@item DEFAULT VALUE:
1937Unless overridden by the BSP, this is not defined by default.  The default
1938is @b{NOT} to zero out the RTEMS Workspace or C Program Heap.
1939
1940@end table
1941
1942@subheading DESCRIPTION:
1943This macro indicates whether RTEMS should zero the RTEMS Workspace and
1944C Program Heap as part of its initialization.  If defined, the memory
1945regions are zeroed.  Otherwise, they are not.
1946
1947@subheading NOTES:
1948Zeroing memory can add significantly to system boot time. It is not
1949necessary for RTEMS but is often assumed by support libraries.
1950
1951@c
1952@c === CONFIGURE_STACK_CHECKER_ENABLED ===
1953@c
1954@subsection Enable The Task Stack Usage Checker
1955
1956@findex CONFIGURE_STACK_CHECKER_ENABLED
1957
1958@table @b
1959@item CONSTANT:
1960@code{CONFIGURED_STACK_CHECKER_ENABLED}
1961
1962@item DATA TYPE:
1963Boolean feature macro.
1964
1965@item RANGE:
1966Defined or undefined.
1967
1968@item DEFAULT VALUE:
1969By default, this is not defined and thus stack checking is disabled.
1970
1971@end table
1972
1973@subheading DESCRIPTION:
1974This configuration parameter is defined when the application wishes to
1975enable run-time stack bounds checking.
1976
1977
1978@subheading NOTES:
1979In 4.9 and older, this configuration parameter was named
1980@code{STACK_CHECKER_ON}.
1981
1982This increases the time required to create tasks as well as adding
1983overhead to each context switch.
1984
1985@c
1986@c === CONFIGURE_INITIAL_EXTENSIONS ===
1987@c
1988@subsection Specify Application Specific User Extensions
1989
1990@findex CONFIGURE_INITIAL_EXTENSIONS
1991
1992@table @b
1993@item CONSTANT:
1994@code{CONFIGURE_INITIAL_EXTENSIONS}
1995
1996@item DATA TYPE:
1997List of user extension initializers (@code{rtems_extensions_table}).
1998
1999@item RANGE:
2000Undefined or a list of one or more user extensions.
2001
2002@item DEFAULT VALUE:
2003This value is not defined by default.
2004
2005@end table
2006
2007@subheading DESCRIPTION:
2008If @code{CONFIGURE_INITIAL_EXTENSIONS} is defined by the application,
2009then this application specific set of initial extensions will be placed
2010in the initial extension table.
2011
2012@subheading NOTES:
2013None.
2014
2015@c
2016@c === Custom Stack Allocator ===
2017@c
2018@section Configuring Custom Task Stack Allocation
2019
2020RTEMS allows the application or BSP to define its own allocation and
2021deallocation methods for task stacks. This can be used to place task
2022stacks in special areas of memory or to utilize a Memory Management Unit
2023so that stack overflows are detected in hardware.
2024
2025@c
2026@c === CONFIGURE_TASK_STACK_ALLOCATOR_INIT ===
2027@c
2028@subsection Custom Task Stack Allocator Initialization
2029
2030@findex CONFIGURE_TASK_STACK_ALLOCATOR_INIT
2031
2032@table @b
2033@item CONSTANT:
2034@code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
2035
2036@item DATA TYPE:
2037Function pointer.
2038
2039@item RANGE:
2040Undefined, NULL or valid function pointer.
2041
2042@item DEFAULT VALUE:
2043The default value for this field is NULL which indicates that
2044task stacks will be allocated from the RTEMS Workspace.
2045
2046@end table
2047
2048@subheading DESCRIPTION:
2049@code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT} configures the initialization
2050method for an application or BSP specific task stack allocation
2051implementation.
2052
2053@subheading NOTES:
2054A correctly configured system must configure the following to be consistent:
2055
2056@itemize @bullet
2057@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
2058@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
2059@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
2060@end itemize
2061
2062@c
2063@c === CONFIGURE_TASK_STACK_ALLOCATOR ===
2064@c
2065@subsection Custom Task Stack Allocator
2066
2067@findex CONFIGURE_TASK_STACK_ALLOCATOR
2068
2069@cindex task stack allocator
2070
2071@table @b
2072@item CONSTANT:
2073@code{CONFIGURE_TASK_STACK_ALLOCATOR}
2074
2075@item DATA TYPE:
2076Function pointer.
2077
2078@item RANGE:
2079Undefined or valid function pointer.
2080
2081@item DEFAULT VALUE:
2082The default value for this field is @code{_Workspace_Allocate} which indicates
2083that task stacks will be allocated from the RTEMS Workspace.
2084
2085@end table
2086
2087@subheading DESCRIPTION:
2088@code{CONFIGURE_TASK_STACK_ALLOCATOR} may point to a user provided
2089routine to allocate task stacks.
2090
2091@subheading NOTES:
2092A correctly configured system must configure the following to be consistent:
2093
2094@itemize @bullet
2095@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
2096@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
2097@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
2098@end itemize
2099
2100@c
2101@c === CONFIGURE_TASK_STACK_DEALLOCATOR ===
2102@c
2103@subsection Custom Task Stack Deallocator
2104
2105@findex CONFIGURE_TASK_STACK_DEALLOCATOR
2106@cindex task stack deallocator
2107
2108@table @b
2109@item CONSTANT:
2110@code{CONFIGURE_TASK_STACK_DEALLOCATOR}
2111
2112@item DATA TYPE:
2113Function pointer.
2114
2115@item RANGE:
2116Undefined or valid function pointer.
2117
2118@item DEFAULT VALUE:
2119The default value for this field is @code{_Workspace_Free} which indicates that
2120task stacks will be allocated from the RTEMS Workspace.
2121
2122@end table
2123
2124@subheading DESCRIPTION:
2125@code{CONFIGURE_TASK_STACK_DEALLOCATOR} may point to a user provided
2126routine to free task stacks.
2127
2128@subheading NOTES:
2129A correctly configured system must configure the following to be consistent:
2130
2131@itemize @bullet
2132@item @code{CONFIGURE_TASK_STACK_ALLOCATOR_INIT}
2133@item @code{CONFIGURE_TASK_STACK_ALLOCATOR}
2134@item @code{CONFIGURE_TASK_STACK_DEALLOCATOR}
2135@end itemize
2136
2137@c
2138@c === Classic API Message Buffers ===
2139@c
2140@section Configuring Memory for Classic API Message Buffers
2141
2142This section describes the configuration parameters related to specifying
2143the amount of memory reserved for Classic API Message Buffers.
2144
2145@c
2146@c === CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE ===
2147@c
2148@subsection Calculate Memory for a Single Classic Message API Message Queue
2149
2150@findex CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
2151@cindex memory for a single message queue's buffers
2152
2153@table @b
2154@item CONSTANT:
2155@code{CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)}
2156
2157@item DATA TYPE:
2158Unsigned integer (@code{size_t}).
2159
2160@item RANGE:
2161Positive.
2162
2163@item DEFAULT VALUE:
2164None.
2165
2166@end table
2167
2168@subheading DESCRIPTION:
2169This is a helper macro which is used to assist in computing the total
2170amount of memory required for message buffers.  Each message queue will
2171have its own configuration with maximum message size and maximum number
2172of pending messages.
2173
2174The interface for this macro is as follows:
2175
2176@example
2177CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
2178@end example
2179
2180Where @code{max_messages} is the maximum number of pending messages
2181and @code{size_per} is the size in bytes of the user message.
2182
2183@subheading NOTES:
2184This macro is only used in support of @code{CONFIGURE_MESSAGE_BUFFER_MEMORY}.
2185
2186@c
2187@c === CONFIGURE_MESSAGE_BUFFER_MEMORY ===
2188@c
2189@subsection Reserve Memory for All Classic Message API Message Queues
2190
2191@findex CONFIGURE_MESSAGE_BUFFER_MEMORY
2192@cindex configure message queue buffer memory
2193
2194@table @b
2195@item CONSTANT:
2196@code{CONFIGURE_MESSAGE_BUFFER_MEMORY}
2197
2198@item DATA TYPE:
2199integer summation macro
2200
2201@item RANGE:
2202undefined (zero) or calculation resulting in a positive integer
2203
2204@item DEFAULT VALUE:
2205By default, this is not defined and zero (0) memory is reserved.
2206
2207@end table
2208
2209@subheading DESCRIPTION:
2210This macro is set to the number of bytes the application requires to be
2211reserved for pending Classic API Message Queue buffers.
2212
2213@subheading NOTES:
2214The following illustrates how the help macro
2215@code{CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE} can be used to assist in
2216calculating the message buffer memory required.  In this example, there
2217are two message queues used in this application.  The first message
2218queue has maximum of 24 pending messages with the message structure
2219defined by the type @code{one_message_type}.  The other message queue
2220has maximum of 500 pending messages with the message structure defined
2221by the type @code{other_message_type}.
2222
2223@example
2224@group
2225#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
2226 (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2227    24, sizeof(one_message_type) + \
2228  CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
2229    500, sizeof(other_message_type) \
2230 )
2231@end group
2232@end example
2233
2234@c
2235@c === Seldom Used Configuration Parameters ===
2236@c
2237@section Seldom Used Configuration Parameters
2238
2239This section describes configuration parameters supported by
2240@code{<rtems/confdefs.h>} which are seldom used by applications. These
2241parameters tend to be oriented to debugging system configurations
2242and providing work-arounds when the memory estimated by
2243@code{<rtems/confdefs.h>} is incorrect.
2244
2245@c
2246@c === CONFIGURE_MEMORY_OVERHEAD ===
2247@c
2248@subsection Specify Memory Overhead
2249
2250@findex CONFIGURE_MEMORY_OVERHEAD
2251
2252@table @b
2253@item CONSTANT:
2254@code{CONFIGURE_MEMORY_OVERHEAD}
2255
2256@item DATA TYPE:
2257Unsigned integer (@code{size_t}).
2258
2259@item RANGE:
2260Zero or positive.
2261
2262@item DEFAULT VALUE:
2263The default value is 0.
2264
2265@end table
2266
2267@subheading DESCRIPTION:
2268Thie parameter is set to the number of kilobytes the application wishes
2269to add to the requirements calculated by @code{<rtems/confdefs.h>}.
2270
2271@subheading NOTES:
2272This configuration parameter should only be used when it is suspected that
2273a bug in @code{<rtems/confdefs.h>} has resulted in an underestimation.
2274Typically the memory allocation will be too low when an application does
2275not account for all message queue buffers or task stacks.
2276
2277@c
2278@c === CONFIGURE_HAS_OWN_CONFIGURATION_TABLE ===
2279@c
2280@subsection Do Not Generate Configuration Information
2281
2282@findex CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
2283
2284@table @b
2285@item CONSTANT:
2286@code{CONFIGURE_HAS_OWN_CONFIGURATION_TABLE}
2287
2288@item DATA TYPE:
2289Boolean feature macro.
2290
2291@item RANGE:
2292Defined or undefined.
2293
2294@item DEFAULT VALUE:
2295This is not defined by default.
2296
2297@end table
2298
2299@subheading DESCRIPTION:
2300This configuration parameter should only be defined if the application
2301is providing their own complete set of configuration tables.
2302
2303@subheading NOTES:
2304None.
2305
2306@c
2307@c === C Library Support Configuration ===
2308@c
2309@section C Library Support Configuration
2310
2311This section defines the file system and IO library
2312related configuration parameters supported by
2313@code{<rtems/confdefs.h>}.
2314
2315@c
2316@c === CONFIGURE_MALLOC_STATISTICS ===
2317@c
2318@subsection Enable Malloc Family Statistics
2319
2320@findex CONFIGURE_MALLOC_STATISTICS
2321
2322
2323@table @b
2324@item CONSTANT:
2325@code{CONFIGURE_MALLOC_STATISTICS}
2326
2327@item DATA TYPE:
2328Boolean feature macro.
2329
2330@item RANGE:
2331Defined or undefined.
2332
2333@item DEFAULT VALUE:
2334This is undefined by default and Malloc Statistics are disabled.
2335
2336@end table
2337
2338@subheading DESCRIPTION:
2339This configuration parameter is defined when the application wishes to
2340enable the gathering of more detailed statistics on the C Malloc Family
2341of routines.
2342
2343@subheading NOTES:
2344None.
2345
2346@c
2347@c === CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS ===
2348@c
2349@subsection Specify Maximum Number of File Descriptors
2350
2351@findex CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2352@cindex maximum file descriptors
2353
2354@table @b
2355@item CONSTANT:
2356@code{CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS}
2357
2358@item DATA TYPE:
2359Unsigned integer (@code{uint32_t}).
2360
2361@item RANGE:
2362Zero or positive.
2363
2364@item DEFAULT VALUE:
2365If not defined, the default value is either zero (0) or three if
2366@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is defined. Three file
2367descriptors allows RTEMS to support standard input, output, and error
2368I/O streams on @code{/dev/console}.
2369
2370@end table
2371
2372@subheading DESCRIPTION:
2373This configuration parameter is set to the maximum number of file like objects
2374that can be concurrently open.
2375
2376@subheading NOTES:
2377None.
2378
2379@c
2380@c === CONFIGURE_TERMIOS_DISABLED ===
2381@c
2382@subsection Disable POSIX Termios Support
2383
2384@findex CONFIGURE_TERMIOS_DISABLED
2385
2386@table @b
2387@item CONSTANT:
2388@code{CONFIGURE_TERMIOS_DISABLED}
2389
2390@item DATA TYPE:
2391Boolean feature macro.
2392
2393@item RANGE:
2394Defined or undefined.
2395
2396@item DEFAULT VALUE:
2397By default, this is not defined and resources are reserved for the
2398termios functionality.
2399
2400@end table
2401
2402@subheading DESCRIPTION:
2403This configuration parameter is defined if the software implementing
2404POSIX termios functionality is not going to be used by this application.
2405
2406@subheading NOTES:
2407The termios support library should not be included in an application
2408executable unless it is directly referenced by the application or a
2409device driver.
2410
2411@c
2412@c === CONFIGURE_NUMBER_OF_TERMIOS_PORTS ===
2413@c
2414@subsection Specify Maximum Termios Ports
2415
2416@findex CONFIGURE_NUMBER_OF_TERMIOS_PORTS
2417
2418@table @b
2419@item CONSTANT:
2420@code{CONFIGURE_NUMBER_OF_TERMIOS_PORTS}
2421
2422@item DATA TYPE:
2423Unsigned integer.
2424
2425@item RANGE:
2426Zero or positive.
2427
2428@item DEFAULT VALUE:
2429By default, this is set to one (1) so a console port can be used.
2430
2431@end table
2432
2433@subheading DESCRIPTION:
2434This configuration parameter is set to the number of ports using the
2435termios functionality.  Each concurrently active termios port requires
2436resources.
2437
2438@subheading NOTES:
2439If the application will be using serial ports
2440including, but not limited to, the Console Device
2441(e.g. @code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER}), then it is
2442highly likely that this configuration parameter should NOT be is defined.
2443
2444@c
2445@c === File System Configuration Parameters ===
2446@c
2447@section File System Configuration Parameters
2448
2449This section defines File System related configuration parameters.
2450
2451@c
2452@c === CONFIGURE_HAS_OWN_MOUNT_TABLE ===
2453@c
2454@subsection Providing Application Specific Mount Table
2455
2456@findex CONFIGURE_HAS_OWN_MOUNT_TABLE
2457
2458@table @b
2459@item CONSTANT:
2460@code{CONFIGURE_HAS_OWN_MOUNT_TABLE}
2461
2462@item DATA TYPE:
2463Undefined or an array of type @code{rtems_filesystem_mount_table_t}.
2464
2465@item RANGE:
2466Undefined or an array of type @code{rtems_filesystem_mount_table_t}.
2467
2468@item DEFAULT VALUE:
2469This is not defined by default.
2470
2471@end table
2472
2473@subheading DESCRIPTION:
2474This configuration parameter is defined when the application
2475provides their own filesystem mount table.  The mount table is an
2476array of @code{rtems_filesystem_mount_table_t} entries pointed
2477to by the global variable @code{rtems_filesystem_mount_table}.
2478The number of entries in this table is in an integer variable named
2479@code{rtems_filesystem_mount_table_t}.
2480
2481@c XXX - is the variable name for the count right?
2482
2483@subheading NOTES:
2484None.
2485@c XXX - Please provide an example
2486
2487@c
2488@c === CONFIGURE_USE_MINIIMFS_AS_BASE_SYSTEM ===
2489@c
2490@subsection Configure miniIMFS as Root File System
2491
2492@findex CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2493
2494@table @b
2495@item CONSTANT:
2496@code{CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM}
2497
2498@item DATA TYPE:
2499Boolean feature macro.
2500
2501@item RANGE:
2502Defined or undefined.
2503
2504@item DEFAULT VALUE:
2505This value is not defined by default. If no other root file system
2506configuration parameters are specified, the IMFS will be used as the
2507root file system.
2508
2509@end table
2510
2511@subheading DESCRIPTION:
2512This configuration parameter is defined if the application wishes to use
2513the reduced functionality miniIMFS as the root filesystem. This reduced
2514version of the full IMFS does not include the capability to mount other
2515file system types, but it does support directories, device nodes, and
2516symbolic links.
2517
2518@subheading NOTES:
2519The miniIMFS nodes and is smaller in executable code size than the full IMFS.
2520
2521@c
2522@c === CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM ===
2523@c
2524@subsection Configure devFS as Root File System
2525
2526@findex CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2527
2528@table @b
2529@item CONSTANT:
2530@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM}
2531
2532@item DATA TYPE:
2533Boolean feature macro.
2534
2535@item RANGE:
2536Defined or undefined.
2537
2538@item DEFAULT VALUE:
2539This value is not defined by default. If no other root file system
2540configuration parameters are specified, the IMFS will be used as the
2541root file system.
2542
2543@end table
2544
2545@subheading DESCRIPTION:
2546This configuration parameter is defined if the application wishes to
2547use the device-only filesytem as the root file system.
2548
2549@subheading NOTES:
2550The device-only filesystem supports only device nodes and is smaller in
2551executable code size than the full IMFS and miniIMFS.
2552
2553The devFS is comparable in functionality to the pseudo-filesystem name
2554space provided before RTEMS release 4.5.0.
2555
2556@c
2557@c === CONFIGURE_APPLICATION_DISABLE_FILESYSTEM ===
2558@c
2559@subsection Disable File System Support
2560
2561@findex CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2562
2563@table @b
2564@item CONSTANT:
2565@code{CONFIGURE_APPLICATION_DISABLE_FILESYSTEM}
2566
2567@item DATA TYPE:
2568Boolean feature macro.
2569
2570@item RANGE:
2571Defined or undefined.
2572
2573@item DEFAULT VALUE:
2574This value is not defined by default. If no other root file system
2575configuration parameters are specified, the IMFS will be used as the
2576root file system.
2577
2578@end table
2579
2580@subheading DESCRIPTION:
2581This configuration parameter is defined if the application dose not
2582intend to use any kind of filesystem support. This include the device
2583infrastructure necessary to support @code{printf()}.
2584
2585@subheading NOTES:
2586None.
2587
2588@c
2589@c === Block Device Cache Configuration ===
2590@c
2591@section Block Device Cache Configuration
2592
2593This section defines Block Device Cache (bdbuf) related configuration
2594parameters.
2595
2596@c
2597@c === CONFIGURE_APPLICATION_NEEDS_LIBBLOCK ===
2598@c
2599@subsection Enable Block Device Cache
2600
2601@findex CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2602
2603@table @b
2604@item CONSTANT:
2605@code{CONFIGURE_APPLICATION_NEEDS_LIBBLOCK}
2606
2607@item DATA TYPE:
2608Boolean feature macro.
2609
2610@item RANGE:
2611Defined or undefined.
2612
2613@item DEFAULT VALUE:
2614This option is not defined by default.
2615
2616@end table
2617
2618@subheading DESCRIPTION:
2619Provides a Block Device Cache configuration.
2620
2621@subheading NOTES:
2622Each option of the Block Device Cache configuration can be explicitly set by
2623the user with the configuration options below.  The Block Device Cache is used
2624for example by the RFS and DOSFS file systems.
2625
2626@c
2627@c === CONFIGURE_BDBUF_CACHE_MEMORY_SIZE ===
2628@c
2629@subsection Size of the Cache Memory
2630
2631@findex CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2632
2633@table @b
2634@item CONSTANT:
2635@code{CONFIGURE_BDBUF_CACHE_MEMORY_SIZE}
2636
2637@item DATA TYPE:
2638Unsigned integer (@code{size_t}).
2639
2640@item RANGE:
2641Positive.
2642
2643@item DEFAULT VALUE:
2644The default value is 32KiB.
2645
2646@end table
2647
2648@subheading DESCRIPTION:
2649Size of the cache memory in bytes.
2650
2651@subheading NOTES:
2652None.
2653
2654@c
2655@c === CONFIGURE_BDBUF_BUFFER_MIN_SIZE ===
2656@c
2657@subsection Minimum Size of a Buffer
2658
2659@findex CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2660
2661@table @b
2662@item CONSTANT:
2663@code{CONFIGURE_BDBUF_BUFFER_MIN_SIZE}
2664
2665@item DATA TYPE:
2666Unsigned integer (@code{uint32_t}).
2667
2668@item RANGE:
2669Positive.
2670
2671@item DEFAULT VALUE:
2672The default value is 512 bytes.
2673
2674@end table
2675
2676@subheading DESCRIPTION:
2677Defines the minimum size of a buffer in bytes.
2678
2679@subheading NOTES:
2680None.
2681
2682@c
2683@c === CONFIGURE_BDBUF_BUFFER_MAX_SIZE ===
2684@c
2685@subsection Maximum Size of a Buffer
2686
2687@findex CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2688
2689@table @b
2690@item CONSTANT:
2691@code{CONFIGURE_BDBUF_BUFFER_MAX_SIZE}
2692
2693@item DATA TYPE:
2694Unsigned integer (@code{uint32_t}).
2695
2696@item RANGE:
2697It must be positive and an integral multiple of the buffer minimum size.
2698
2699@item DEFAULT VALUE:
2700The default value is 4096 bytes.
2701
2702@end table
2703
2704@subheading DESCRIPTION:
2705Defines the maximum size of a buffer in bytes.
2706
2707@subheading NOTES:
2708None.
2709
2710@c
2711@c === CONFIGURE_SWAPOUT_SWAP_PERIOD ===
2712@c
2713@subsection Swapout Task Swap Period
2714
2715@findex CONFIGURE_SWAPOUT_SWAP_PERIOD
2716
2717@table @b
2718@item CONSTANT:
2719@code{CONFIGURE_SWAPOUT_SWAP_PERIOD}
2720
2721@item DATA TYPE:
2722Unsigned integer (@code{uint32_t}).
2723
2724@item RANGE:
2725Positive.
2726
2727@item DEFAULT VALUE:
2728The default value is 250 milliseconds.
2729
2730@end table
2731
2732@subheading DESCRIPTION:
2733Defines the swapout task swap period in milliseconds.
2734
2735@subheading NOTES:
2736None.
2737
2738@c
2739@c === CONFIGURE_SWAPOUT_BLOCK_HOLD ===
2740@c
2741@subsection Swapout Task Maximum Block Hold Time
2742
2743@findex CONFIGURE_SWAPOUT_BLOCK_HOLD
2744
2745@table @b
2746@item CONSTANT:
2747@code{CONFIGURE_SWAPOUT_BLOCK_HOLD}
2748
2749@item DATA TYPE:
2750Unsigned integer (@code{uint32_t}).
2751
2752@item RANGE:
2753Positive.
2754
2755@item DEFAULT VALUE:
2756The default value is 1000 milliseconds.
2757
2758@end table
2759
2760@subheading DESCRIPTION:
2761Defines the swapout task maximum block hold time in milliseconds.
2762
2763@subheading NOTES:
2764None.
2765
2766@c
2767@c === CONFIGURE_SWAPOUT_TASK_PRIORITY ===
2768@c
2769@subsection Swapout Task Priority
2770
2771@findex CONFIGURE_SWAPOUT_TASK_PRIORITY
2772
2773@table @b
2774@item CONSTANT:
2775@code{CONFIGURE_SWAPOUT_TASK_PRIORITY}
2776
2777@item DATA TYPE:
2778Task priority (@code{rtems_task_priority}).
2779
2780@item RANGE:
2781Valid task priority.
2782
2783@item DEFAULT VALUE:
2784The default value is 15.
2785
2786@end table
2787
2788@subheading DESCRIPTION:
2789Defines the swapout task priority.
2790
2791@subheading NOTES:
2792None.
2793
2794@c
2795@c === CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS ===
2796@c
2797@subsection Maximum Blocks per Read-Ahead Request
2798
2799@findex CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
2800
2801@table @b
2802@item CONSTANT:
2803@code{CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS}
2804
2805@item DATA TYPE:
2806Unsigned integer (@code{uint32_t}).
2807
2808@item RANGE:
2809Positive.
2810
2811@item DEFAULT VALUE:
2812The default value is 0.
2813
2814@end table
2815
2816@subheading DESCRIPTION:
2817Defines the maximum blocks per read-ahead request.
2818
2819@subheading NOTES:
2820A value of 0 disables the read-ahead task (default).  The read-ahead task will
2821issue speculative read transfers if a sequential access pattern is detected.
2822This can improve the performance on some systems.
2823
2824@c
2825@c === CONFIGURE_BDBUF_MAX_WRITE_BLOCKS ===
2826@c
2827@subsection Maximum Blocks per Write Request
2828
2829@findex CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
2830
2831@table @b
2832@item CONSTANT:
2833@code{CONFIGURE_BDBUF_MAX_WRITE_BLOCKS}
2834
2835@item DATA TYPE:
2836Unsigned integer (@code{uint32_t}).
2837
2838@item RANGE:
2839Positive.
2840
2841@item DEFAULT VALUE:
2842The default value is 16.
2843
2844@end table
2845
2846@subheading DESCRIPTION:
2847Defines the maximum blocks per write request.
2848
2849@subheading NOTES:
2850None.
2851
2852@c
2853@c === CONFIGURE_BDBUF_TASK_STACK_SIZE ===
2854@c
2855@subsection Task Stack Size of the Block Device Cache Tasks
2856
2857@findex CONFIGURE_BDBUF_TASK_STACK_SIZE
2858
2859@table @b
2860@item CONSTANT:
2861@code{CONFIGURE_BDBUF_TASK_STACK_SIZE}
2862
2863@item DATA TYPE:
2864Unsigned integer (@code{size_t}).
2865
2866@item RANGE:
2867Zero or positive.
2868
2869@item DEFAULT VALUE:
2870The default value is the RTEMS minimum stack size.
2871
2872@end table
2873
2874@subheading DESCRIPTION:
2875Defines the task stack size of the Block Device Cache tasks in bytes.
2876
2877@subheading NOTES:
2878None.
2879
2880@c
2881@c === CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY ===
2882@c
2883@subsection Read-Ahead Task Priority
2884
2885@findex CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2886
2887@table @b
2888@item CONSTANT:
2889@code{CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY}
2890
2891@item DATA TYPE:
2892Task priority (@code{rtems_task_priority}).
2893
2894@item RANGE:
2895Valid task priority.
2896
2897@item DEFAULT VALUE:
2898The default value is 15.
2899
2900@end table
2901
2902@subheading DESCRIPTION:
2903Defines the read-ahead task priority.
2904
2905@subheading NOTES:
2906None.
2907
2908@c
2909@c === CONFIGURE_SWAPOUT_WORKER_TASKS ===
2910@c
2911@subsection Swapout Worker Task Count
2912
2913@findex CONFIGURE_SWAPOUT_WORKER_TASKS
2914
2915@table @b
2916@item CONSTANT:
2917@code{CONFIGURE_SWAPOUT_WORKER_TASKS}
2918
2919@item DATA TYPE:
2920Unsigned integer (@code{size_t}).
2921
2922@item RANGE:
2923Zero or positive.
2924
2925@item DEFAULT VALUE:
2926The default value is 0.
2927
2928@end table
2929
2930@subheading DESCRIPTION:
2931Defines the swapout worker task count.
2932
2933@subheading NOTES:
2934None.
2935
2936@c
2937@c === CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY ===
2938@c
2939@subsection Swapout Worker Task Priority
2940
2941@findex CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2942
2943@table @b
2944@item CONSTANT:
2945@code{CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY}
2946
2947@item DATA TYPE:
2948Task priority (@code{rtems_task_priority}).
2949
2950@item RANGE:
2951Valid task priority.
2952
2953@item DEFAULT VALUE:
2954The default value is 15.
2955
2956@end table
2957
2958@subheading DESCRIPTION:
2959Defines the swapout worker task priority.
2960
2961@subheading NOTES:
2962None.
2963
2964@c
2965@c === BSP Specific Settings ===
2966@c
2967@section BSP Specific Settings
2968
2969This section describes BSP specific configuration settings used by
2970@code{<rtems/confdefs.h>}.  The BSP specific configuration settings are
2971defined in @code{<bsp.h>}.
2972
2973@c
2974@c === Disable BSP Settings ===
2975@c
2976@subsection Disable BSP Configuration Settings
2977
2978@findex CONFIGURE_DISABLE_BSP_SETTINGS
2979
2980@table @b
2981@item CONSTANT:
2982@code{CONFIGURE_DISABLE_BSP_SETTINGS}
2983
2984@item DATA TYPE:
2985Boolean feature macro.
2986
2987@item RANGE:
2988Defined or undefined.
2989
2990@item DEFAULT VALUE:
2991This is not defined by default.
2992
2993@end table
2994
2995@subheading DESCRIPTION:
2996All BSP specific configuration settings can be disabled by the application
2997with the @code{CONFIGURE_DISABLE_BSP_SETTINGS} option.
2998
2999@subheading NOTES:
3000None.
3001
3002@c
3003@c === CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK ===
3004@c
3005@subsection Specify BSP Supports sbrk()
3006
3007@findex CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
3008
3009@table @b
3010@item CONSTANT:
3011@code{CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK}
3012
3013@item DATA TYPE:
3014Boolean feature macro.
3015
3016@item RANGE:
3017Defined or undefined.
3018
3019@item DEFAULT VALUE:
3020This option is BSP specific.
3021
3022@end table
3023
3024@subheading DESCRIPTION:
3025This configuration parameter is defined by a BSP to indicate that it
3026does not allocate all available memory to the C Program Heap used by
3027the Malloc Family of routines.
3028
3029If defined, when @code{malloc()} is unable to allocate memory, it will
3030call the BSP supplied @code{sbrk()} to obtain more memory.
3031
3032@subheading NOTES:
3033This parameter should not be defined by the application. Only the BSP
3034knows how it allocates memory to the C Program Heap.
3035
3036@c
3037@c === BSP_IDLE_TASK_BODY ===
3038@c
3039@subsection Specify BSP Specific Idle Task
3040
3041@findex BSP_IDLE_TASK_BODY
3042
3043@table @b
3044@item CONSTANT:
3045@code{BSP_IDLE_TASK_BODY}
3046
3047@item DATA TYPE:
3048Function pointer.
3049
3050@item RANGE:
3051Undefined or valid function pointer.
3052
3053@item DEFAULT VALUE:
3054This option is BSP specific.
3055
3056@end table
3057
3058@subheading DESCRIPTION:
3059If @code{BSP_IDLE_TASK_BODY} is defined by the BSP and
3060@code{CONFIGURE_IDLE_TASK_BODY} is not defined by the application,
3061then this BSP specific idle task body will be used.
3062
3063@subheading NOTES:
3064As it has knowledge of the specific CPU model, system controller logic,
3065and peripheral buses, a BSP specific IDLE task may be capable of turning
3066components off to save power during extended periods of no task activity
3067
3068@c
3069@c === BSP_IDLE_TASK_STACK_SIZE ===
3070@c
3071@subsection Specify BSP Suggested Value for IDLE Task Stack Size
3072
3073@findex BSP_IDLE_TASK_STACK_SIZE
3074
3075@table @b
3076@item CONSTANT:
3077@code{BSP_IDLE_TASK_STACK_SIZE}
3078
3079@item DATA TYPE:
3080Unsigned integer (@code{size_t}).
3081
3082@item RANGE:
3083Undefined or positive.
3084
3085@item DEFAULT VALUE:
3086This option is BSP specific.
3087
3088@end table
3089
3090@subheading DESCRIPTION:
3091If @code{BSP_IDLE_TASK_STACK_SIZE} is defined by the BSP and
3092@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is not defined by the application,
3093then this BSP suggested idle task stack size will be used.
3094
3095
3096@subheading NOTES:
3097The order of precedence for configuring the IDLE task stack size is:
3098
3099@itemize @bullet
3100@item RTEMS default minimum stack size.
3101@item If defined, then @code{CONFIGURE_MINIMUM_TASK_STACK_SIZE}.
3102@item If defined, then the BSP specific @code{BSP_IDLE_TASK_SIZE}.
3103@item If defined, then the application specified
3104@code{CONFIGURE_IDLE_TASK_SIZE}.
3105@end itemize
3106
3107@c XXX - add cross references to other related values.
3108
3109@c
3110@c === BSP_INITIAL_EXTENSION ===
3111@c
3112@subsection Specify BSP Specific User Extensions
3113
3114@findex BSP_INITIAL_EXTENSION
3115
3116@table @b
3117@item CONSTANT:
3118@code{BSP_INITIAL_EXTENSION}
3119
3120@item DATA TYPE:
3121List of user extension initializers (@code{rtems_extensions_table}).
3122
3123@item RANGE:
3124Undefined or a list of user extension initializers.
3125
3126@item DEFAULT VALUE:
3127This option is BSP specific.
3128
3129@end table
3130
3131@subheading DESCRIPTION:
3132If @code{BSP_INITIAL_EXTENSION} is defined by the BSP, then this BSP
3133specific initial extension will be placed as the last entry in the initial
3134extension table.
3135
3136@subheading NOTES:
3137None.
3138
3139@c
3140@c === BSP_INTERRUPT_STACK_SIZE ===
3141@c
3142@subsection Specifying BSP Specific Interrupt Stack Size
3143
3144@findex BSP_INTERRUPT_STACK_SIZE
3145
3146@table @b
3147@item CONSTANT:
3148@code{BSP_INTERRUPT_STACK_SIZE}
3149
3150@item DATA TYPE:
3151Unsigned integer (@code{size_t}).
3152
3153@item RANGE:
3154Undefined or positive.
3155
3156@item DEFAULT VALUE:
3157This option is BSP specific.
3158
3159@end table
3160
3161@subheading DESCRIPTION:
3162If @code{BSP_INTERRUPT_STACK_SIZE} is defined by the BSP and
3163@code{CONFIGURE_INTERRUPT_STACK_SIZE} is not defined by the application,
3164then this BSP specific interrupt stack size will be used.
3165
3166@subheading NOTES:
3167None.
3168
3169@c
3170@c === BSP_MAXIMUM_DEVICES ===
3171@c
3172@subsection Specifying BSP Specific Maximum Devices
3173
3174@findex BSP_MAXIMUM_DEVICES
3175
3176@table @b
3177@item CONSTANT:
3178@code{BSP_MAXIMUM_DEVICES}
3179
3180@item DATA TYPE:
3181Unsigned integer (@code{size_t}).
3182
3183@item RANGE:
3184Undefined or positive.
3185
3186@item DEFAULT VALUE:
3187This option is BSP specific.
3188
3189@end table
3190
3191@subheading DESCRIPTION:
3192If @code{BSP_MAXIMUM_DEVICES} is defined by the BSP and
3193@code{CONFIGURE_MAXIMUM_DEVICES} is not defined by the application,
3194then this BSP specific maximum device count will be used.
3195
3196@subheading NOTES:
3197This option is specific to the device file system (devFS) and should not be
3198confused with the @code{CONFIGURE_MAXIMUM_DRIVERS} option.  This parameter only
3199impacts the devFS and thus is only used by @code{<rtems/confdefs.h>} when
3200@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM} is specified.
3201
3202@c
3203@c === BSP_ZERO_WORKSPACE_AUTOMATICALLY ===
3204@c
3205@subsection BSP Recommends RTEMS Workspace be Cleared
3206
3207@findex BSP_ZERO_WORKSPACE_AUTOMATICALLY
3208
3209@table @b
3210@item CONSTANT:
3211@code{BSP_ZERO_WORKSPACE_AUTOMATICALLY}
3212
3213@item DATA TYPE:
3214Boolean feature macro.
3215
3216@item RANGE:
3217Defined or undefined.
3218
3219@item DEFAULT VALUE:
3220This option is BSP specific.
3221
3222@end table
3223
3224@subheading DESCRIPTION:
3225If @code{BSP_ZERO_WORKSPACE_AUTOMATICALLY} is defined by the BSP and
3226@code{CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY} is not defined by the
3227application, then the workspace will be zeroed automatically.
3228
3229@subheading NOTES:
3230Zeroing memory can add significantly to system boot time. It is not
3231necessary for RTEMS but is often assumed by support libraries.
3232
3233@c
3234@c === CONFIGURE_BSP_PREREQUISITE_DRIVERS ===
3235@c
3236@subsection Specify BSP Prerequisite Drivers
3237
3238@findex CONFIGURE_BSP_PREREQUISITE_DRIVERS
3239
3240@table @b
3241@item CONSTANT:
3242@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS}
3243
3244@item DATA TYPE:
3245List of device driver initializers (@code{rtems_driver_address_table}).
3246
3247@item RANGE:
3248Undefined or array of device drivers.
3249
3250@item DEFAULT VALUE:
3251This option is BSP specific.
3252
3253@end table
3254
3255@subheading DESCRIPTION:
3256@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is defined if the BSP has device
3257drivers it needs to include in the Device Driver Table.  This should be
3258defined to the set of device driver entries that will be placed in the
3259table at the @b{FRONT} of the Device Driver Table and initialized before
3260any other drivers @b{INCLUDING} any application prerequisite drivers.
3261
3262@subheading NOTES:
3263@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is typically used by BSPs
3264to configure common infrastructure such as bus controllers or probe
3265for devices.
3266
3267
3268@c
3269@c === Idle Task Configuration ===
3270@c
3271@section Idle Task Configuration
3272
3273This section defines the IDLE task related configuration parameters
3274supported by @code{<rtems/confdefs.h>}.
3275
3276@c
3277@c === CONFIGURE_IDLE_TASK_BODY ===
3278@c
3279@subsection Specify Application Specific Idle Task Body
3280
3281@findex CONFIGURE_IDLE_TASK_BODY
3282
3283@table @b
3284@item CONSTANT:
3285@code{CONFIGURE_IDLE_TASK_BODY}
3286
3287@item DATA TYPE:
3288Function pointer.
3289
3290@item RANGE:
3291Undefined or valid function pointer.
3292
3293@item DEFAULT VALUE:
3294By default, this is not defined.
3295
3296@end table
3297
3298@subheading DESCRIPTION:
3299@code{CONFIGURE_IDLE_TASK_BODY} is set to the function name corresponding
3300to the application specific IDLE thread body.  If not specified, the
3301BSP or RTEMS default IDLE thread body will be used.
3302
3303@subheading NOTES:
3304None.
3305
3306@c
3307@c === CONFIGURE_IDLE_TASK_STACK_SIZE ===
3308@c
3309@subsection Specify Idle Task Stack Size
3310
3311@findex CONFIGURE_IDLE_TASK_STACK_SIZE
3312
3313@table @b
3314@item CONSTANT:
3315@code{CONFIGURE_IDLE_TASK_STACK_SIZE}
3316
3317@item DATA TYPE:
3318Unsigned integer (@code{size_t}).
3319
3320@item RANGE:
3321Undefined or positive.
3322
3323@item DEFAULT VALUE:
3324If not specified, the IDLE task will have a stack of the configured
3325minimum stack size.
3326
3327@end table
3328
3329@subheading DESCRIPTION:
3330@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is set to the
3331desired stack size for the IDLE task.
3332
3333@subheading NOTES:
3334None.
3335
3336@c
3337@c === CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION ===
3338@c
3339@subsection Specify Idle Task Performs Application Initialization
3340
3341@findex CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3342
3343@table @b
3344@item CONSTANT:
3345@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION}
3346
3347@item DATA TYPE:
3348Boolean feature macro.
3349
3350@item RANGE:
3351Defined or undefined.
3352
3353@item DEFAULT VALUE:
3354By default, this is not the mode of operation and the user is assumed
3355to provide one or more initialization tasks.
3356
3357@end table
3358
3359@subheading DESCRIPTION:
3360@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION} is set to
3361indicate that the user has configured @b{NO} user initialization tasks
3362or threads and that the user provided IDLE task will perform application
3363initialization and then transform itself into an IDLE task.
3364
3365@subheading NOTES:
3366If you use this option be careful, the user IDLE task @b{CANNOT} block
3367at all during the initialization sequence.  Further, once application
3368initialization is complete, it must make itself preemptible and enter
3369an IDLE body loop.
3370
3371The IDLE task must run at the lowest priority of all tasks in the system.
3372
3373@c
3374@c === Scheduler Algorithm Configuration ===
3375@c
3376@section Scheduler Algorithm Configuration
3377
3378This section defines the configuration parameters related to selecting a
3379scheduling algorithm for an application.  For the schedulers built into
3380RTEMS, the configuration is straightforward.  All that is required is
3381to define the configuration macro which specifies which scheduler you
3382want for in your application.  The currently available schedulers are:
3383
3384The pluggable scheduler interface also enables the user to provide their
3385own scheduling algorithm.  If you choose to do this, you must define
3386multiple configuration macros.
3387
3388@c
3389@c === CONFIGURE_SCHEDULER_PRIORITY ===
3390@c
3391@subsection Use Deterministic Priority Scheduler
3392
3393@findex CONFIGURE_SCHEDULER_PRIORITY
3394
3395@table @b
3396@item CONSTANT:
3397@code{CONFIGURE_SCHEDULER_PRIORITY}
3398
3399@item DATA TYPE:
3400Boolean feature macro.
3401
3402@item RANGE:
3403Defined or undefined.
3404
3405@item DEFAULT VALUE:
3406This is the default scheduler and specifying this configuration parameter
3407is redundant.
3408
3409@end table
3410
3411@subheading DESCRIPTION:
3412The Deterministic Priority Scheduler is the default scheduler in RTEMS
3413for single core applications and is designed for predictable performance
3414under the highest loads.  It can block or unblock a thread in a constant
3415amount of time.  This scheduler requires a variable amount of memory
3416based upon the number of priorities configured in the system.
3417
3418@subheading NOTES:
3419This scheduler may be explicitly selected by defining
3420@code{CONFIGURE_SCHEDULER_PRIORITY} although this is equivalent to the
3421default behavior.
3422
3423@c
3424@c === CONFIGURE_SCHEDULER_SIMPLE ===
3425@c
3426@subsection Use Simple Priority Scheduler
3427
3428@findex CONFIGURE_SCHEDULER_SIMPLE
3429
3430@table @b
3431@item CONSTANT:
3432@code{CONFIGURE_SCHEDULER_SIMPLE}
3433
3434@item DATA TYPE:
3435Boolean feature macro.
3436
3437@item RANGE:
3438Defined or undefined.
3439
3440@item DEFAULT VALUE:
3441This is not defined by default.
3442
3443@end table
3444
3445@subheading DESCRIPTION:
3446When defined, the Simple Priority Scheduler is used at the thread
3447scheduling algorithm. This is an alternative scheduler in RTEMS.
3448It is designed to provide the same task scheduling behaviour as the
3449Deterministic Priority Scheduler while being simpler in implementation
3450and uses less memory for data management.  It maintains a single sorted
3451list of all ready threads.  Thus blocking or unblocking a thread is not
3452a constant time operation with this scheduler.
3453
3454This scheduler may be explicitly selected by defining
3455@code{CONFIGURE_SCHEDULER_SIMPLE}.
3456
3457@subheading NOTES:
3458This scheduler is appropriate for use in small systems where RAM is limited.
3459
3460@c
3461@c === CONFIGURE_SCHEDULER_EDF ===
3462@c
3463@subsection Use Earliest Deadline First Scheduler
3464
3465@findex CONFIGURE_SCHEDULER_EDF
3466
3467@table @b
3468@item CONSTANT:
3469@code{CONFIGURE_SCHEDULER_EDF}
3470
3471@item DATA TYPE:
3472Boolean feature macro.
3473
3474@item RANGE:
3475Defined or undefined.
3476
3477@item DEFAULT VALUE:
3478This is not defined by default.
3479
3480@end table
3481
3482@subheading DESCRIPTION:
3483The Earliest Deadline First Scheduler (EDF) is an alternative scheduler in
3484RTEMS for single core applications. The EDF schedules tasks with dynamic
3485priorities equal to deadlines. The deadlines are declared using only
3486Rate Monotonic manager which handles periodic behavior.  Period is always
3487equal to deadline. If a task does not have any deadline declared or the
3488deadline is cancelled, the task is considered a background task which is
3489scheduled in case no deadline-driven tasks are ready to run.  Moreover,
3490multiple background tasks are scheduled according their priority assigned
3491upon initialization. All ready tasks reside in a single ready queue.
3492
3493This scheduler may be explicitly selected by defining
3494@code{CONFIGURE_SCHEDULER_EDF}.
3495
3496@subheading NOTES:
3497None.
3498
3499
3500@c
3501@c === CONFIGURE_SCHEDULER_CBS ===
3502@c
3503@subsection Use Constant Bandwidth Server Scheduler
3504
3505@findex CONFIGURE_SCHEDULER_CBS
3506
3507@table @b
3508@item CONSTANT:
3509@code{CONFIGURE_SCHEDULER_CBS}
3510
3511@item DATA TYPE:
3512Boolean feature macro.
3513
3514@item RANGE:
3515Defined or undefined.
3516
3517@item DEFAULT VALUE:
3518This is not defined by default.
3519
3520@end table
3521
3522@subheading DESCRIPTION:
3523The Constant Bandwidth Server Scheduler (CBS) is an alternative scheduler
3524in RTEMS for single core applications. The CBS is a budget aware extension
3525of EDF scheduler. The goal of this scheduler is to ensure temporal
3526isolation of tasks. The CBS is equipped with a set of additional rules
3527and provides with an extensive API.
3528
3529This scheduler may be explicitly selected by defining
3530@code{CONFIGURE_SCHEDULER_CBS}.
3531@c XXX - add cross reference to API chapter
3532
3533@subheading NOTES:
3534None.
3535
3536@c
3537@c === CONFIGURE_SCHEDULER_SIMPLE_SMP ===
3538@c
3539@subsection Use Simple SMP Priority Scheduler
3540
3541@findex CONFIGURE_SCHEDULER_SIMPLE_SMP
3542
3543@table @b
3544@item CONSTANT:
3545@code{CONFIGURE_SCHEDULER_SIMPLE_SMP}
3546
3547@item DATA TYPE:
3548Boolean feature macro.
3549
3550@item RANGE:
3551Defined or undefined.
3552
3553@item DEFAULT VALUE:
3554This is not defined by default.
3555
3556@end table
3557
3558@subheading DESCRIPTION:
3559The Simple SMP Priority Scheduler is derived from the Simple Priority
3560Scheduler but is capable of scheduling threads across multiple cores.
3561It is designed to provide the same task scheduling behaviour as the
3562Deterministic Priority Scheduler while distributing threads across
3563multiple cores.  Being based upon the Simple Priority Scheduler, it also
3564maintains a single sorted list of all ready threads.  Thus blocking or
3565unblocking a thread is not a constant time operation with this scheduler.
3566
3567In addition, when allocating threads to cores, the algorithm is not
3568constant time. This algorithm was not designed with efficiency as a
3569primary design goal.  Its primary design goal was to provide an SMP-aware
3570scheduling algorithm that is simple to understand.
3571
3572In a configuration with SMP enabled at configure time, it may be
3573explicitly selected by defining @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}.
3574
3575@subheading NOTES:
3576This scheduler is only available when RTEMS is configured with SMP
3577support enabled.
3578
3579This scheduler is currently the default in SMP configurations and is
3580only selected when @code{CONFIGURE_SMP_APPLICATION} is defined.
3581
3582@c
3583@c === Configuring a User Scheduler ===
3584@c
3585@subsection Configuring a User Provided Scheduler
3586
3587@findex CONFIGURE_SCHEDULER_USER
3588
3589@table @b
3590@item CONSTANT:
3591@code{CONFIGURE_SCHEDULER_USER}
3592
3593@item DATA TYPE:
3594Entry points for scheduler
3595
3596@item RANGE:
3597Undefined or scheduler entry set
3598
3599@item DEFAULT VALUE:
3600
3601@end table
3602
3603@subheading DESCRIPTION:
3604RTEMS allows the application to provide its own task/thread
3605scheduling algorithm. In order to do this, one must define
3606@code{CONFIGURE_SCHEDULER_USER} to indicate the application provides its
3607own scheduling algorithm. If @code{CONFIGURE_SCHEDULER_USER} is defined
3608then the following additional macros must be defined:
3609
3610@itemize @bullet
3611@item @code{CONFIGURE_MEMORY_FOR_SCHEDULER} must be defined with the
3612amount of memory required as a base amount for the scheduler.
3613
3614@item @code{CONFIGURE_MEMORY_PER_TASK_FOR_SCHEDULER(_tasks)} must be
3615defined as a formula which computes the amount of memory required based
3616upon the number of tasks configured.
3617
3618@end itemize
3619
3620@subheading NOTES:
3621At this time, the mechanics and requirements for writing a
3622new scheduler are evolving and not fully documented.  It is
3623recommended that you look at the existing Deterministic Priority
3624Scheduler in @code{cpukit/score/src/schedulerpriority*.c} for
3625guidance.  For guidance on the configuration macros, please examine
3626@code{cpukit/sapi/include/confdefs.h} for how these are defined for the
3627Deterministic Priority Scheduler.
3628
3629@c
3630@c === SMP Specific Configuration Parameters ===
3631@c
3632@section SMP Specific Configuration Parameters
3633
3634When RTEMS is configured to support SMP target systems, there are other
3635configuration parameters which apply.
3636
3637@c XXX - add --enable-smp
3638
3639@c
3640@c === CONFIGURE_SMP_APPLICATION ===
3641@c
3642@subsection Specify Application Uses Multiple Cores (is SMP)
3643
3644@findex CONFIGURE_SMP_APPLICATION
3645
3646@table @b
3647@item CONSTANT:
3648@code{CONFIGURE_SMP_APPLICATION}
3649
3650@item DATA TYPE:
3651Boolean feature macro.
3652
3653@item RANGE:
3654Defined or undefined.
3655
3656@item DEFAULT VALUE:
3657This is not defined by default.
3658
3659@end table
3660
3661@subheading DESCRIPTION:
3662@code{CONFIGURE_SMP_APPLICATION} must be defined if the application is
3663to make use of multiple CPU cores in an SMP target system.
3664
3665@subheading NOTES:
3666None.
3667
3668@c
3669@c === CONFIGURE_SMP_MAXIMUM_PROCESSORS ===
3670@c
3671@subsection Specify Maximum Processors in SMP System
3672
3673@findex CONFIGURE_SMP_MAXIMUM_PROCESSORS
3674
3675@table @b
3676@item CONSTANT:
3677@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}
3678
3679@item DATA TYPE:
3680Boolean feature macro.
3681
3682@item RANGE:
3683Defined or undefined.
3684
3685@item DEFAULT VALUE:
3686This is not defined by default.
3687
3688@end table
3689
3690@subheading DESCRIPTION:
3691@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS} must be set to the number of
3692CPU cores in the SMP configuration.
3693
3694@subheading NOTES:
3695If there are more cores available than configured, the rest will be
3696ignored.
3697
3698@c
3699@c === Device Driver Table ===
3700@c
3701@section Device Driver Table
3702
3703This section defines the configuration parameters related
3704to the automatic generation of a Device Driver Table.  As
3705@code{<rtems/confdefs.h>} only is aware of a small set of
3706standard device drivers, the generated Device Driver
3707Table is suitable for simple applications with no
3708custom device drivers.
3709
3710Note that network device drivers are not configured in the Device Driver Table.
3711
3712@c
3713@c === CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE ===
3714@c
3715@subsection Specifying Application Defined Device Driver Table
3716
3717@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
3718
3719@table @b
3720@item CONSTANT:
3721@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE}
3722
3723@item DATA TYPE:
3724List of device driver initializers (@code{rtems_driver_address_table}).
3725
3726@item RANGE:
3727Undefined or array of device drivers.
3728
3729@item DEFAULT VALUE:
3730By default, this is not defined indicating the @code{<rtems/confdefs.h>}
3731is providing the device driver table.
3732
3733@end table
3734
3735@subheading DESCRIPTION:
3736@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if the application
3737wishes to provide their own Device Driver Table.
3738
3739The table must be an array of @code{rtems_driver_address_table} entries
3740named @code{Device_drivers}.
3741
3742@subheading NOTES:
3743It is expected that there the application would only rarely need to do this.
3744
3745@c
3746@c === CONFIGURE_MAXIMUM_DRIVERS ===
3747@c
3748@subsection Specifying the Maximum Number of Device Drivers
3749
3750@findex CONFIGURE_MAXIMUM_DRIVERS
3751
3752@table @b
3753@item CONSTANT:
3754@code{CONFIGURE_MAXIMUM_DRIVERS}
3755
3756@item DATA TYPE:
3757Unsigned integer (@code{uint32_t}).
3758
3759@item RANGE:
3760Zero or positive.
3761
3762@item DEFAULT VALUE:
3763By default, this is set to the number of device drivers configured
3764using the @code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER} configuration
3765parameters.
3766
3767@end table
3768
3769@subheading DESCRIPTION:
3770@code{CONFIGURE_MAXIMUM_DRIVERS} is defined as the number of device
3771drivers per node.
3772
3773@subheading NOTES:
3774If the application will dynamically install device drivers, then this
3775configuration parameter must be larger than the number of statically
3776configured device drivers. Drivers configured using the
3777@code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER} configuration parameters
3778are statically installed.
3779
3780@c
3781@c === CONFIGURE_MAXIMUM_DEVICES ===
3782@c
3783@subsection Specifying Maximum Devices
3784
3785@findex CONFIGURE_MAXIMUM_DEVICES
3786
3787@table @b
3788@item CONSTANT:
3789@code{CONFIGURE_MAXIMUM_DEVICES}
3790
3791@item DATA TYPE:
3792Unsigned integer (@code{uint32_t}).
3793
3794@item RANGE:
3795Positive.
3796
3797@item DEFAULT VALUE:
3798Unless @code{BSP_MAXIMUM_DEVICES} is set by the BSP, the default value
3799for this is set to 4.  If overridden by the BSP the value is set to the
3800value specified by the BSP.
3801
3802@end table
3803
3804@subheading DESCRIPTION:
3805@code{CONFIGURE_MAXIMUM_DEVICES} is defined to the number of
3806individual devices that may be registered in the device file system (devFS).
3807
3808@subheading NOTES:
3809This option is specific to the device file system (devFS) and should not be
3810confused with the @code{CONFIGURE_MAXIMUM_DRIVERS} option.  This parameter only
3811impacts the devFS and thus is only used by @code{<rtems/confdefs.h>} when
3812@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM} is specified.
3813
3814@c
3815@c === CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER ===
3816@c
3817@subsection Enable Console Device Driver
3818
3819@findex CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
3820
3821@table @b
3822@item CONSTANT:
3823@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER}
3824
3825@item DATA TYPE:
3826Boolean feature macro.
3827
3828@item RANGE:
3829Defined or undefined.
3830
3831@item DEFAULT VALUE:
3832By default, this is not defined.
3833
3834@end table
3835
3836@subheading DESCRIPTION:
3837@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is defined if the
3838application wishes to include the Console Device Driver.
3839
3840@subheading NOTES:
3841This device driver is responsible for providing standard input and output
3842using @i{/dev/console}.
3843
3844BSPs should be constructed in a manner that allows @code{printk()}
3845to work properly without the need for the console driver to be configured.
3846
3847@c
3848@c === CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER ===
3849@c
3850@subsection Enable Clock Driver
3851
3852@findex CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
3853
3854@table @b
3855@item CONSTANT:
3856@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER}
3857
3858@item DATA TYPE:
3859Boolean feature macro.
3860
3861@item RANGE:
3862Defined or undefined.
3863
3864@item DEFAULT VALUE:
3865By default, this is not defined.
3866
3867@end table
3868
3869@subheading DESCRIPTION:
3870@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER} is defined if the
3871application wishes to include the Clock Device Driver.
3872
3873@subheading NOTES:
3874This device driver is responsible for providing a regular
3875interrupt which invokes the @code{rtems_clock_tick} directive.
3876
3877If neither the Clock Driver not Benchmark Timer is enabled and
3878the configuration parameter
3879@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
3880then a compile time error will occur.
3881
3882@c
3883@c === CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER ===
3884@c
3885@subsection Enable the Benchmark Timer Driver
3886
3887@findex CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
3888
3889@table @b
3890@item CONSTANT:
3891@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER}
3892
3893@item DATA TYPE:
3894Boolean feature macro.
3895
3896@item RANGE:
3897Defined or undefined.
3898
3899@item DEFAULT VALUE:
3900By default, this is not defined.
3901
3902@end table
3903
3904@subheading DESCRIPTION:
3905@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER} is defined if the
3906application wishes to include the Timer Driver.  This device driver is
3907used to benchmark execution times by the RTEMS Timing Test Suites.
3908
3909@subheading NOTES:
3910If neither the Clock Driver not Benchmark Timer is enabled and
3911the configuration parameter
3912@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
3913then a compile time error will occur.
3914
3915@c
3916@c === CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER ===
3917@c
3918@subsection Specify Clock and Benchmark Timer Drivers Are Not Needed
3919
3920@findex CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
3921
3922@table @b
3923@item CONSTANT:
3924@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER}
3925
3926@item DATA TYPE:
3927Boolean feature macro.
3928
3929@item RANGE:
3930Defined or undefined.
3931
3932@item DEFAULT VALUE:
3933This is not defined by default.
3934
3935@end table
3936
3937@subheading DESCRIPTION:
3938@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is defined when
3939the application does @b{NOT} want the Clock Device Driver and is @b{NOT}
3940using the Timer Driver.  The inclusion or exclusion of the Clock Driver
3941must be explicit in user applications.
3942
3943@subheading NOTES:
3944This configuration parameter is intended to prevent the common user error
3945of using the Hello World example as the baseline for an application and
3946leaving out a clock tick source.
3947
3948@c
3949@c === CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER ===
3950@c
3951@subsection Enable Real-Time Clock Driver
3952
3953@findex CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
3954
3955@table @b
3956@item CONSTANT:
3957@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER}
3958
3959@item DATA TYPE:
3960Boolean feature macro.
3961
3962@item RANGE:
3963Defined or undefined.
3964
3965@item DEFAULT VALUE:
3966By default, this is not defined.
3967
3968@end table
3969
3970@subheading DESCRIPTION:
3971@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER} is defined if the
3972application wishes to include the Real-Time Clock Driver.
3973
3974@subheading NOTES:
3975Most BSPs do not include support for a real-time clock. This is because
3976many boards do not include the required hardware.
3977
3978If this is defined and the BSP does not have this device driver, then
3979the user will get a link time error for an undefined symbol.
3980
3981@c
3982@c === CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER ===
3983@c
3984@subsection Enable the Watchdog Device Driver
3985
3986@findex CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
3987
3988@table @b
3989@item CONSTANT:
3990@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
3991
3992@item DATA TYPE:
3993Boolean feature macro.
3994
3995@item RANGE:
3996Defined or undefined.
3997
3998@item DEFAULT VALUE:
3999By default, this is not defined.
4000
4001@end table
4002
4003@subheading DESCRIPTION:
4004@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
4005is defined if the application wishes to include the Watchdog Driver.
4006
4007@subheading NOTES:
4008Most BSPs do not include support for a watchdog device driver. This is
4009because many boards do not include the required hardware.
4010
4011If this is defined and the BSP does not have this device driver, then
4012the user will get a link time error for an undefined symbol.
4013
4014@c
4015@c === CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER ===
4016@c
4017@subsection Enable the Graphics Frame Buffer Device Driver
4018
4019@findex CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4020
4021@table @b
4022@item CONSTANT:
4023@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER}
4024
4025@item DATA TYPE:
4026Boolean feature macro.
4027
4028@item RANGE:
4029Defined or undefined.
4030
4031@item DEFAULT VALUE:
4032By default, this is not defined.
4033
4034@end table
4035
4036@subheading DESCRIPTION:
4037@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER} is defined
4038if the application wishes to include the BSP's Frame Buffer Device Driver.
4039
4040@subheading NOTES:
4041Most BSPs do not include support for a Frame Buffer Device Driver. This is
4042because many boards do not include the required hardware.
4043
4044If this is defined and the BSP does not have this device driver, then
4045the user will get a link time error for an undefined symbol.
4046
4047@c
4048@c === CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER ===
4049@c
4050@subsection Enable Stub Device Driver
4051
4052@findex CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4053
4054@table @b
4055@item CONSTANT:
4056@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER}
4057
4058@item DATA TYPE:
4059Boolean feature macro.
4060
4061@item RANGE:
4062Defined or undefined.
4063
4064@item DEFAULT VALUE:
4065By default, this is not defined.
4066
4067@end table
4068
4069@subheading DESCRIPTION:
4070@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER} is defined if the
4071application wishes to include the Stub Device Driver.
4072
4073@subheading NOTES:
4074This device driver simply provides entry points that return successful
4075and is primarily a test fixture. It is supported by all BSPs.
4076
4077@c
4078@c === CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS ===
4079@c
4080@subsection Specify Application Prerequisite Device Drivers
4081
4082@findex CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4083
4084@table @b
4085@item CONSTANT:
4086@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS}
4087
4088@item DATA TYPE:
4089device driver entry structures
4090
4091@item RANGE:
4092Undefined or set of device driver entry structures
4093
4094@item DEFAULT VALUE:
4095By default,this is not defined.
4096
4097@end table
4098
4099@subheading DESCRIPTION:
4100@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS} is defined if the
4101application has device drivers it needs to include in the Device Driver
4102Table.  This should be defined to the set of device driver entries that
4103will be placed in the table at the @b{FRONT} of the Device Driver Table
4104and initialized before any other drivers @b{EXCEPT} any BSP prerequisite
4105drivers.
4106
4107@subheading NOTES:
4108In some cases, it is used by System On Chip BSPs to support peripheral
4109buses beyond those normally found on the System On Chip. For example,
4110this is used by one RTEMS system which has implemented a SPARC/ERC32
4111based board with VMEBus. The VMEBus Controller initialization is performed
4112by a device driver configured via this configuration parameter.
4113
4114@c XXX Add example
4115
4116@c
4117@c === CONFIGURE_APPLICATION_EXTRA_DRIVERS ===
4118@c
4119@subsection Specify Extra Application Device Drivers
4120
4121@findex CONFIGURE_APPLICATION_EXTRA_DRIVERS
4122
4123@table @b
4124@item CONSTANT:
4125@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS}
4126
4127@item DATA TYPE:
4128device driver entry structures
4129
4130@item RANGE:
4131Undefined or set of device driver entry structures
4132
4133@item DEFAULT VALUE:
4134By default,this is not defined.
4135
4136@end table
4137
4138@subheading DESCRIPTION:
4139@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS} is defined if the
4140application has device drivers it needs to include in the Device Driver
4141Table.  This should be defined to the set of device driver entries that
4142will be placed in the table at the @b{END} of the Device Driver Table.
4143
4144@subheading NOTES:
4145None.
4146
4147@c
4148@c === CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER ===
4149@c
4150@subsection Enable /dev/null Device Driver
4151
4152@findex CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4153@cindex /dev/null
4154
4155@table @b
4156@item CONSTANT:
4157@code{CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER}
4158
4159@item DATA TYPE:
4160Boolean feature macro.
4161
4162@item RANGE:
4163Defined or undefined.
4164
4165@item DEFAULT VALUE:
4166By default,this is not defined.
4167
4168@end table
4169
4170@subheading DESCRIPTION:
4171This configuration variable is specified to enable @i{/dev/null}
4172device driver.
4173
4174@subheading NOTES:
4175This device driver is supported by all BSPs.
4176
4177@c
4178@c === CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER ===
4179@c
4180@subsection Enable /dev/zero Device Driver
4181
4182@findex CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4183@cindex /dev/zero
4184
4185@table @b
4186@item CONSTANT:
4187@code{CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER}
4188
4189@item DATA TYPE:
4190Boolean feature macro.
4191
4192@item RANGE:
4193Defined or undefined.
4194
4195@item DEFAULT VALUE:
4196By default,this is not defined.
4197
4198@end table
4199
4200@subheading DESCRIPTION:
4201This configuration variable is specified to enable @i{/dev/zero}
4202device driver.
4203
4204@subheading NOTES:
4205This device driver is supported by all BSPs.
4206
4207@c
4208@c === Multiprocessing Configuration ===
4209@c
4210@section Multiprocessing Configuration
4211
4212This section defines the multiprocessing related system configuration
4213parameters supported by @code{<rtems/confdefs.h>}.  They are only used
4214if the Multiprocessing Support (distinct from the SMP support) is enabled
4215at configure time using the @code{--enable-multiprocessing} option.
4216
4217Additionally, this class of Configuration Constants are only applicable if
4218@code{CONFIGURE_MP_APPLICATION} is defined.
4219
4220@c
4221@c === CONFIGURE_MP_APPLICATION ===
4222@c
4223@subsection Specify Application Will Use Multiprocessing
4224
4225@findex CONFIGURE_MP_APPLICATION
4226
4227@table @b
4228@item CONSTANT:
4229@code{CONFIGURE_MP_APPLICATION}
4230
4231@item DATA TYPE:
4232Boolean feature macro.
4233
4234@item RANGE:
4235Defined or undefined.
4236
4237@item DEFAULT VALUE:
4238This is not defined by default.
4239
4240@end table
4241
4242@subheading DESCRIPTION:
4243This configuration parameter must be defined to indicate
4244that the application intends to be part of a multiprocessing
4245configuration. Additional configuration parameters are assumed to be
4246provided.
4247
4248@subheading NOTES:
4249This has no impact unless RTEMS was configured and built using the
4250@code{--enable-multiprocessing} option.
4251
4252@c
4253@c === CONFIGURE_MP_NODE_NUMBER ===
4254@c
4255@subsection Configure Node Number in Multiprocessor Configuration
4256
4257@findex CONFIGURE_MP_NODE_NUMBER
4258
4259@table @b
4260@item CONSTANT:
4261@code{CONFIGURE_MP_NODE_NUMBER}
4262
4263@item DATA TYPE:
4264Unsigned integer (@code{uint32_t}).
4265
4266@item RANGE:
4267Positive.
4268
4269@item DEFAULT VALUE:
4270If not defined, it is set to @code{NODE_NUMBER} which is assumed to be
4271set by the compilation environment.
4272
4273@end table
4274
4275@subheading DESCRIPTION:
4276@code{CONFIGURE_MP_NODE_NUMBER} is the node number of
4277this node in a multiprocessor system.
4278
4279@subheading NOTES:
4280In the RTEMS Multiprocessing Test Suite, the node number is derived from
4281the Makefile variable @code{NODE_NUMBER}. The same code is compiled with
4282the @code{NODE_NUMBER} set to different values. The test programs behave
4283differently based upon their node number.
4284
4285
4286@c
4287@c === CONFIGURE_MP_MAXIMUM_NODES ===
4288@c
4289@subsection Configure Maximum Node in Multiprocessor Configuration
4290
4291@findex CONFIGURE_MP_MAXIMUM_NODES
4292
4293@table @b
4294@item CONSTANT:
4295@code{CONFIGURE_MP_MAXIMUM_NODES}
4296
4297@item DATA TYPE:
4298Unsigned integer (@code{uint32_t}).
4299
4300@item RANGE:
4301Positive.
4302
4303@item DEFAULT VALUE:
4304The default is two (2).
4305
4306@end table
4307
4308@subheading DESCRIPTION:
4309@code{CONFIGURE_MP_MAXIMUM_NODES} is the maximum number of nodes in a
4310multiprocessor system.
4311
4312@subheading NOTES:
4313None.
4314
4315@c
4316@c === CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS ===
4317@c
4318@subsection Configure Maximum Global Objects in Multiprocessor Configuration
4319
4320@findex CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4321
4322@table @b
4323@item CONSTANT:
4324@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS}
4325
4326@item DATA TYPE:
4327Unsigned integer (@code{uint32_t}).
4328
4329@item RANGE:
4330Positive.
4331
4332@item DEFAULT VALUE:
4333The default is 32.
4334
4335@end table
4336
4337@subheading DESCRIPTION:
4338@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS} is the maximum number of
4339concurrently active global objects in a multiprocessor system.
4340
4341@subheading NOTES:
4342This value corresponds to the total number of objects which can be
4343created with the @code{RTEMS_GLOBAL} attribute.
4344
4345@c
4346@c === CONFIGURE_MP_MAXIMUM_PROXIES ===
4347@c
4348@subsection Configure Maximum Proxies in Multiprocessor Configuration
4349
4350@findex CONFIGURE_MP_MAXIMUM_PROXIES
4351
4352@table @b
4353@item CONSTANT:
4354@code{CONFIGURE_MP_MAXIMUM_PROXIES}
4355
4356@item DATA TYPE:
4357Unsigned integer (@code{uint32_t}).
4358
4359@item RANGE:
4360Undefined or positive.
4361
4362@item DEFAULT VALUE:
4363The default is 32.
4364
4365@end table
4366
4367@subheading DESCRIPTION:
4368@code{CONFIGURE_MP_MAXIMUM_PROXIES} is the maximum number of concurrently
4369active thread/task proxies on this node in a multiprocessor system.
4370
4371@subheading NOTES:
4372Since a proxy is used to represent a remote task/thread which is blocking on
4373this node. This configuration parameter reflects the maximum number of
4374remote tasks/threads which can be blocked on objects on this node.
4375
4376@c XXX - add xref to proxy discussion in MP chapter
4377
4378@c
4379@c === CONFIGURE_MP_MPCI_TABLE_POINTER ===
4380@c
4381@subsection Configure MPCI in Multiprocessor Configuration
4382
4383@findex CONFIGURE_MP_MPCI_TABLE_POINTER
4384
4385@table @b
4386@item CONSTANT:
4387@code{CONFIGURE_MP_MPCI_TABLE_POINTER}
4388
4389@item DATA TYPE:
4390pointer to @code{rtems_mpci_table}
4391
4392@item RANGE:
4393undefined or valid pointer
4394
4395@item DEFAULT VALUE:
4396This is not defined by default.
4397
4398@end table
4399
4400@subheading DESCRIPTION:
4401@code{CONFIGURE_MP_MPCI_TABLE_POINTER} is the pointer to the
4402MPCI Configuration Table.  The default value of this field is
4403@code{&MPCI_table}.
4404
4405@subheading NOTES:
4406RTEMS provides a Shared Memory MPCI Device Driver which can be used on
4407any Multiprocessor System assuming the BSP provides the proper set of
4408supporting methods.
4409
4410@c
4411@c === CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE ===
4412@c
4413@subsection Do Not Generate Multiprocessor Configuration Table
4414
4415@findex CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
4416
4417@table @b
4418@item CONSTANT:
4419@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE}
4420
4421@item DATA TYPE:
4422Boolean feature macro.
4423
4424@item RANGE:
4425Defined or undefined.
4426
4427@item DEFAULT VALUE:
4428This is not defined by default.
4429
4430@end table
4431
4432@subheading DESCRIPTION:
4433@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE} is defined if the
4434application wishes to provide their own Multiprocessing Configuration
4435Table.  The generated table is named @code{Multiprocessing_configuration}.
4436
4437@subheading NOTES:
4438This is a configuration parameter which is very unlikely to be used by
4439an application. If you find yourself wanting to use it in an application,
4440please reconsider and discuss this on the RTEMS Users mailing list.
4441
4442@c
4443@c === Ada Tasks ===
4444@c
4445@section Ada Tasks
4446
4447This section defines the system configuration parameters supported
4448by @code{<rtems/confdefs.h>} related to configuring RTEMS to support
4449a task using Ada tasking with GNAT/RTEMS.
4450
4451These configuration parameters are only available when RTEMS is built with
4452the @code{--enable-ada} configure option and the application specifies
4453@code{CONFIGURE_GNAT_RTEMS}.
4454
4455Additionally RTEMS includes an Ada language binding to the Classic
4456API which has a test suite. This test suite is enabled only when
4457@code{--enable-tests} and @code{--enable-expada} are specified on the
4458configure command.
4459
4460@c
4461@c === CONFIGURE_GNAT_RTEMS ===
4462@c
4463@subsection Specify Application Includes Ada Code
4464
4465@findex CONFIGURE_GNAT_RTEMS
4466
4467@table @b
4468@item CONSTANT:
4469@code{CONFIGURE_GNAT_RTEMS}
4470
4471@item DATA TYPE:
4472Boolean feature macro.
4473
4474@item RANGE:
4475Defined or undefined.
4476
4477@item DEFAULT VALUE:
4478This is not defined by default.
4479
4480@end table
4481
4482@subheading DESCRIPTION:
4483@code{CONFIGURE_GNAT_RTEMS} is defined to inform RTEMS that the GNAT
4484Ada run-time is to be used by the application.
4485
4486@subheading NOTES:
4487This configuration parameter is critical as it makes
4488@code{<rtems/confdefs.h>} configure the resources (POSIX API Threads,
4489Mutexes, Condition Variables, and Keys) used implicitly by the GNAT
4490run-time.
4491
4492@c
4493@c === CONFIGURE_MAXIMUM_ADA_TASKS ===
4494@c
4495@subsection Specify the Maximum Number of Ada Tasks.
4496
4497@findex CONFIGURE_MAXIMUM_ADA_TASKS
4498
4499@table @b
4500@item CONSTANT:
4501@code{CONFIGURE_MAXIMUM_ADA_TASKS}
4502
4503@item DATA TYPE:
4504Unsigned integer (@code{uint32_t}).
4505
4506@item RANGE:
4507Undefined or positive.
4508
4509@item DEFAULT VALUE:
4510By default, when @code{CONFIGURE_GNAT_RTEMS} is defined, this is set to 20.
4511
4512@end table
4513
4514@subheading DESCRIPTION:
4515@code{CONFIGURE_MAXIMUM_ADA_TASKS} is the number of Ada tasks that can
4516be concurrently active in the system.
4517
4518@subheading NOTES:
4519None.
4520
4521@c
4522@c === CONFIGURE_MAXIMUM_FAKE_ADA_TASKS ===
4523@c
4524@subsection Specify the Maximum Fake Ada Tasks
4525
4526@findex CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4527
4528@table @b
4529@item CONSTANT:
4530@findex CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
4531
4532@item DATA TYPE:
4533Unsigned integer (@code{uint32_t}).
4534
4535@item RANGE:
4536Zero or positive.
4537
4538@item DEFAULT VALUE:
4539By default, this is undefined which implies zero (0) @i{fake} Ada Tasks.
4540
4541@end table
4542
4543@subheading DESCRIPTION:
4544@code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS} is the number of @i{fake} Ada tasks
4545that can be concurrently active in the system.  A @i{fake} Ada task is
4546a non-Ada task that makes calls back into Ada code and thus implicitly
4547uses the Ada run-time.
4548
4549@subheading NOTES:
4550None.
4551
4552@c
4553@c === Configuration Data Structures ===
4554@c
4555@section Configuration Data Structures
4556
4557It is recommended that applications be configured using
4558@code{<rtems/confdefs.h>} as it is simpler and insulates applications
4559from changes in the underlying data structures.  However, it is sometimes
4560important to understand the data structures that are automatically filled
4561in by the configuration parameters.  This section describes the primary
4562configuration data structures.
4563
4564If the user wishes to see the details of a particular data structure,
4565they are are advised to look at the source code. After all, that is one
4566of the advantages of RTEMS.
Note: See TracBrowser for help on using the repository browser.