source: rtems/doc/user/conf.t @ 6cb3567

4.115
Last change on this file since 6cb3567 was 6cb3567, checked in by Joel Sherrill <joel.sherrill@…>, on 03/09/13 at 13:43:03

doc/user/conf.t: Rewrite to emphasize confdefs.h and add detail

This patch includes a heavy rewrite of the chapter to have a more
structured approach to this chapter. It also changes the sectioning
to have the Data Structures be a section to themselves as a peer in the
outline with each logical area of macros in confdefs.h.

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