source: rtems/doc/user/conf.t @ 12eee4fd

4.11
Last change on this file since 12eee4fd was 12eee4fd, checked in by Sebastian Huber <sebastian.huber@…>, on Feb 13, 2015 at 7:53:41 PM

IMFS: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM

Resurrect CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM.

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