source: rtems/doc/user/conf.t @ f785492

4.11
Last change on this file since f785492 was f785492, checked in by Sebastian Huber <sebastian.huber@…>, on Feb 14, 2015 at 7:07:19 PM

IMFS: Add CONFIGURE_IMFS_DISABLE_READDIR

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