source: rtems/doc/user/conf.t @ 249766c5

4.115
Last change on this file since 249766c5 was 249766c5, checked in by Sebastian Huber <sebastian.huber@…>, on Feb 13, 2015 at 8:26:17 PM

IMFS: Rename CONFIGURE_IMFS_DISABLE_FCHMOD

Rename CONFIGURE_IMFS_DISABLE_FCHMOD to CONFIGURE_IMFS_DISABLE_CHMOD.

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