source: rtems-docs/c_user/configuring_a_system.rst @ d389819

4.115
Last change on this file since d389819 was d389819, checked in by Amar Takhar <amar@…>, on 01/18/16 at 05:37:40

Convert all Unicode to ASCII(128)

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