source: rtems-docs/c_user/configuring_a_system.rst @ 489740f

4.115
Last change on this file since 489740f was 489740f, checked in by Chris Johns <chrisj@…>, on 05/20/16 at 02:47:09

Set SPDX License Identifier in each source file.

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