source: rtems-docs/ada_user/configuring_a_system.rst @ 4783b0d

4.115
Last change on this file since 4783b0d was 4783b0d, checked in by Amar Takhar <amar@…>, on 01/17/16 at 16:37:28

Split document into seperate files by section.

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