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

4.115
Last change on this file since d61f5502 was d61f5502, checked in by Sebastian Huber <sebastian.huber@…>, on 04/10/14 at 09:50:38

documentation: Move CONFIGURE_MAXIMUM_DEVICES

Move CONFIGURE_MAXIMUM_DEVICES documentation to "File System
Configuration Parameters". This define has nothing to do with the
device driver table.

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