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

4.11
Last change on this file since a9df916 was a9df916, checked in by Sebastian Huber <sebastian.huber@…>, on Feb 8, 2015 at 6:43:09 PM

IMFS: Add fine grained configuration

Remove miniIMFS. Statically initialize the root IMFS.

Add configuration options to disable individual
features of the root IMFS, e.g.

o CONFIGURE_IMFS_DISABLE_CHOWN,
o CONFIGURE_IMFS_DISABLE_FCHMOD,
o CONFIGURE_IMFS_DISABLE_LINK,
o CONFIGURE_IMFS_DISABLE_MKNOD,
o CONFIGURE_IMFS_DISABLE_MOUNT,
o CONFIGURE_IMFS_DISABLE_READLINK,
o CONFIGURE_IMFS_DISABLE_RENAME,
o CONFIGURE_IMFS_DISABLE_RMNOD,
o CONFIGURE_IMFS_DISABLE_SYMLINK,
o CONFIGURE_IMFS_DISABLE_UNMOUNT, and
o CONFIGURE_IMFS_DISABLE_UTIME.

  • Property mode set to 100644
File size: 130.3 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_IMFS_DISABLE_CHOWN ===
2681@c
2682@subsection Disable change owner support of root IMFS
2683
2684@findex CONFIGURE_IMFS_DISABLE_CHOWN
2685
2686@table @b
2687@item CONSTANT:
2688@code{CONFIGURE_IMFS_DISABLE_CHOWN}
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 support to change the
2703owner is disabled in the root IMFS.
2704
2705@c
2706@c === CONFIGURE_IMFS_DISABLE_FCHMOD ===
2707@c
2708@subsection Disable change mode support of root IMFS
2709
2710@findex CONFIGURE_IMFS_DISABLE_FCHMOD
2711
2712@table @b
2713@item CONSTANT:
2714@code{CONFIGURE_IMFS_DISABLE_FCHMOD}
2715
2716@item DATA TYPE:
2717Boolean feature macro.
2718
2719@item RANGE:
2720Defined or undefined.
2721
2722@item DEFAULT VALUE:
2723This is not defined by default.
2724
2725@end table
2726
2727@subheading DESCRIPTION:
2728In case this configuration option is defined, then the support to change the
2729mode is disabled in the root IMFS.
2730
2731@c
2732@c === CONFIGURE_IMFS_DISABLE_UTIME ===
2733@c
2734@subsection Disable change times support of root IMFS
2735
2736@findex CONFIGURE_IMFS_DISABLE_UTIME
2737
2738@table @b
2739@item CONSTANT:
2740@code{CONFIGURE_IMFS_DISABLE_UTIME}
2741
2742@item DATA TYPE:
2743Boolean feature macro.
2744
2745@item RANGE:
2746Defined or undefined.
2747
2748@item DEFAULT VALUE:
2749This is not defined by default.
2750
2751@end table
2752
2753@subheading DESCRIPTION:
2754In case this configuration option is defined, then the support to change times
2755is disabled in the root IMFS.
2756
2757@c
2758@c === CONFIGURE_IMFS_DISABLE_LINK ===
2759@c
2760@subsection Disable create hard link support of root IMFS
2761
2762@findex CONFIGURE_IMFS_DISABLE_LINK
2763
2764@table @b
2765@item CONSTANT:
2766@code{CONFIGURE_IMFS_DISABLE_LINK}
2767
2768@item DATA TYPE:
2769Boolean feature macro.
2770
2771@item RANGE:
2772Defined or undefined.
2773
2774@item DEFAULT VALUE:
2775This is not defined by default.
2776
2777@end table
2778
2779@subheading DESCRIPTION:
2780In case this configuration option is defined, then the support to create hard
2781links is disabled in the root IMFS.
2782
2783@c
2784@c === CONFIGURE_IMFS_DISABLE_SYMLINK ===
2785@c
2786@subsection Disable create symbolic link support of root IMFS
2787
2788@findex CONFIGURE_IMFS_DISABLE_SYMLINK
2789
2790@table @b
2791@item CONSTANT:
2792@code{CONFIGURE_IMFS_DISABLE_SYMLINK}
2793
2794@item DATA TYPE:
2795Boolean feature macro.
2796
2797@item RANGE:
2798Defined or undefined.
2799
2800@item DEFAULT VALUE:
2801This is not defined by default.
2802
2803@end table
2804
2805@subheading DESCRIPTION:
2806In case this configuration option is defined, then the support to create
2807symbolic links is disabled in the root IMFS.
2808
2809@c
2810@c === CONFIGURE_IMFS_DISABLE_READLINK ===
2811@c
2812@subsection Disable read symbolic link support of root IMFS
2813
2814@findex CONFIGURE_IMFS_DISABLE_READLINK
2815
2816@table @b
2817@item CONSTANT:
2818@code{CONFIGURE_IMFS_DISABLE_READLINK}
2819
2820@item DATA TYPE:
2821Boolean feature macro.
2822
2823@item RANGE:
2824Defined or undefined.
2825
2826@item DEFAULT VALUE:
2827This is not defined by default.
2828
2829@end table
2830
2831@subheading DESCRIPTION:
2832In case this configuration option is defined, then the support to read symbolic
2833links is disabled in the root IMFS.
2834
2835@c
2836@c === CONFIGURE_IMFS_DISABLE_RENAME ===
2837@c
2838@subsection Disable rename support of root IMFS
2839
2840@findex CONFIGURE_IMFS_DISABLE_RENAME
2841
2842@table @b
2843@item CONSTANT:
2844@code{CONFIGURE_IMFS_DISABLE_RENAME}
2845
2846@item DATA TYPE:
2847Boolean feature macro.
2848
2849@item RANGE:
2850Defined or undefined.
2851
2852@item DEFAULT VALUE:
2853This is not defined by default.
2854
2855@end table
2856
2857@subheading DESCRIPTION:
2858In case this configuration option is defined, then the support to rename nodes
2859is disabled in the root IMFS.
2860
2861@c
2862@c === CONFIGURE_IMFS_DISABLE_MOUNT ===
2863@c
2864@subsection Disable mount support of root IMFS
2865
2866@findex CONFIGURE_IMFS_DISABLE_MOUNT
2867
2868@table @b
2869@item CONSTANT:
2870@code{CONFIGURE_IMFS_DISABLE_MOUNT}
2871
2872@item DATA TYPE:
2873Boolean feature macro.
2874
2875@item RANGE:
2876Defined or undefined.
2877
2878@item DEFAULT VALUE:
2879This is not defined by default.
2880
2881@end table
2882
2883@subheading DESCRIPTION:
2884In case this configuration option is defined, then the support to mount other
2885file systems is disabled in the root IMFS.
2886
2887@c
2888@c === CONFIGURE_IMFS_DISABLE_UNMOUNT ===
2889@c
2890@subsection Disable unmount support of root IMFS
2891
2892@findex CONFIGURE_IMFS_DISABLE_UNMOUNT
2893
2894@table @b
2895@item CONSTANT:
2896@code{CONFIGURE_IMFS_DISABLE_UNMOUNT}
2897
2898@item DATA TYPE:
2899Boolean feature macro.
2900
2901@item RANGE:
2902Defined or undefined.
2903
2904@item DEFAULT VALUE:
2905This is not defined by default.
2906
2907@end table
2908
2909@subheading DESCRIPTION:
2910In case this configuration option is defined, then the support to unmount file
2911systems is disabled in the root IMFS.
2912
2913@c
2914@c === CONFIGURE_IMFS_DISABLE_MKNOD ===
2915@c
2916@subsection Disable make nodes support of root IMFS
2917
2918@findex CONFIGURE_IMFS_DISABLE_MKNOD
2919
2920@table @b
2921@item CONSTANT:
2922@code{CONFIGURE_IMFS_DISABLE_MKNOD}
2923
2924@item DATA TYPE:
2925Boolean feature macro.
2926
2927@item RANGE:
2928Defined or undefined.
2929
2930@item DEFAULT VALUE:
2931This is not defined by default.
2932
2933@end table
2934
2935@subheading DESCRIPTION:
2936In case this configuration option is defined, then the support to make
2937directories, devices, regular files and FIFOs is disabled in the root IMFS.
2938
2939@c
2940@c === CONFIGURE_IMFS_DISABLE_RMNOD ===
2941@c
2942@subsection Disable remove nodes support of root IMFS
2943
2944@findex CONFIGURE_IMFS_DISABLE_RMNOD
2945
2946@table @b
2947@item CONSTANT:
2948@code{CONFIGURE_IMFS_DISABLE_RMNOD}
2949
2950@item DATA TYPE:
2951Boolean feature macro.
2952
2953@item RANGE:
2954Defined or undefined.
2955
2956@item DEFAULT VALUE:
2957This is not defined by default.
2958
2959@end table
2960
2961@subheading DESCRIPTION:
2962In case this configuration option is defined, then the support to remove nodes
2963is disabled in the root IMFS.
2964
2965@c
2966@c === Block Device Cache Configuration ===
2967@c
2968@section Block Device Cache Configuration
2969
2970This section defines Block Device Cache (bdbuf) related configuration
2971parameters.
2972
2973@c
2974@c === CONFIGURE_APPLICATION_NEEDS_LIBBLOCK ===
2975@c
2976@subsection Enable Block Device Cache
2977
2978@findex CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2979
2980@table @b
2981@item CONSTANT:
2982@code{CONFIGURE_APPLICATION_NEEDS_LIBBLOCK}
2983
2984@item DATA TYPE:
2985Boolean feature macro.
2986
2987@item RANGE:
2988Defined or undefined.
2989
2990@item DEFAULT VALUE:
2991This is not defined by default.
2992
2993@end table
2994
2995@subheading DESCRIPTION:
2996Provides a Block Device Cache configuration.
2997
2998@subheading NOTES:
2999Each option of the Block Device Cache configuration can be explicitly set by
3000the user with the configuration options below.  The Block Device Cache is used
3001for example by the RFS and DOSFS file systems.
3002
3003@c
3004@c === CONFIGURE_BDBUF_CACHE_MEMORY_SIZE ===
3005@c
3006@subsection Size of the Cache Memory
3007
3008@findex CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
3009
3010@table @b
3011@item CONSTANT:
3012@code{CONFIGURE_BDBUF_CACHE_MEMORY_SIZE}
3013
3014@item DATA TYPE:
3015Unsigned integer (@code{size_t}).
3016
3017@item RANGE:
3018Positive.
3019
3020@item DEFAULT VALUE:
3021The default value is 32768 bytes.
3022
3023@end table
3024
3025@subheading DESCRIPTION:
3026Size of the cache memory in bytes.
3027
3028@subheading NOTES:
3029None.
3030
3031@c
3032@c === CONFIGURE_BDBUF_BUFFER_MIN_SIZE ===
3033@c
3034@subsection Minimum Size of a Buffer
3035
3036@findex CONFIGURE_BDBUF_BUFFER_MIN_SIZE
3037
3038@table @b
3039@item CONSTANT:
3040@code{CONFIGURE_BDBUF_BUFFER_MIN_SIZE}
3041
3042@item DATA TYPE:
3043Unsigned integer (@code{uint32_t}).
3044
3045@item RANGE:
3046Positive.
3047
3048@item DEFAULT VALUE:
3049The default value is 512 bytes.
3050
3051@end table
3052
3053@subheading DESCRIPTION:
3054Defines the minimum size of a buffer in bytes.
3055
3056@subheading NOTES:
3057None.
3058
3059@c
3060@c === CONFIGURE_BDBUF_BUFFER_MAX_SIZE ===
3061@c
3062@subsection Maximum Size of a Buffer
3063
3064@findex CONFIGURE_BDBUF_BUFFER_MAX_SIZE
3065
3066@table @b
3067@item CONSTANT:
3068@code{CONFIGURE_BDBUF_BUFFER_MAX_SIZE}
3069
3070@item DATA TYPE:
3071Unsigned integer (@code{uint32_t}).
3072
3073@item RANGE:
3074It must be positive and an integral multiple of the buffer minimum size.
3075
3076@item DEFAULT VALUE:
3077The default value is 4096 bytes.
3078
3079@end table
3080
3081@subheading DESCRIPTION:
3082Defines the maximum size of a buffer in bytes.
3083
3084@subheading NOTES:
3085None.
3086
3087@c
3088@c === CONFIGURE_SWAPOUT_SWAP_PERIOD ===
3089@c
3090@subsection Swapout Task Swap Period
3091
3092@findex CONFIGURE_SWAPOUT_SWAP_PERIOD
3093
3094@table @b
3095@item CONSTANT:
3096@code{CONFIGURE_SWAPOUT_SWAP_PERIOD}
3097
3098@item DATA TYPE:
3099Unsigned integer (@code{uint32_t}).
3100
3101@item RANGE:
3102Positive.
3103
3104@item DEFAULT VALUE:
3105The default value is 250 milliseconds.
3106
3107@end table
3108
3109@subheading DESCRIPTION:
3110Defines the swapout task swap period in milliseconds.
3111
3112@subheading NOTES:
3113None.
3114
3115@c
3116@c === CONFIGURE_SWAPOUT_BLOCK_HOLD ===
3117@c
3118@subsection Swapout Task Maximum Block Hold Time
3119
3120@findex CONFIGURE_SWAPOUT_BLOCK_HOLD
3121
3122@table @b
3123@item CONSTANT:
3124@code{CONFIGURE_SWAPOUT_BLOCK_HOLD}
3125
3126@item DATA TYPE:
3127Unsigned integer (@code{uint32_t}).
3128
3129@item RANGE:
3130Positive.
3131
3132@item DEFAULT VALUE:
3133The default value is 1000 milliseconds.
3134
3135@end table
3136
3137@subheading DESCRIPTION:
3138Defines the swapout task maximum block hold time in milliseconds.
3139
3140@subheading NOTES:
3141None.
3142
3143@c
3144@c === CONFIGURE_SWAPOUT_TASK_PRIORITY ===
3145@c
3146@subsection Swapout Task Priority
3147
3148@findex CONFIGURE_SWAPOUT_TASK_PRIORITY
3149
3150@table @b
3151@item CONSTANT:
3152@code{CONFIGURE_SWAPOUT_TASK_PRIORITY}
3153
3154@item DATA TYPE:
3155Task priority (@code{rtems_task_priority}).
3156
3157@item RANGE:
3158Valid task priority.
3159
3160@item DEFAULT VALUE:
3161The default value is 15.
3162
3163@end table
3164
3165@subheading DESCRIPTION:
3166Defines the swapout task priority.
3167
3168@subheading NOTES:
3169None.
3170
3171@c
3172@c === CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS ===
3173@c
3174@subsection Maximum Blocks per Read-Ahead Request
3175
3176@findex CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
3177
3178@table @b
3179@item CONSTANT:
3180@code{CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS}
3181
3182@item DATA TYPE:
3183Unsigned integer (@code{uint32_t}).
3184
3185@item RANGE:
3186Positive.
3187
3188@item DEFAULT VALUE:
3189The default value is 0.
3190
3191@end table
3192
3193@subheading DESCRIPTION:
3194Defines the maximum blocks per read-ahead request.
3195
3196@subheading NOTES:
3197A value of 0 disables the read-ahead task (default).  The read-ahead task will
3198issue speculative read transfers if a sequential access pattern is detected.
3199This can improve the performance on some systems.
3200
3201@c
3202@c === CONFIGURE_BDBUF_MAX_WRITE_BLOCKS ===
3203@c
3204@subsection Maximum Blocks per Write Request
3205
3206@findex CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
3207
3208@table @b
3209@item CONSTANT:
3210@code{CONFIGURE_BDBUF_MAX_WRITE_BLOCKS}
3211
3212@item DATA TYPE:
3213Unsigned integer (@code{uint32_t}).
3214
3215@item RANGE:
3216Positive.
3217
3218@item DEFAULT VALUE:
3219The default value is 16.
3220
3221@end table
3222
3223@subheading DESCRIPTION:
3224Defines the maximum blocks per write request.
3225
3226@subheading NOTES:
3227None.
3228
3229@c
3230@c === CONFIGURE_BDBUF_TASK_STACK_SIZE ===
3231@c
3232@subsection Task Stack Size of the Block Device Cache Tasks
3233
3234@findex CONFIGURE_BDBUF_TASK_STACK_SIZE
3235
3236@table @b
3237@item CONSTANT:
3238@code{CONFIGURE_BDBUF_TASK_STACK_SIZE}
3239
3240@item DATA TYPE:
3241Unsigned integer (@code{size_t}).
3242
3243@item RANGE:
3244Zero or positive.
3245
3246@item DEFAULT VALUE:
3247The default value is RTEMS_MINIMUM_STACK_SIZE.
3248
3249@end table
3250
3251@subheading DESCRIPTION:
3252Defines the task stack size of the Block Device Cache tasks in bytes.
3253
3254@subheading NOTES:
3255None.
3256
3257@c
3258@c === CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY ===
3259@c
3260@subsection Read-Ahead Task Priority
3261
3262@findex CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
3263
3264@table @b
3265@item CONSTANT:
3266@code{CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY}
3267
3268@item DATA TYPE:
3269Task priority (@code{rtems_task_priority}).
3270
3271@item RANGE:
3272Valid task priority.
3273
3274@item DEFAULT VALUE:
3275The default value is 15.
3276
3277@end table
3278
3279@subheading DESCRIPTION:
3280Defines the read-ahead task priority.
3281
3282@subheading NOTES:
3283None.
3284
3285@c
3286@c === CONFIGURE_SWAPOUT_WORKER_TASKS ===
3287@c
3288@subsection Swapout Worker Task Count
3289
3290@findex CONFIGURE_SWAPOUT_WORKER_TASKS
3291
3292@table @b
3293@item CONSTANT:
3294@code{CONFIGURE_SWAPOUT_WORKER_TASKS}
3295
3296@item DATA TYPE:
3297Unsigned integer (@code{size_t}).
3298
3299@item RANGE:
3300Zero or positive.
3301
3302@item DEFAULT VALUE:
3303The default value is 0.
3304
3305@end table
3306
3307@subheading DESCRIPTION:
3308Defines the swapout worker task count.
3309
3310@subheading NOTES:
3311None.
3312
3313@c
3314@c === CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY ===
3315@c
3316@subsection Swapout Worker Task Priority
3317
3318@findex CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
3319
3320@table @b
3321@item CONSTANT:
3322@code{CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY}
3323
3324@item DATA TYPE:
3325Task priority (@code{rtems_task_priority}).
3326
3327@item RANGE:
3328Valid task priority.
3329
3330@item DEFAULT VALUE:
3331The default value is 15.
3332
3333@end table
3334
3335@subheading DESCRIPTION:
3336Defines the swapout worker task priority.
3337
3338@subheading NOTES:
3339None.
3340
3341@c
3342@c === BSP Specific Settings ===
3343@c
3344@section BSP Specific Settings
3345
3346This section describes BSP specific configuration settings used by
3347@code{<rtems/confdefs.h>}.  The BSP specific configuration settings are
3348defined in @code{<bsp.h>}.
3349
3350@c
3351@c === Disable BSP Settings ===
3352@c
3353@subsection Disable BSP Configuration Settings
3354
3355@findex CONFIGURE_DISABLE_BSP_SETTINGS
3356
3357@table @b
3358@item CONSTANT:
3359@code{CONFIGURE_DISABLE_BSP_SETTINGS}
3360
3361@item DATA TYPE:
3362Boolean feature macro.
3363
3364@item RANGE:
3365Defined or undefined.
3366
3367@item DEFAULT VALUE:
3368This is not defined by default.
3369
3370@end table
3371
3372@subheading DESCRIPTION:
3373All BSP specific configuration settings can be disabled by the application
3374with the @code{CONFIGURE_DISABLE_BSP_SETTINGS} option.
3375
3376@subheading NOTES:
3377None.
3378
3379@c
3380@c === CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK ===
3381@c
3382@subsection Specify BSP Supports sbrk()
3383
3384@findex CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
3385
3386@table @b
3387@item CONSTANT:
3388@code{CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK}
3389
3390@item DATA TYPE:
3391Boolean feature macro.
3392
3393@item RANGE:
3394Defined or undefined.
3395
3396@item DEFAULT VALUE:
3397This option is BSP specific.
3398
3399@end table
3400
3401@subheading DESCRIPTION:
3402This configuration parameter is defined by a BSP to indicate that it
3403does not allocate all available memory to the C Program Heap used by
3404the Malloc Family of routines.
3405
3406If defined, when @code{malloc()} is unable to allocate memory, it will
3407call the BSP supplied @code{sbrk()} to obtain more memory.
3408
3409@subheading NOTES:
3410This parameter should not be defined by the application. Only the BSP
3411knows how it allocates memory to the C Program Heap.
3412
3413@c
3414@c === BSP_IDLE_TASK_BODY ===
3415@c
3416@subsection Specify BSP Specific Idle Task
3417
3418@findex BSP_IDLE_TASK_BODY
3419
3420@table @b
3421@item CONSTANT:
3422@code{BSP_IDLE_TASK_BODY}
3423
3424@item DATA TYPE:
3425Function pointer.
3426
3427@item RANGE:
3428Undefined or valid function pointer.
3429
3430@item DEFAULT VALUE:
3431This option is BSP specific.
3432
3433@end table
3434
3435@subheading DESCRIPTION:
3436If @code{BSP_IDLE_TASK_BODY} is defined by the BSP and
3437@code{CONFIGURE_IDLE_TASK_BODY} is not defined by the application,
3438then this BSP specific idle task body will be used.
3439
3440@subheading NOTES:
3441As it has knowledge of the specific CPU model, system controller logic,
3442and peripheral buses, a BSP specific IDLE task may be capable of turning
3443components off to save power during extended periods of no task activity
3444
3445@c
3446@c === BSP_IDLE_TASK_STACK_SIZE ===
3447@c
3448@subsection Specify BSP Suggested Value for IDLE Task Stack Size
3449
3450@findex BSP_IDLE_TASK_STACK_SIZE
3451
3452@table @b
3453@item CONSTANT:
3454@code{BSP_IDLE_TASK_STACK_SIZE}
3455
3456@item DATA TYPE:
3457Unsigned integer (@code{size_t}).
3458
3459@item RANGE:
3460Undefined or positive.
3461
3462@item DEFAULT VALUE:
3463This option is BSP specific.
3464
3465@end table
3466
3467@subheading DESCRIPTION:
3468If @code{BSP_IDLE_TASK_STACK_SIZE} is defined by the BSP and
3469@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is not defined by the application,
3470then this BSP suggested idle task stack size will be used.
3471
3472
3473@subheading NOTES:
3474The order of precedence for configuring the IDLE task stack size is:
3475
3476@itemize @bullet
3477@item RTEMS default minimum stack size.
3478@item If defined, then @code{CONFIGURE_MINIMUM_TASK_STACK_SIZE}.
3479@item If defined, then the BSP specific @code{BSP_IDLE_TASK_SIZE}.
3480@item If defined, then the application specified
3481@code{CONFIGURE_IDLE_TASK_SIZE}.
3482@end itemize
3483
3484@c XXX - add cross references to other related values.
3485
3486@c
3487@c === BSP_INITIAL_EXTENSION ===
3488@c
3489@subsection Specify BSP Specific User Extensions
3490
3491@findex BSP_INITIAL_EXTENSION
3492
3493@table @b
3494@item CONSTANT:
3495@code{BSP_INITIAL_EXTENSION}
3496
3497@item DATA TYPE:
3498List of user extension initializers (@code{rtems_extensions_table}).
3499
3500@item RANGE:
3501Undefined or a list of user extension initializers.
3502
3503@item DEFAULT VALUE:
3504This option is BSP specific.
3505
3506@end table
3507
3508@subheading DESCRIPTION:
3509If @code{BSP_INITIAL_EXTENSION} is defined by the BSP, then this BSP
3510specific initial extension will be placed as the last entry in the initial
3511extension table.
3512
3513@subheading NOTES:
3514None.
3515
3516@c
3517@c === BSP_INTERRUPT_STACK_SIZE ===
3518@c
3519@subsection Specifying BSP Specific Interrupt Stack Size
3520
3521@findex BSP_INTERRUPT_STACK_SIZE
3522
3523@table @b
3524@item CONSTANT:
3525@code{BSP_INTERRUPT_STACK_SIZE}
3526
3527@item DATA TYPE:
3528Unsigned integer (@code{size_t}).
3529
3530@item RANGE:
3531Undefined or positive.
3532
3533@item DEFAULT VALUE:
3534This option is BSP specific.
3535
3536@end table
3537
3538@subheading DESCRIPTION:
3539If @code{BSP_INTERRUPT_STACK_SIZE} is defined by the BSP and
3540@code{CONFIGURE_INTERRUPT_STACK_SIZE} is not defined by the application,
3541then this BSP specific interrupt stack size will be used.
3542
3543@subheading NOTES:
3544None.
3545
3546@c
3547@c === BSP_MAXIMUM_DEVICES ===
3548@c
3549@subsection Specifying BSP Specific Maximum Devices
3550
3551@findex BSP_MAXIMUM_DEVICES
3552
3553@table @b
3554@item CONSTANT:
3555@code{BSP_MAXIMUM_DEVICES}
3556
3557@item DATA TYPE:
3558Unsigned integer (@code{size_t}).
3559
3560@item RANGE:
3561Undefined or positive.
3562
3563@item DEFAULT VALUE:
3564This option is BSP specific.
3565
3566@end table
3567
3568@subheading DESCRIPTION:
3569If @code{BSP_MAXIMUM_DEVICES} is defined by the BSP and
3570@code{CONFIGURE_MAXIMUM_DEVICES} is not defined by the application,
3571then this BSP specific maximum device count will be used.
3572
3573@subheading NOTES:
3574This option is specific to the device file system (devFS) and should not be
3575confused with the @code{CONFIGURE_MAXIMUM_DRIVERS} option.  This parameter only
3576impacts the devFS and thus is only used by @code{<rtems/confdefs.h>} when
3577@code{CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM} is specified.
3578
3579@c
3580@c === BSP_ZERO_WORKSPACE_AUTOMATICALLY ===
3581@c
3582@subsection BSP Recommends RTEMS Workspace be Cleared
3583
3584@findex BSP_ZERO_WORKSPACE_AUTOMATICALLY
3585
3586@table @b
3587@item CONSTANT:
3588@code{BSP_ZERO_WORKSPACE_AUTOMATICALLY}
3589
3590@item DATA TYPE:
3591Boolean feature macro.
3592
3593@item RANGE:
3594Defined or undefined.
3595
3596@item DEFAULT VALUE:
3597This option is BSP specific.
3598
3599@end table
3600
3601@subheading DESCRIPTION:
3602If @code{BSP_ZERO_WORKSPACE_AUTOMATICALLY} is defined by the BSP and
3603@code{CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY} is not defined by the
3604application, then the workspace will be zeroed automatically.
3605
3606@subheading NOTES:
3607Zeroing memory can add significantly to system boot time. It is not
3608necessary for RTEMS but is often assumed by support libraries.
3609
3610@c
3611@c === CONFIGURE_BSP_PREREQUISITE_DRIVERS ===
3612@c
3613@subsection Specify BSP Prerequisite Drivers
3614
3615@findex CONFIGURE_BSP_PREREQUISITE_DRIVERS
3616
3617@table @b
3618@item CONSTANT:
3619@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS}
3620
3621@item DATA TYPE:
3622List of device driver initializers (@code{rtems_driver_address_table}).
3623
3624@item RANGE:
3625Undefined or array of device drivers.
3626
3627@item DEFAULT VALUE:
3628This option is BSP specific.
3629
3630@end table
3631
3632@subheading DESCRIPTION:
3633@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is defined if the BSP has device
3634drivers it needs to include in the Device Driver Table.  This should be
3635defined to the set of device driver entries that will be placed in the
3636table at the @b{FRONT} of the Device Driver Table and initialized before
3637any other drivers @b{INCLUDING} any application prerequisite drivers.
3638
3639@subheading NOTES:
3640@code{CONFIGURE_BSP_PREREQUISITE_DRIVERS} is typically used by BSPs
3641to configure common infrastructure such as bus controllers or probe
3642for devices.
3643
3644
3645@c
3646@c === Idle Task Configuration ===
3647@c
3648@section Idle Task Configuration
3649
3650This section defines the IDLE task related configuration parameters
3651supported by @code{<rtems/confdefs.h>}.
3652
3653@c
3654@c === CONFIGURE_IDLE_TASK_BODY ===
3655@c
3656@subsection Specify Application Specific Idle Task Body
3657
3658@findex CONFIGURE_IDLE_TASK_BODY
3659
3660@table @b
3661@item CONSTANT:
3662@code{CONFIGURE_IDLE_TASK_BODY}
3663
3664@item DATA TYPE:
3665Function pointer.
3666
3667@item RANGE:
3668Undefined or valid function pointer.
3669
3670@item DEFAULT VALUE:
3671This is not defined by default.
3672
3673@end table
3674
3675@subheading DESCRIPTION:
3676@code{CONFIGURE_IDLE_TASK_BODY} is set to the function name corresponding
3677to the application specific IDLE thread body.  If not specified, the
3678BSP or RTEMS default IDLE thread body will be used.
3679
3680@subheading NOTES:
3681None.
3682
3683@c
3684@c === CONFIGURE_IDLE_TASK_STACK_SIZE ===
3685@c
3686@subsection Specify Idle Task Stack Size
3687
3688@findex CONFIGURE_IDLE_TASK_STACK_SIZE
3689
3690@table @b
3691@item CONSTANT:
3692@code{CONFIGURE_IDLE_TASK_STACK_SIZE}
3693
3694@item DATA TYPE:
3695Unsigned integer (@code{size_t}).
3696
3697@item RANGE:
3698Undefined or positive.
3699
3700@item DEFAULT VALUE:
3701The default value is RTEMS_MINIMUM_STACK_SIZE.
3702
3703@end table
3704
3705@subheading DESCRIPTION:
3706@code{CONFIGURE_IDLE_TASK_STACK_SIZE} is set to the
3707desired stack size for the IDLE task.
3708
3709@subheading NOTES:
3710None.
3711
3712@c
3713@c === CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION ===
3714@c
3715@subsection Specify Idle Task Performs Application Initialization
3716
3717@findex CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
3718
3719@table @b
3720@item CONSTANT:
3721@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION}
3722
3723@item DATA TYPE:
3724Boolean feature macro.
3725
3726@item RANGE:
3727Defined or undefined.
3728
3729@item DEFAULT VALUE:
3730This is not defined by default, the user is assumed
3731to provide one or more initialization tasks.
3732
3733@end table
3734
3735@subheading DESCRIPTION:
3736@code{CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION} is set to
3737indicate that the user has configured @b{NO} user initialization tasks
3738or threads and that the user provided IDLE task will perform application
3739initialization and then transform itself into an IDLE task.
3740
3741@subheading NOTES:
3742If you use this option be careful, the user IDLE task @b{CANNOT} block
3743at all during the initialization sequence.  Further, once application
3744initialization is complete, it must make itself preemptible and enter
3745an IDLE body loop.
3746
3747The IDLE task must run at the lowest priority of all tasks in the system.
3748
3749@c
3750@c === Scheduler Algorithm Configuration ===
3751@c
3752@section Scheduler Algorithm Configuration
3753
3754This section defines the configuration parameters related to selecting a
3755scheduling algorithm for an application.  For the schedulers built into
3756RTEMS, the configuration is straightforward.  All that is required is
3757to define the configuration macro which specifies which scheduler you
3758want for in your application.  The currently available schedulers are:
3759
3760The pluggable scheduler interface also enables the user to provide their
3761own scheduling algorithm.  If you choose to do this, you must define
3762multiple configuration macros.
3763
3764@c
3765@c === CONFIGURE_SCHEDULER_PRIORITY ===
3766@c
3767@subsection Use Deterministic Priority Scheduler
3768
3769@findex CONFIGURE_SCHEDULER_PRIORITY
3770
3771@table @b
3772@item CONSTANT:
3773@code{CONFIGURE_SCHEDULER_PRIORITY}
3774
3775@item DATA TYPE:
3776Boolean feature macro.
3777
3778@item RANGE:
3779Defined or undefined.
3780
3781@item DEFAULT VALUE:
3782This is defined by default.
3783This is the default scheduler and specifying this
3784configuration parameter is redundant.
3785
3786@end table
3787
3788@subheading DESCRIPTION:
3789The Deterministic Priority Scheduler is the default scheduler in RTEMS
3790for uni-processor applications and is designed for predictable performance
3791under the highest loads.  It can block or unblock a thread in a constant
3792amount of time.  This scheduler requires a variable amount of memory
3793based upon the number of priorities configured in the system.
3794
3795@subheading NOTES:
3796This scheduler may be explicitly selected by defining
3797@code{CONFIGURE_SCHEDULER_PRIORITY} although this is equivalent to the
3798default behavior.
3799
3800@c
3801@c === CONFIGURE_SCHEDULER_SIMPLE ===
3802@c
3803@subsection Use Simple Priority Scheduler
3804
3805@findex CONFIGURE_SCHEDULER_SIMPLE
3806
3807@table @b
3808@item CONSTANT:
3809@code{CONFIGURE_SCHEDULER_SIMPLE}
3810
3811@item DATA TYPE:
3812Boolean feature macro.
3813
3814@item RANGE:
3815Defined or undefined.
3816
3817@item DEFAULT VALUE:
3818This is not defined by default.
3819
3820@end table
3821
3822@subheading DESCRIPTION:
3823When defined, the Simple Priority Scheduler is used at the thread
3824scheduling algorithm. This is an alternative scheduler in RTEMS.
3825It is designed to provide the same task scheduling behaviour as the
3826Deterministic Priority Scheduler while being simpler in implementation
3827and uses less memory for data management.  It maintains a single sorted
3828list of all ready threads.  Thus blocking or unblocking a thread is not
3829a constant time operation with this scheduler.
3830
3831This scheduler may be explicitly selected by defining
3832@code{CONFIGURE_SCHEDULER_SIMPLE}.
3833
3834@subheading NOTES:
3835This scheduler is appropriate for use in small systems where RAM is limited.
3836
3837@c
3838@c === CONFIGURE_SCHEDULER_EDF ===
3839@c
3840@subsection Use Earliest Deadline First Scheduler
3841
3842@findex CONFIGURE_SCHEDULER_EDF
3843
3844@table @b
3845@item CONSTANT:
3846@code{CONFIGURE_SCHEDULER_EDF}
3847
3848@item DATA TYPE:
3849Boolean feature macro.
3850
3851@item RANGE:
3852Defined or undefined.
3853
3854@item DEFAULT VALUE:
3855This is not defined by default.
3856
3857@end table
3858
3859@subheading DESCRIPTION:
3860The Earliest Deadline First Scheduler (EDF) is an alternative scheduler in
3861RTEMS for uni-processor applications. The EDF schedules tasks with dynamic
3862priorities equal to deadlines. The deadlines are declared using only
3863Rate Monotonic manager which handles periodic behavior.  Period is always
3864equal to deadline. If a task does not have any deadline declared or the
3865deadline is cancelled, the task is considered a background task which is
3866scheduled in case no deadline-driven tasks are ready to run.  Moreover,
3867multiple background tasks are scheduled according their priority assigned
3868upon initialization. All ready tasks reside in a single ready queue.
3869
3870This scheduler may be explicitly selected by defining
3871@code{CONFIGURE_SCHEDULER_EDF}.
3872
3873@subheading NOTES:
3874None.
3875
3876
3877@c
3878@c === CONFIGURE_SCHEDULER_CBS ===
3879@c
3880@subsection Use Constant Bandwidth Server Scheduler
3881
3882@findex CONFIGURE_SCHEDULER_CBS
3883
3884@table @b
3885@item CONSTANT:
3886@code{CONFIGURE_SCHEDULER_CBS}
3887
3888@item DATA TYPE:
3889Boolean feature macro.
3890
3891@item RANGE:
3892Defined or undefined.
3893
3894@item DEFAULT VALUE:
3895This is not defined by default.
3896
3897@end table
3898
3899@subheading DESCRIPTION:
3900The Constant Bandwidth Server Scheduler (CBS) is an alternative scheduler
3901in RTEMS for uni-processor applications. The CBS is a budget aware extension
3902of EDF scheduler. The goal of this scheduler is to ensure temporal
3903isolation of tasks. The CBS is equipped with a set of additional rules
3904and provides with an extensive API.
3905
3906This scheduler may be explicitly selected by defining
3907@code{CONFIGURE_SCHEDULER_CBS}.
3908@c XXX - add cross reference to API chapter
3909
3910@subheading NOTES:
3911None.
3912
3913@c
3914@c === CONFIGURE_SCHEDULER_PRIORITY_SMP ===
3915@c
3916@subsection Use Deterministic Priority SMP Scheduler
3917
3918@findex CONFIGURE_SCHEDULER_PRIORITY_SMP
3919
3920@table @b
3921@item CONSTANT:
3922@code{CONFIGURE_SCHEDULER_PRIORITY_SMP}
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 Deterministic Priority SMP Scheduler is derived from the Deterministic
3937Priority Scheduler but is capable of scheduling threads across multiple
3938processors.
3939
3940In a configuration with SMP enabled at configure time, it may be
3941explicitly selected by defining @code{CONFIGURE_SCHEDULER_PRIORITY_SMP}.
3942
3943@subheading NOTES:
3944This scheduler is only available when RTEMS is configured with SMP
3945support enabled.
3946
3947This scheduler is currently the default in SMP configurations and is
3948only selected when @code{CONFIGURE_SMP_APPLICATION} is defined.
3949
3950@c
3951@c === CONFIGURE_SCHEDULER_SIMPLE_SMP ===
3952@c
3953@subsection Use Simple SMP Priority Scheduler
3954
3955@findex CONFIGURE_SCHEDULER_SIMPLE_SMP
3956
3957@table @b
3958@item CONSTANT:
3959@code{CONFIGURE_SCHEDULER_SIMPLE_SMP}
3960
3961@item DATA TYPE:
3962Boolean feature macro.
3963
3964@item RANGE:
3965Defined or undefined.
3966
3967@item DEFAULT VALUE:
3968This is not defined by default.
3969
3970@end table
3971
3972@subheading DESCRIPTION:
3973The Simple SMP Priority Scheduler is derived from the Simple Priority
3974Scheduler but is capable of scheduling threads across multiple processors.
3975It is designed to provide the same task scheduling behaviour as the
3976Deterministic Priority Scheduler while distributing threads across
3977multiple processors.  Being based upon the Simple Priority Scheduler, it also
3978maintains a single sorted list of all ready threads.  Thus blocking or
3979unblocking a thread is not a constant time operation with this scheduler.
3980
3981In addition, when allocating threads to processors, the algorithm is not
3982constant time. This algorithm was not designed with efficiency as a
3983primary design goal.  Its primary design goal was to provide an SMP-aware
3984scheduling algorithm that is simple to understand.
3985
3986In a configuration with SMP enabled at configure time, it may be
3987explicitly selected by defining @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}.
3988
3989@subheading NOTES:
3990This scheduler is only available when RTEMS is configured with SMP
3991support enabled.
3992
3993@c
3994@c === Configuring a Scheduler Name ===
3995@c
3996@subsection Configuring a Scheduler Name
3997
3998@findex CONFIGURE_SCHEDULER_NAME
3999
4000@table @b
4001@item CONSTANT:
4002@code{CONFIGURE_SCHEDULER_NAME}
4003
4004@item DATA TYPE:
4005RTEMS Name (@code{rtems_name}).
4006
4007@item RANGE:
4008Any value.
4009
4010@item DEFAULT VALUE:
4011The default name is
4012@itemize @bullet
4013@item @code{"UCBS"} for the Uni-Processor CBS scheduler,
4014@item @code{"UEDF"} for the Uni-Processor EDF scheduler,
4015@item @code{"UPD "} for the Uni-Processor Deterministic Priority scheduler,
4016@item @code{"UPS "} for the Uni-Processor Simple Priority scheduler,
4017@item @code{"MPA "} for the Multi-Processor Priority Affinity scheduler, and
4018@item @code{"MPD "} for the Multi-Processor Deterministic Priority scheduler, and
4019@item @code{"MPS "} for the Multi-Processor Simple Priority scheduler.
4020@end itemize
4021
4022@end table
4023
4024@subheading DESCRIPTION:
4025Schedulers can be identified via @code{rtems_scheduler_ident}.  The name of the scheduler is determined by the configuration.
4026
4027@subheading NOTES:
4028None.
4029
4030@c
4031@c === Configuring a User Scheduler ===
4032@c
4033@subsection Configuring a User Provided Scheduler
4034
4035@findex CONFIGURE_SCHEDULER_USER
4036
4037@table @b
4038@item CONSTANT:
4039@code{CONFIGURE_SCHEDULER_USER}
4040
4041@item DATA TYPE:
4042Boolean feature macro.
4043
4044@item RANGE:
4045Defined or undefined.
4046
4047@item DEFAULT VALUE:
4048This is not defined by default.
4049
4050@end table
4051
4052@subheading DESCRIPTION:
4053RTEMS allows the application to provide its own task/thread
4054scheduling algorithm. In order to do this, one must define
4055@code{CONFIGURE_SCHEDULER_USER} to indicate the application provides its
4056own scheduling algorithm. If @code{CONFIGURE_SCHEDULER_USER} is defined
4057then the following additional macros must be defined:
4058
4059@itemize @bullet
4060@item @code{CONFIGURE_SCHEDULER_CONTEXT} must be defined to a static definition
4061of the scheduler context of the user scheduler.
4062
4063@item @code{CONFIGURE_SCHEDULER_CONTROLS} must be defined to a scheduler
4064control initializer for the user scheduler.
4065
4066@item @code{CONFIGURE_SCHEDULER_USER_PER_THREAD} must be defined to the type of
4067the per-thread information of the user scheduler.
4068
4069@end itemize
4070
4071@subheading NOTES:
4072At this time, the mechanics and requirements for writing a
4073new scheduler are evolving and not fully documented.  It is
4074recommended that you look at the existing Deterministic Priority
4075Scheduler in @code{cpukit/score/src/schedulerpriority*.c} for
4076guidance.  For guidance on the configuration macros, please examine
4077@code{cpukit/sapi/include/confdefs.h} for how these are defined for the
4078Deterministic Priority Scheduler.
4079
4080@c
4081@c === Configuring Clustered/Partitioned Schedulers ===
4082@c
4083@subsection Configuring Clustered/Partitioned Schedulers
4084
4085Clustered/partitioned scheduling helps to control the worst-case latencies in
4086the system.  The goal is to reduce the amount of shared state in the system and
4087thus prevention of lock contention.  Modern multi-processor systems tend to
4088have several layers of data and instruction caches.  With clustered/partitioned
4089scheduling it is possible to honour the cache topology of a system and thus
4090avoid expensive cache synchronization traffic.
4091
4092We have clustered scheduling in case the set of processors of a system is
4093partitioned into non-empty pairwise-disjoint subsets.  These subsets are called
4094clusters.  Clusters with a cardinality of one are partitions.  Each cluster is
4095owned by exactly one scheduler instance.  In order to use clustered/partitioned
4096scheduling the application designer has to answer two questions.
4097
4098@enumerate
4099@item How is the set of processors partitioned into clusters/partitions?
4100@item Which scheduler is used for which cluster/partition?
4101@end enumerate
4102
4103@subheading CONFIGURATION:
4104
4105The schedulers in an SMP system are statically configured on RTEMS.  Firstly
4106the application must select which scheduling algorithms are available with the
4107following defines
4108
4109@itemize @bullet
4110@item @code{CONFIGURE_SCHEDULER_PRIORITY_SMP},
4111@item @code{CONFIGURE_SCHEDULER_SIMPLE_SMP}, and
4112@item @code{CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP}.
4113@end itemize
4114
4115This is necessary to calculate the per-thread overhead introduced by the
4116schedulers.  After these definitions the configuration file must @code{#include
4117<rtems/scheduler.h>} to have access to scheduler specific configuration macros.
4118Each scheduler needs a context to store state information at run-time.  To
4119provide a context for each scheduler is the next step.  Use the following
4120macros to create scheduler contexts
4121
4122@itemize @bullet
4123@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(name, prio_count)},
4124@item @code{RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(name)}, and
4125@item @code{RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(name, prio_count)}.
4126@end itemize
4127
4128The @code{name} parameter is used as part of a designator for a global
4129variable, so the usual C/C++ designator rules apply.  Additional parameters are
4130scheduler specific.  The schedulers are registered in the system via the
4131scheduler table.  To create the scheduler table define
4132@code{CONFIGURE_SCHEDULER_CONTROLS} to a list of the following scheduler
4133control initializers
4134
4135@itemize @bullet
4136@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(name, obj_name)},
4137@item @code{RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(name, obj_name)}, and
4138@item @code{RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(name, obj_name)}.
4139@end itemize
4140
4141The @code{name} parameter must correspond to the parameter defining the
4142scheduler context.  The @code{obj_name} determines the scheduler object name
4143and can be used in @code{rtems_scheduler_ident()} to get the scheduler object
4144identifier.
4145
4146The last step is to define which processor uses which scheduler.
4147For this purpose a scheduler assignment table must be defined.  The entry count
4148of this table must be equal to the configured maximum processors
4149(@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}).  A processor assignment to a
4150scheduler can be optional or mandatory.  The boot processor must have a
4151scheduler assigned.  In case the system needs more mandatory processors than
4152available then a fatal run-time error will occur.  To specify the scheduler
4153assignments define @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} to a list of
4154@code{RTEMS_SCHEDULER_ASSIGN(index, attr)} and
4155@code{RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER} macros.  The @code{index} parameter
4156must be a valid index into the scheduler table.  The @code{attr} parameter
4157defines the scheduler assignment attributes.  By default a scheduler assignment
4158to a processor is optional.  For the scheduler assignment attribute use one of
4159the mutually exclusive variants
4160
4161@itemize @bullet
4162@item @code{RTEMS_SCHEDULER_ASSIGN_DEFAULT},
4163@item @code{RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY}, and
4164@item @code{RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL}.
4165@end itemize
4166
4167@subheading ERRORS:
4168
4169In case one of the scheduler indices in
4170@code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} is invalid a link-time error will
4171occur with an undefined reference to @code{RTEMS_SCHEDULER_INVALID_INDEX}.
4172
4173Some fatal errors may occur in case of scheduler configuration inconsistencies or a lack
4174of processors on the system.  The fatal source is
4175@code{RTEMS_FATAL_SOURCE_SMP}.  None of the errors is internal.
4176
4177@itemize @bullet
4178@item @code{SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER} - the boot
4179processor must have a scheduler assigned.
4180@item @code{SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT} - there exists a
4181mandatory processor beyond the range of physically or virtually available
4182processors.  The processor demand must be reduced for this system.
4183@item @code{SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED} - the start of a
4184mandatory processor failed during system initialization.  The system may not
4185have this processor at all or it could be a problem with a boot loader for
4186example.  Check the @code{CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS} definition.
4187@item @code{SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR} - it is not
4188allowed to start multitasking on a processor with no scheduler assigned.
4189@end itemize
4190
4191@subheading EXAMPLE:
4192
4193The following example shows a scheduler configuration for a hypothetical
4194product using two chip variants.  One variant has four processors which is used
4195for the normal product line and another provides eight processors for the
4196high-performance product line.  The first processor performs hard-real time
4197control of actuators and sensors.  The second processor is not used by RTEMS at
4198all and runs a Linux instance to provide a graphical user interface.  The
4199additional processors are used for a worker thread pool to perform data
4200processing operations.
4201
4202The processors managed by RTEMS use two Deterministic Priority scheduler
4203instances capable of dealing with 256 priority levels.  The scheduler with
4204index zero has the name @code{"IO  "}.  The scheduler with index one has the
4205name @code{"WORK"}.  The scheduler assignments of the first, third and fourth
4206processor are mandatory, so the system must have at least four processors,
4207otherwise a fatal run-time error will occur during system startup.  The
4208processor assignments for the fifth up to the eighth processor are optional so
4209that the same application can be used for the normal and high-performance
4210product lines.  The second processor has no scheduler assigned and runs Linux.
4211A hypervisor will ensure that the two systems cannot interfere in an
4212undesirable way.
4213
4214@example
4215@group
4216#define CONFIGURE_SMP_MAXIMUM_PROCESSORS 8
4217
4218#define CONFIGURE_MAXIMUM_PRIORITY 255
4219
4220/* Make the scheduler algorithm available */
4221
4222#define CONFIGURE_SCHEDULER_PRIORITY_SMP
4223
4224#include <rtems/scheduler.h>
4225
4226/* Create contexts for the two scheduler instances */
4227
4228RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
4229
4230RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
4231
4232/* Define the scheduler table */
4233
4234#define CONFIGURE_SCHEDULER_CONTROLS \
4235  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
4236    io, \
4237    rtems_build_name('I', 'O', ' ', ' ') \
4238  ), \
4239  RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
4240    work, \
4241    rtems_build_name('W', 'O', 'R', 'K') \
4242  )
4243
4244/* Define the processor to scheduler assignments */
4245
4246#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
4247  RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
4248  RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
4249  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
4250  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
4251  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
4252  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
4253  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
4254  RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
4255@end group
4256@end example
4257
4258@c
4259@c === SMP Specific Configuration Parameters ===
4260@c
4261@section SMP Specific Configuration Parameters
4262
4263When RTEMS is configured to support SMP target systems, there are other
4264configuration parameters which apply.
4265
4266@c XXX - add --enable-smp
4267
4268@c
4269@c === CONFIGURE_SMP_APPLICATION ===
4270@c
4271@subsection Enable SMP Support for Applications
4272
4273@findex CONFIGURE_SMP_APPLICATION
4274
4275@table @b
4276@item CONSTANT:
4277@code{CONFIGURE_SMP_APPLICATION}
4278
4279@item DATA TYPE:
4280Boolean feature macro.
4281
4282@item RANGE:
4283Defined or undefined.
4284
4285@item DEFAULT VALUE:
4286This is not defined by default.
4287
4288@end table
4289
4290@subheading DESCRIPTION:
4291@code{CONFIGURE_SMP_APPLICATION} must be defined to enable SMP support for the
4292application.
4293
4294@subheading NOTES:
4295This define may go away in the future in case all RTEMS components are SMP ready.
4296
4297@c
4298@c === CONFIGURE_SMP_MAXIMUM_PROCESSORS ===
4299@c
4300@subsection Specify Maximum Processors in SMP System
4301
4302@findex CONFIGURE_SMP_MAXIMUM_PROCESSORS
4303
4304@table @b
4305@item CONSTANT:
4306@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS}
4307
4308@item DATA TYPE:
4309Unsigned integer (@code{uint32_t}).
4310
4311@item RANGE:
4312Defined or undefined.
4313
4314@item DEFAULT VALUE:
4315The default value is 1, (if CONFIGURE_SMP_APPLICATION is defined).
4316
4317@end table
4318
4319@subheading DESCRIPTION:
4320@code{CONFIGURE_SMP_MAXIMUM_PROCESSORS} must be set to the number of
4321processors in the SMP configuration.
4322
4323@subheading NOTES:
4324If there are more processors available than configured, the rest will be
4325ignored.
4326
4327@c
4328@c === Device Driver Table ===
4329@c
4330@section Device Driver Table
4331
4332This section defines the configuration parameters related
4333to the automatic generation of a Device Driver Table.  As
4334@code{<rtems/confdefs.h>} only is aware of a small set of
4335standard device drivers, the generated Device Driver
4336Table is suitable for simple applications with no
4337custom device drivers.
4338
4339Note that network device drivers are not configured in the Device Driver Table.
4340
4341@c
4342@c === CONFIGURE_MAXIMUM_DRIVERS ===
4343@c
4344@subsection Specifying the Maximum Number of Device Drivers
4345
4346@findex CONFIGURE_MAXIMUM_DRIVERS
4347
4348@table @b
4349@item CONSTANT:
4350@code{CONFIGURE_MAXIMUM_DRIVERS}
4351
4352@item DATA TYPE:
4353Unsigned integer (@code{uint32_t}).
4354
4355@item RANGE:
4356Zero or positive.
4357
4358@item DEFAULT VALUE:
4359This is computed by default, and is set to the number of device drivers
4360configured using the @code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER}
4361configuration parameters.
4362
4363@end table
4364
4365@subheading DESCRIPTION:
4366@code{CONFIGURE_MAXIMUM_DRIVERS} is defined as the number of device
4367drivers per node.
4368
4369@subheading NOTES:
4370If the application will dynamically install device drivers, then this
4371configuration parameter must be larger than the number of statically
4372configured device drivers. Drivers configured using the
4373@code{CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER} configuration parameters
4374are statically installed.
4375
4376@c
4377@c === CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER ===
4378@c
4379@subsection Enable Console Device Driver
4380
4381@findex CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
4382
4383@table @b
4384@item CONSTANT:
4385@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER}
4386
4387@item DATA TYPE:
4388Boolean feature macro.
4389
4390@item RANGE:
4391Defined or undefined.
4392
4393@item DEFAULT VALUE:
4394This is not defined by default.
4395
4396@end table
4397
4398@subheading DESCRIPTION:
4399@code{CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER} is defined if the
4400application wishes to include the Console Device Driver.
4401
4402@subheading NOTES:
4403This device driver is responsible for providing standard input and output
4404using @i{/dev/console}.
4405
4406BSPs should be constructed in a manner that allows @code{printk()}
4407to work properly without the need for the console driver to be configured.
4408
4409@c
4410@c === CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER ===
4411@c
4412@subsection Enable Clock Driver
4413
4414@findex CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
4415
4416@table @b
4417@item CONSTANT:
4418@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER}
4419
4420@item DATA TYPE:
4421Boolean feature macro.
4422
4423@item RANGE:
4424Defined or undefined.
4425
4426@item DEFAULT VALUE:
4427This is not defined by default.
4428
4429@end table
4430
4431@subheading DESCRIPTION:
4432@code{CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER} is defined if the
4433application wishes to include the Clock Device Driver.
4434
4435@subheading NOTES:
4436This device driver is responsible for providing a regular
4437interrupt which invokes the @code{rtems_clock_tick} directive.
4438
4439If neither the Clock Driver not Benchmark Timer is enabled and
4440the configuration parameter
4441@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
4442then a compile time error will occur.
4443
4444@c
4445@c === CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER ===
4446@c
4447@subsection Enable the Benchmark Timer Driver
4448
4449@findex CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
4450
4451@table @b
4452@item CONSTANT:
4453@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER}
4454
4455@item DATA TYPE:
4456Boolean feature macro.
4457
4458@item RANGE:
4459Defined or undefined.
4460
4461@item DEFAULT VALUE:
4462This is not defined by default.
4463
4464@end table
4465
4466@subheading DESCRIPTION:
4467@code{CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER} is defined if the
4468application wishes to include the Timer Driver.  This device driver is
4469used to benchmark execution times by the RTEMS Timing Test Suites.
4470
4471@subheading NOTES:
4472If neither the Clock Driver not Benchmark Timer is enabled and
4473the configuration parameter
4474@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is not defined,
4475then a compile time error will occur.
4476
4477@c
4478@c === CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER ===
4479@c
4480@subsection Specify Clock and Benchmark Timer Drivers Are Not Needed
4481
4482@findex CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
4483
4484@table @b
4485@item CONSTANT:
4486@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER}
4487
4488@item DATA TYPE:
4489Boolean feature macro.
4490
4491@item RANGE:
4492Defined or undefined.
4493
4494@item DEFAULT VALUE:
4495This is not defined by default.
4496
4497@end table
4498
4499@subheading DESCRIPTION:
4500@code{CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER} is defined when
4501the application does @b{NOT} want the Clock Device Driver and is @b{NOT}
4502using the Timer Driver.  The inclusion or exclusion of the Clock Driver
4503must be explicit in user applications.
4504
4505@subheading NOTES:
4506This configuration parameter is intended to prevent the common user error
4507of using the Hello World example as the baseline for an application and
4508leaving out a clock tick source.
4509
4510@c
4511@c === CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER ===
4512@c
4513@subsection Enable Real-Time Clock Driver
4514
4515@findex CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
4516
4517@table @b
4518@item CONSTANT:
4519@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER}
4520
4521@item DATA TYPE:
4522Boolean feature macro.
4523
4524@item RANGE:
4525Defined or undefined.
4526
4527@item DEFAULT VALUE:
4528This is not defined by default.
4529
4530@end table
4531
4532@subheading DESCRIPTION:
4533@code{CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER} is defined if the
4534application wishes to include the Real-Time Clock Driver.
4535
4536@subheading NOTES:
4537Most BSPs do not include support for a real-time clock. This is because
4538many boards do not include the required hardware.
4539
4540If this is defined and the BSP does not have this device driver, then
4541the user will get a link time error for an undefined symbol.
4542
4543@c
4544@c === CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER ===
4545@c
4546@subsection Enable the Watchdog Device Driver
4547
4548@findex CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
4549
4550@table @b
4551@item CONSTANT:
4552@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
4553
4554@item DATA TYPE:
4555Boolean feature macro.
4556
4557@item RANGE:
4558Defined or undefined.
4559
4560@item DEFAULT VALUE:
4561This is not defined by default.
4562
4563@end table
4564
4565@subheading DESCRIPTION:
4566@code{CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER}
4567is defined if the application wishes to include the Watchdog Driver.
4568
4569@subheading NOTES:
4570Most BSPs do not include support for a watchdog device driver. This is
4571because many boards do not include the required hardware.
4572
4573If this is defined and the BSP does not have this device driver, then
4574the user will get a link time error for an undefined symbol.
4575
4576@c
4577@c === CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER ===
4578@c
4579@subsection Enable the Graphics Frame Buffer Device Driver
4580
4581@findex CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
4582
4583@table @b
4584@item CONSTANT:
4585@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER}
4586
4587@item DATA TYPE:
4588Boolean feature macro.
4589
4590@item RANGE:
4591Defined or undefined.
4592
4593@item DEFAULT VALUE:
4594This is not defined by default.
4595
4596@end table
4597
4598@subheading DESCRIPTION:
4599@code{CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER} is defined
4600if the application wishes to include the BSP's Frame Buffer Device Driver.
4601
4602@subheading NOTES:
4603Most BSPs do not include support for a Frame Buffer Device Driver. This is
4604because many boards do not include the required hardware.
4605
4606If this is defined and the BSP does not have this device driver, then
4607the user will get a link time error for an undefined symbol.
4608
4609@c
4610@c === CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER ===
4611@c
4612@subsection Enable Stub Device Driver
4613
4614@findex CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
4615
4616@table @b
4617@item CONSTANT:
4618@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER}
4619
4620@item DATA TYPE:
4621Boolean feature macro.
4622
4623@item RANGE:
4624Defined or undefined.
4625
4626@item DEFAULT VALUE:
4627This is not defined by default.
4628
4629@end table
4630
4631@subheading DESCRIPTION:
4632@code{CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER} is defined if the
4633application wishes to include the Stub Device Driver.
4634
4635@subheading NOTES:
4636This device driver simply provides entry points that return successful
4637and is primarily a test fixture. It is supported by all BSPs.
4638
4639@c
4640@c === CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS ===
4641@c
4642@subsection Specify Application Prerequisite Device Drivers
4643
4644@findex CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
4645
4646@table @b
4647@item CONSTANT:
4648@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS}
4649
4650@item DATA TYPE:
4651device driver entry structures
4652
4653@item RANGE:
4654Undefined or set of device driver entry structures
4655
4656@item DEFAULT VALUE:
4657This is not defined by default.
4658
4659@end table
4660
4661@subheading DESCRIPTION:
4662@code{CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS} is defined if the
4663application has device drivers it needs to include in the Device Driver
4664Table.  This should be defined to the set of device driver entries that
4665will be placed in the table at the @b{FRONT} of the Device Driver Table
4666and initialized before any other drivers @b{EXCEPT} any BSP prerequisite
4667drivers.
4668
4669@subheading NOTES:
4670In some cases, it is used by System On Chip BSPs to support peripheral
4671buses beyond those normally found on the System On Chip. For example,
4672this is used by one RTEMS system which has implemented a SPARC/ERC32
4673based board with VMEBus. The VMEBus Controller initialization is performed
4674by a device driver configured via this configuration parameter.
4675
4676@c XXX Add example
4677
4678@c
4679@c === CONFIGURE_APPLICATION_EXTRA_DRIVERS ===
4680@c
4681@subsection Specify Extra Application Device Drivers
4682
4683@findex CONFIGURE_APPLICATION_EXTRA_DRIVERS
4684
4685@table @b
4686@item CONSTANT:
4687@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS}
4688
4689@item DATA TYPE:
4690device driver entry structures
4691
4692@item RANGE:
4693Undefined or set of device driver entry structures
4694
4695@item DEFAULT VALUE:
4696This is not defined by default.
4697
4698@end table
4699
4700@subheading DESCRIPTION:
4701@code{CONFIGURE_APPLICATION_EXTRA_DRIVERS} is defined if the
4702application has device drivers it needs to include in the Device Driver
4703Table.  This should be defined to the set of device driver entries that
4704will be placed in the table at the @b{END} of the Device Driver Table.
4705
4706@subheading NOTES:
4707None.
4708
4709@c
4710@c === CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER ===
4711@c
4712@subsection Enable /dev/null Device Driver
4713
4714@findex CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
4715@cindex /dev/null
4716
4717@table @b
4718@item CONSTANT:
4719@code{CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER}
4720
4721@item DATA TYPE:
4722Boolean feature macro.
4723
4724@item RANGE:
4725Defined or undefined.
4726
4727@item DEFAULT VALUE:
4728This is not defined by default.
4729
4730@end table
4731
4732@subheading DESCRIPTION:
4733This configuration variable is specified to enable @i{/dev/null}
4734device driver.
4735
4736@subheading NOTES:
4737This device driver is supported by all BSPs.
4738
4739@c
4740@c === CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER ===
4741@c
4742@subsection Enable /dev/zero Device Driver
4743
4744@findex CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
4745@cindex /dev/zero
4746
4747@table @b
4748@item CONSTANT:
4749@code{CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER}
4750
4751@item DATA TYPE:
4752Boolean feature macro.
4753
4754@item RANGE:
4755Defined or undefined.
4756
4757@item DEFAULT VALUE:
4758This is not defined by default.
4759
4760@end table
4761
4762@subheading DESCRIPTION:
4763This configuration variable is specified to enable @i{/dev/zero}
4764device driver.
4765
4766@subheading NOTES:
4767This device driver is supported by all BSPs.
4768
4769@c
4770@c === CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE ===
4771@c
4772@subsection Specifying Application Defined Device Driver Table
4773
4774@findex CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
4775
4776@table @b
4777@item CONSTANT:
4778@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE}
4779
4780@item DATA TYPE:
4781Boolean feature macro.
4782
4783@item RANGE:
4784Defined or undefined.
4785
4786@item DEFAULT VALUE:
4787This is not defined by default, indicating the @code{<rtems/confdefs.h>}
4788is providing the device driver table.
4789
4790@end table
4791
4792@subheading DESCRIPTION:
4793@code{CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE} is defined if the application
4794wishes to provide their own Device Driver Table.
4795
4796The table must be an array of @code{rtems_driver_address_table} entries named
4797@code{_IO_Driver_address_table}.  The application must also provide a const
4798variable @code{_IO_Number_of_drivers} of type @code{size_t} indicating the
4799number of entries in the @code{_IO_Driver_address_table}.
4800
4801@subheading NOTES:
4802It is expected that there the application would only rarely need to do this.
4803
4804@c
4805@c === Multiprocessing Configuration ===
4806@c
4807@section Multiprocessing Configuration
4808
4809This section defines the multiprocessing related system configuration
4810parameters supported by @code{<rtems/confdefs.h>}.  They are only used
4811if the Multiprocessing Support (distinct from the SMP support) is enabled
4812at configure time using the @code{--enable-multiprocessing} option.
4813
4814Additionally, this class of Configuration Constants are only applicable if
4815@code{CONFIGURE_MP_APPLICATION} is defined.
4816
4817@c
4818@c === CONFIGURE_MP_APPLICATION ===
4819@c
4820@subsection Specify Application Will Use Multiprocessing
4821
4822@findex CONFIGURE_MP_APPLICATION
4823
4824@table @b
4825@item CONSTANT:
4826@code{CONFIGURE_MP_APPLICATION}
4827
4828@item DATA TYPE:
4829Boolean feature macro.
4830
4831@item RANGE:
4832Defined or undefined.
4833
4834@item DEFAULT VALUE:
4835This is not defined by default.
4836
4837@end table
4838
4839@subheading DESCRIPTION:
4840This configuration parameter must be defined to indicate
4841that the application intends to be part of a multiprocessing
4842configuration. Additional configuration parameters are assumed to be
4843provided.
4844
4845@subheading NOTES:
4846This has no impact unless RTEMS was configured and built using the
4847@code{--enable-multiprocessing} option.
4848
4849@c
4850@c === CONFIGURE_MP_NODE_NUMBER ===
4851@c
4852@subsection Configure Node Number in Multiprocessor Configuration
4853
4854@findex CONFIGURE_MP_NODE_NUMBER
4855
4856@table @b
4857@item CONSTANT:
4858@code{CONFIGURE_MP_NODE_NUMBER}
4859
4860@item DATA TYPE:
4861Unsigned integer (@code{uint32_t}).
4862
4863@item RANGE:
4864Positive.
4865
4866@item DEFAULT VALUE:
4867The default value is @code{NODE_NUMBER}, which is assumed to be
4868set by the compilation environment.
4869
4870@end table
4871
4872@subheading DESCRIPTION:
4873@code{CONFIGURE_MP_NODE_NUMBER} is the node number of
4874this node in a multiprocessor system.
4875
4876@subheading NOTES:
4877In the RTEMS Multiprocessing Test Suite, the node number is derived from
4878the Makefile variable @code{NODE_NUMBER}. The same code is compiled with
4879the @code{NODE_NUMBER} set to different values. The test programs behave
4880differently based upon their node number.
4881
4882
4883@c
4884@c === CONFIGURE_MP_MAXIMUM_NODES ===
4885@c
4886@subsection Configure Maximum Node in Multiprocessor Configuration
4887
4888@findex CONFIGURE_MP_MAXIMUM_NODES
4889
4890@table @b
4891@item CONSTANT:
4892@code{CONFIGURE_MP_MAXIMUM_NODES}
4893
4894@item DATA TYPE:
4895Unsigned integer (@code{uint32_t}).
4896
4897@item RANGE:
4898Positive.
4899
4900@item DEFAULT VALUE:
4901The default value is 2.
4902
4903@end table
4904
4905@subheading DESCRIPTION:
4906@code{CONFIGURE_MP_MAXIMUM_NODES} is the maximum number of nodes in a
4907multiprocessor system.
4908
4909@subheading NOTES:
4910None.
4911
4912@c
4913@c === CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS ===
4914@c
4915@subsection Configure Maximum Global Objects in Multiprocessor Configuration
4916
4917@findex CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
4918
4919@table @b
4920@item CONSTANT:
4921@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS}
4922
4923@item DATA TYPE:
4924Unsigned integer (@code{uint32_t}).
4925
4926@item RANGE:
4927Positive.
4928
4929@item DEFAULT VALUE:
4930The default value is 32.
4931
4932@end table
4933
4934@subheading DESCRIPTION:
4935@code{CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS} is the maximum number of
4936concurrently active global objects in a multiprocessor system.
4937
4938@subheading NOTES:
4939This value corresponds to the total number of objects which can be
4940created with the @code{RTEMS_GLOBAL} attribute.
4941
4942@c
4943@c === CONFIGURE_MP_MAXIMUM_PROXIES ===
4944@c
4945@subsection Configure Maximum Proxies in Multiprocessor Configuration
4946
4947@findex CONFIGURE_MP_MAXIMUM_PROXIES
4948
4949@table @b
4950@item CONSTANT:
4951@code{CONFIGURE_MP_MAXIMUM_PROXIES}
4952
4953@item DATA TYPE:
4954Unsigned integer (@code{uint32_t}).
4955
4956@item RANGE:
4957Undefined or positive.
4958
4959@item DEFAULT VALUE:
4960The default value is 32.
4961
4962@end table
4963
4964@subheading DESCRIPTION:
4965@code{CONFIGURE_MP_MAXIMUM_PROXIES} is the maximum number of concurrently
4966active thread/task proxies on this node in a multiprocessor system.
4967
4968@subheading NOTES:
4969Since a proxy is used to represent a remote task/thread which is blocking on
4970this node. This configuration parameter reflects the maximum number of
4971remote tasks/threads which can be blocked on objects on this node.
4972
4973@c XXX - add xref to proxy discussion in MP chapter
4974
4975@c
4976@c === CONFIGURE_MP_MPCI_TABLE_POINTER ===
4977@c
4978@subsection Configure MPCI in Multiprocessor Configuration
4979
4980@findex CONFIGURE_MP_MPCI_TABLE_POINTER
4981
4982@table @b
4983@item CONSTANT:
4984@code{CONFIGURE_MP_MPCI_TABLE_POINTER}
4985
4986@item DATA TYPE:
4987pointer to @code{rtems_mpci_table}
4988
4989@item RANGE:
4990undefined or valid pointer
4991
4992@item DEFAULT VALUE:
4993This is not defined by default.
4994
4995@end table
4996
4997@subheading DESCRIPTION:
4998@code{CONFIGURE_MP_MPCI_TABLE_POINTER} is the pointer to the
4999MPCI Configuration Table.  The default value of this field is
5000@code{&MPCI_table}.
5001
5002@subheading NOTES:
5003RTEMS provides a Shared Memory MPCI Device Driver which can be used on
5004any Multiprocessor System assuming the BSP provides the proper set of
5005supporting methods.
5006
5007@c
5008@c === CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE ===
5009@c
5010@subsection Do Not Generate Multiprocessor Configuration Table
5011
5012@findex CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
5013
5014@table @b
5015@item CONSTANT:
5016@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE}
5017
5018@item DATA TYPE:
5019Boolean feature macro.
5020
5021@item RANGE:
5022Defined or undefined.
5023
5024@item DEFAULT VALUE:
5025This is not defined by default.
5026
5027@end table
5028
5029@subheading DESCRIPTION:
5030@code{CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE} is defined if the
5031application wishes to provide their own Multiprocessing Configuration
5032Table.  The generated table is named @code{Multiprocessing_configuration}.
5033
5034@subheading NOTES:
5035This is a configuration parameter which is very unlikely to be used by
5036an application. If you find yourself wanting to use it in an application,
5037please reconsider and discuss this on the RTEMS Users mailing list.
5038
5039@c
5040@c === Ada Tasks ===
5041@c
5042@section Ada Tasks
5043
5044This section defines the system configuration parameters supported
5045by @code{<rtems/confdefs.h>} related to configuring RTEMS to support
5046a task using Ada tasking with GNAT/RTEMS.
5047
5048These configuration parameters are only available when RTEMS is built with
5049the @code{--enable-ada} configure option and the application specifies
5050@code{CONFIGURE_GNAT_RTEMS}.
5051
5052Additionally RTEMS includes an Ada language binding to the Classic
5053API which has a test suite. This test suite is enabled only when
5054@code{--enable-tests} and @code{--enable-expada} are specified on the
5055configure command.
5056
5057@c
5058@c === CONFIGURE_GNAT_RTEMS ===
5059@c
5060@subsection Specify Application Includes Ada Code
5061
5062@findex CONFIGURE_GNAT_RTEMS
5063
5064@table @b
5065@item CONSTANT:
5066@code{CONFIGURE_GNAT_RTEMS}
5067
5068@item DATA TYPE:
5069Boolean feature macro.
5070
5071@item RANGE:
5072Defined or undefined.
5073
5074@item DEFAULT VALUE:
5075This is not defined by default.
5076
5077@end table
5078
5079@subheading DESCRIPTION:
5080@code{CONFIGURE_GNAT_RTEMS} is defined to inform RTEMS that the GNAT
5081Ada run-time is to be used by the application.
5082
5083@subheading NOTES:
5084This configuration parameter is critical as it makes
5085@code{<rtems/confdefs.h>} configure the resources (POSIX API Threads,
5086Mutexes, Condition Variables, and Keys) used implicitly by the GNAT
5087run-time.
5088
5089@c
5090@c === CONFIGURE_MAXIMUM_ADA_TASKS ===
5091@c
5092@subsection Specify the Maximum Number of Ada Tasks.
5093
5094@findex CONFIGURE_MAXIMUM_ADA_TASKS
5095
5096@table @b
5097@item CONSTANT:
5098@code{CONFIGURE_MAXIMUM_ADA_TASKS}
5099
5100@item DATA TYPE:
5101Unsigned integer (@code{uint32_t}).
5102
5103@item RANGE:
5104Undefined or positive.
5105
5106@item DEFAULT VALUE:
5107If @code{CONFIGURE_GNAT_RTEMS} is defined, then the
5108default value is 20, otherwise the default value is 0.
5109
5110@end table
5111
5112@subheading DESCRIPTION:
5113@code{CONFIGURE_MAXIMUM_ADA_TASKS} is the number of Ada tasks that can
5114be concurrently active in the system.
5115
5116@subheading NOTES:
5117None.
5118
5119@c
5120@c === CONFIGURE_MAXIMUM_FAKE_ADA_TASKS ===
5121@c
5122@subsection Specify the Maximum Fake Ada Tasks
5123
5124@findex CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
5125
5126@table @b
5127@item CONSTANT:
5128@findex @code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS}
5129
5130@item DATA TYPE:
5131Unsigned integer (@code{uint32_t}).
5132
5133@item RANGE:
5134Zero or positive.
5135
5136@item DEFAULT VALUE:
5137The default value is 0.
5138
5139@end table
5140
5141@subheading DESCRIPTION:
5142@code{CONFIGURE_MAXIMUM_FAKE_ADA_TASKS} is the number of @i{fake} Ada tasks
5143that can be concurrently active in the system.  A @i{fake} Ada task is
5144a non-Ada task that makes calls back into Ada code and thus implicitly
5145uses the Ada run-time.
5146
5147@subheading NOTES:
5148None.
5149
5150@c
5151@c === Go Tasks ===
5152@c
5153@section Go Tasks
5154
5155@c
5156@c === CONFIGURE_ENABLE_GO ===
5157@c
5158@subsection Specify Application Includes Go Code
5159
5160@findex CONFIGURE_ENABLE_GO
5161
5162@table @b
5163@item CONSTANT:
5164@code{CONFIGURE_ENABLE_GO}
5165
5166@item DATA TYPE:
5167Boolean feature macro.
5168
5169@item RANGE:
5170Defined or undefined.
5171
5172@item DEFAULT VALUE:
5173This is not defined by default.
5174
5175@end table
5176
5177@subheading DESCRIPTION:
5178@code{CONFIGURE_ENABLE_GO} is defined to inform RTEMS that the Go
5179run-time is to be used by the application.
5180
5181@subheading NOTES:
5182The Go language support is experimental
5183
5184@c
5185@c === CONFIGURE_MAXIMUM_GOROUTINES ===
5186@c
5187@subsection Specify the maximum number of Go routines
5188
5189@findex CONFIGURE_MAXIMUM_GOROUTINES
5190
5191@table @b
5192@item CONSTANT:
5193@code{CONFIGURE_MAXIMUM_GOROUTINES}
5194
5195@item DATA TYPE:
5196Unsigned integer (@code{uint32_t}).
5197
5198@item RANGE:
5199Zero or positive.
5200
5201@item DEFAULT VALUE:
5202The default value is 400
5203
5204@end table
5205
5206@subheading DESCRIPTION:
5207@code{CONFIGURE_MAXIMUM_GOROUTINES} is defined to specify the maximum number of
5208Go routines.
5209
5210@subheading NOTES:
5211The Go language support is experimental
5212
5213@c
5214@c === CONFIGURE_MAXIMUM_GO_CHANNELS ===
5215@c
5216@subsection Specify the maximum number of Go Channels
5217
5218@findex CONFIGURE_MAXIMUM_GO_CHANNELS
5219
5220@table @b
5221@item CONSTANT:
5222@code{CONFIGURE_MAXIMUM_GO_CHANNELS}
5223
5224@item DATA TYPE:
5225Unsigned integer (@code{uint32_t}).
5226
5227@item RANGE:
5228Zero or positive.
5229
5230@item DEFAULT VALUE:
5231The default value is 500
5232
5233@end table
5234
5235@subheading DESCRIPTION:
5236@code{CONFIGURE_MAXIMUM_GO_CHANNELS} is defined to specify the maximum number
5237of Go channels.
5238
5239@subheading NOTES:
5240The Go language support is experimental
5241
5242@c
5243@c === Configuration Data Structures ===
5244@c
5245@section Configuration Data Structures
5246
5247It is recommended that applications be configured using
5248@code{<rtems/confdefs.h>} as it is simpler and insulates applications
5249from changes in the underlying data structures.  However, it is sometimes
5250important to understand the data structures that are automatically filled
5251in by the configuration parameters.  This section describes the primary
5252configuration data structures.
5253
5254If the user wishes to see the details of a particular data structure,
5255they are are advised to look at the source code. After all, that is one
5256of the advantages of RTEMS.
Note: See TracBrowser for help on using the repository browser.