source: rtems-docs/c-user/configuring_a_system.rst @ d078405

5am
Last change on this file since d078405 was d078405, checked in by Sebastian Huber <sebastian.huber@…>, on Nov 6, 2017 at 12:01:43 PM

CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER

Close #3170.
Update #3199.

  • Property mode set to 100644
File size: 128.3 KB
RevLine 
[489740f]1.. comment SPDX-License-Identifier: CC-BY-SA-4.0
2
[c9aaf31]3.. COMMENT: COPYRIGHT (c) 1988-2008.
4.. COMMENT: On-Line Applications Research Corporation (OAR).
5.. COMMENT: All rights reserved.
6
[6c56401]7.. index:: configuring a system
[3384994]8.. _Configuring a System:
[6c56401]9
[fd6dc8c]10Configuring a System
[4da4a15]11********************
[fd6dc8c]12
13Introduction
14============
15
[c9aaf31]16RTEMS must be configured for an application.  This configuration encompasses a
17variety of information including the length of each clock tick, the maximum
18number of each information RTEMS object that can be created, the application
19initialization tasks, the task scheduling algorithm to be used, and the device
20drivers in the application.
21
22Although this information is contained in data structures that are used by
[265cc70]23RTEMS at system initialization time, the data structures themselves must not be
24generated by hand. RTEMS provides a set of macros system which provides a
25simple standard mechanism to automate the generation of these structures.
[c9aaf31]26
[fd6dc8c]27.. index:: confdefs.h
28.. index:: <rtems/confdefs.h>
29
[c9aaf31]30The RTEMS header file ``<rtems/confdefs.h>`` is at the core of the automatic
31generation of system configuration. It is based on the idea of setting macros
32which define configuration parameters of interest to the application and
33defaulting or calculating all others. This variety of macros can automatically
34produce all of the configuration data required for an RTEMS application.
35
36.. sidebar: Trivia:
37
38  The term ``confdefs`` is shorthand for a *Configuration Defaults*.
39
40As a general rule, application developers only specify values for the
41configuration parameters of interest to them. They define what resources or
42features they require. In most cases, when a parameter is not specified, it
43defaults to zero (0) instances, a standards compliant value, or disabled as
44appropriate. For example, by default there will be 256 task priority levels but
45this can be lowered by the application. This number of priority levels is
46required to be compliant with the RTEID/ORKID standards upon which the Classic
47API is based. There are similar cases where the default is selected to be
48compliant with with the POSIX standard.
[fd6dc8c]49
50For each configuration parameter in the configuration tables, the macro
[c9aaf31]51corresponding to that field is discussed. The RTEMS Maintainers expect that all
52systems can be easily configured using the ``<rtems/confdefs.h>`` mechanism and
53that using this mechanism will avoid internal RTEMS configuration changes
54impacting applications.
[fd6dc8c]55
56Default Value Selection Philosophy
57==================================
58
[c9aaf31]59The user should be aware that the defaults are intentionally set as low as
60possible.  By default, no application resources are configured.  The
61``<rtems/confdefs.h>`` file ensures that at least one application task or
62thread is configured and that at least one of the initialization task/thread
63tables is configured.
[fd6dc8c]64
[9aafb39]65.. _Sizing the RTEMS Workspace:
66
[fd6dc8c]67Sizing the RTEMS Workspace
68==========================
69
[c9aaf31]70The RTEMS Workspace is a user-specified block of memory reserved for use by
71RTEMS.  The application should NOT modify this memory.  This area consists
72primarily of the RTEMS data structures whose exact size depends upon the values
73specified in the Configuration Table.  In addition, task stacks and floating
74point context areas are dynamically allocated from the RTEMS Workspace.
75
76The ``<rtems/confdefs.h>`` mechanism calculates the size of the RTEMS Workspace
77automatically.  It assumes that all tasks are floating point and that all will
78be allocated the minimum stack space.  This calculation includes the amount of
79memory that will be allocated for internal use by RTEMS. The automatic
80calculation may underestimate the workspace size truly needed by the
81application, in which case one can use the ``CONFIGURE_MEMORY_OVERHEAD`` macro
82to add a value to the estimate. See :ref:`Specify Memory Overhead` for more
83details.
[fd6dc8c]84
85The memory area for the RTEMS Workspace is determined by the BSP.  In case the
86RTEMS Workspace is too large for the available memory, then a fatal run-time
87error occurs and the system terminates.
88
[f02e872]89The file ``<rtems/confdefs.h>`` will calculate the value of the
90``work_space_size`` parameter of the Configuration Table. There are many
[c9aaf31]91parameters the application developer can specify to help ``<rtems/confdefs.h>``
92in its calculations.  Correctly specifying the application requirements via
93parameters such as ``CONFIGURE_EXTRA_TASK_STACKS`` and
94``CONFIGURE_MAXIMUM_TASKS`` is critical for production software.
95
96For each class of objects, the allocation can operate in one of two ways.  The
97default way has an ceiling on the maximum number of object instances which can
98concurrently exist in the system. Memory for all instances of that object class
99is reserved at system initialization.  The second way allocates memory for an
100initial number of objects and increases the current allocation by a fixed
101increment when required. Both ways allocate space from inside the RTEMS
102Workspace.
103
104See :ref:`Unlimited Objects` for more details about the second way, which
105allows for dynamic allocation of objects and therefore does not provide
106determinism.  This mode is useful mostly for when the number of objects cannot
107be determined ahead of time or when porting software for which you do not know
108the object requirements.
109
110The space needed for stacks and for RTEMS objects will vary from one version of
111RTEMS and from one target processor to another.  Therefore it is safest to use
112``<rtems/confdefs.h>`` and specify your application's requirements in terms of
113the numbers of objects and multiples of ``RTEMS_MINIMUM_STACK_SIZE``, as far as
114is possible. The automatic estimates of space required will in general change
115when:
[fd6dc8c]116
117- a configuration parameter is changed,
118
119- task or interrupt stack sizes change,
120
121- the floating point attribute of a task changes,
122
123- task floating point attribute is altered,
124
125- RTEMS is upgraded, or
126
127- the target processor is changed.
128
129Failure to provide enough space in the RTEMS Workspace may result in fatal
130run-time errors terminating the system.
131
132Potential Issues with RTEMS Workspace Size Estimation
133=====================================================
134
[c9aaf31]135The ``<rtems/confdefs.h>`` file estimates the amount of memory required for the
136RTEMS Workspace.  This estimate is only as accurate as the information given to
137``<rtems/confdefs.h>`` and may be either too high or too low for a variety of
138reasons.  Some of the reasons that ``<rtems/confdefs.h>`` may reserve too much
139memory for RTEMS are:
[fd6dc8c]140
141- All tasks/threads are assumed to be floating point.
142
[c9aaf31]143Conversely, there are many more reasons that the resource estimate could be too
144low:
[fd6dc8c]145
[c9aaf31]146- Task/thread stacks greater than minimum size must be accounted for explicitly
147  by developer.
[fd6dc8c]148
149- Memory for messages is not included.
150
151- Device driver requirements are not included.
152
153- Network stack requirements are not included.
154
155- Requirements for add-on libraries are not included.
156
157In general, ``<rtems/confdefs.h>`` is very accurate when given enough
[c9aaf31]158information.  However, it is quite easy to use a library and forget to account
159for its resources.
[fd6dc8c]160
161Format to be followed for making changes in this file
162=====================================================
163
[53bb72e]164MACRO NAME:
[d389819]165  Should be alphanumeric. Can have '_' (underscore).
[fd6dc8c]166
[53bb72e]167DATA TYPE:
[fd6dc8c]168  Please refer to all existing formats.
169
[53bb72e]170RANGE:
[fd6dc8c]171  The range depends on the Data Type of the macro.
172
[c9aaf31]173  - If the data type is of type task priority, then its value should be an
174    integer in the range of 1 to 255.
175
176  - If the data type is an integer, then it can have numbers, characters (in
177    case the value is defined using another macro) and arithmetic operations
[9aafb39]178    (+, -, \*, /).
[fd6dc8c]179
[c9aaf31]180  - If the data type is a function pointer the first character should be an
181    alphabet or an underscore. The rest of the string can be alphanumeric.
[fd6dc8c]182
[c9aaf31]183  - If the data type is RTEMS Attributes or RTEMS Mode then the string should
184    be alphanumeric.
[fd6dc8c]185
[c9aaf31]186  - If the data type is RTEMS NAME then the value should be an integer>=0 or
[53bb72e]187    ``RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )``
[c9aaf31]188
[53bb72e]189DEFAULT VALUE:
[c9aaf31]190  The default value should be in the following formats- Please note that the
191  '.' (full stop) is necessary.
192
193  - In case the value is not defined then: This is not defined by default.
[fd6dc8c]194
[c9aaf31]195  - If we know the default value then: The default value is XXX.
196
197  - If the default value is BSP Specific then: This option is BSP specific.
198
[53bb72e]199DESCRIPTION:
[fd6dc8c]200  The description of the macro. (No specific format)
201
[53bb72e]202NOTES:
[fd6dc8c]203  Any further notes. (No specific format)
204
205Configuration Example
206=====================
207
[c9aaf31]208In the following example, the configuration information for a system with a
209single message queue, four (4) tasks, and a timeslice of fifty (50)
210milliseconds is as follows:
211
[25d55d4]212.. code-block:: c
[fd6dc8c]213
214    #include <bsp.h>
215    #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
216    #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
[c9aaf31]217    #define CONFIGURE_MICROSECONDS_PER_TICK   1000 /* 1 millisecond */
218    #define CONFIGURE_TICKS_PER_TIMESLICE       50 /* 50 milliseconds */
[fd6dc8c]219    #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
220    #define CONFIGURE_MAXIMUM_TASKS 4
221    #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
[c9aaf31]222    #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
223               CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
[fd6dc8c]224    #define CONFIGURE_INIT
225    #include <rtems/confdefs.h>
226
[c9aaf31]227In this example, only a few configuration parameters are specified. The impact
228of these are as follows:
229
230- The example specified ``CONFIGURE_RTEMS_INIT_TASK_TABLE`` but did not specify
231  any additional parameters. This results in a configuration of an application
232  which will begin execution of a single initialization task named ``Init``
233  which is non-preemptible and at priority one (1).
234
235- By specifying ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``, this application
236  is configured to have a clock tick device driver. Without a clock tick device
237  driver, RTEMS has no way to know that time is passing and will be unable to
238  support delays and wall time. Further configuration details about time are
239  provided. Per ``CONFIGURE_MICROSECONDS_PER_TICK`` and
240  ``CONFIGURE_TICKS_PER_TIMESLICE``, the user specified they wanted a clock
241  tick to occur each millisecond, and that the length of a timeslice would be
242  fifty (50) milliseconds.
243
244- By specifying ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``, the application
245  will include a console device driver. Although the console device driver may
246  support a combination of multiple serial ports and display and keyboard
247  combinations, it is only required to provide a single device named
248  ``/dev/console``. This device will be used for Standard Input, Output and
249  Error I/O Streams. Thus when ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
250  is specified, implicitly three (3) file descriptors are reserved for the
251  Standard I/O Streams and those file descriptors are associated with
252  ``/dev/console`` during initialization. All console devices are expected to
253  support the POSIX*termios* interface.
254
255- The example above specifies via ``CONFIGURE_MAXIMUM_TASKS`` that the
256  application requires a maximum of four (4) simultaneously existing Classic
257  API tasks. Similarly, by specifying ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``,
258  there may be a maximum of only one (1) concurrently existent Classic API
259  message queues.
260
261- The most surprising configuration parameter in this example is the use of
262  ``CONFIGURE_MESSAGE_BUFFER_MEMORY``. Message buffer memory is allocated from
263  the RTEMS Workspace and must be accounted for. In this example, the single
264  message queue will have up to twenty (20) messages of type ``struct
265  USER_MESSAGE``.
266
267- The ``CONFIGURE_INIT`` constant must be defined in order to make
268  ``<rtems/confdefs.h>`` instantiate the configuration data structures.  This
269  can only be defined in one source file per application that includes
270  ``<rtems/confdefs.h>`` or the symbol table will be instantiated multiple
271  times and linking errors produced.
272
273This example illustrates that parameters have default values. Among other
274things, the application implicitly used the following defaults:
275
276- All unspecified types of communications and synchronization objects in the
277  Classic and POSIX Threads API have maximums of zero (0).
[fd6dc8c]278
279- The filesystem will be the default filesystem which is the In-Memory File
280  System (IMFS).
281
282- The application will have the default number of priority levels.
283
[c9aaf31]284- The minimum task stack size will be that recommended by RTEMS for the target
285  architecture.
[fd6dc8c]286
[9aafb39]287.. _Unlimited Objects:
288
[fd6dc8c]289Unlimited Objects
[53bb72e]290=================
[fd6dc8c]291
[c9aaf31]292In real-time embedded systems the RAM is normally a limited, critical resource
293and dynamic allocation is avoided as much as possible to ensure predictable,
294deterministic execution times. For such cases, see :ref:`Sizing the RTEMS
295Workspace` for an overview of how to tune the size of the workspace.
296Frequently when users are porting software to RTEMS the precise resource
297requirements of the software is unknown. In these situations users do not need
298to control the size of the workspace very tightly because they just want to get
[fd6dc8c]299the new software to run; later they can tune the workspace size as needed.
300
[c9aaf31]301The following object classes in the Classic API can be configured in unlimited
302mode:
[fd6dc8c]303
[ba64982]304- Barriers
[fd6dc8c]305
306- Message Queues
307
[ba64982]308- Partitions
[fd6dc8c]309
[ba64982]310- Periods
[fd6dc8c]311
[ba64982]312- Ports
[fd6dc8c]313
314- Regions
315
[ba64982]316- Semaphores
[fd6dc8c]317
[ba64982]318- Tasks
[fd6dc8c]319
[ba64982]320- Timers
[fd6dc8c]321
[ba64982]322Additionally, the following object classes from the POSIX API can be configured
323in unlimited mode:
[fd6dc8c]324
[ba64982]325- Keys -- :c:func:`pthread_key_create`
[fd6dc8c]326
[ba64982]327- Key Value Pairs -- :c:func:`pthread_setspecific`
[fd6dc8c]328
[ba64982]329- Message Queues -- :c:func:`mq_open`
[fd6dc8c]330
[ba64982]331- Named Semaphores -- :c:func:`sem_open`
[fd6dc8c]332
[ba64982]333- Shared Memory -- :c:func:`shm_open`
[fd6dc8c]334
[ba64982]335- Threads -- :c:func:`pthread_create`
[fd6dc8c]336
[ba64982]337- Timers -- :c:func:`timer_create`
[fd6dc8c]338
[ba64982]339.. warning::
[fd6dc8c]340
[ba64982]341    The following object classes can *not* be configured in unlimited mode:
[fd6dc8c]342
[ba64982]343    - Drivers
[fd6dc8c]344
[ba64982]345    - File Descriptors
[fd6dc8c]346
[ba64982]347    - POSIX Queued Signals
[fd6dc8c]348
[ba64982]349    - User Extensions
[fd6dc8c]350
351Due to the memory requirements of unlimited objects it is strongly recommended
[c9aaf31]352to use them only in combination with the unified work areas. See :ref:`Separate
353or Unified Work Areas` for more information on unified work areas.
[fd6dc8c]354
355The following example demonstrates how the two simple configuration defines for
356unlimited objects and unified works areas can replace many seperate
357configuration defines for supported object classes:
[c9aaf31]358
[25d55d4]359.. code-block:: c
[fd6dc8c]360
361    #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
362    #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
363    #define CONFIGURE_UNIFIED_WORK_AREAS
364    #define CONFIGURE_UNLIMITED_OBJECTS
365    #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
366    #define CONFIGURE_INIT
367    #include <rtems/confdefs.h>
368
369Users are cautioned that using unlimited objects is not recommended for
[c9aaf31]370production software unless the dynamic growth is absolutely required. It is
371generally considered a safer embedded systems programming practice to know the
372system limits rather than experience an out of memory error at an arbitrary and
373largely unpredictable time in the field.
[fd6dc8c]374
[9aafb39]375.. _Per Object Class Unlimited Object Instances:
376
[6c56401]377.. index:: rtems_resource_unlimited
378
[fd6dc8c]379Per Object Class Unlimited Object Instances
380-------------------------------------------
381
382When the number of objects is not known ahead of time, RTEMS provides an
[c9aaf31]383auto-extending mode that can be enabled individually for each object type by
384using the macro ``rtems_resource_unlimited``. This takes a value as a
385parameter, and is used to set the object maximum number field in an API
386Configuration table. The value is an allocation unit size. When RTEMS is
387required to grow the object table it is grown by this size. The kernel will
388return the object memory back to the RTEMS Workspace when an object is
389destroyed. The kernel will only return an allocated block of objects to the
390RTEMS Workspace if at least half the allocation size of free objects remain
391allocated. RTEMS always keeps one allocation block of objects allocated. Here
392is an example of using ``rtems_resource_unlimited``:
393
[25d55d4]394.. code-block:: c
[fd6dc8c]395
396    #define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
397
398.. index:: rtems_resource_is_unlimited
399.. index:: rtems_resource_maximum_per_allocation
400
[c9aaf31]401Object maximum specifications can be evaluated with the
402``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
403macros.
[fd6dc8c]404
[9aafb39]405.. _Unlimited Object Instances:
406
[fd6dc8c]407Unlimited Object Instances
408--------------------------
409
[c9aaf31]410To ease the burden of developers who are porting new software RTEMS also
411provides the capability to make all object classes listed above operate in
412unlimited mode in a simple manner. The application developer is only
413responsible for enabling unlimited objects and specifying the allocation size.
[fd6dc8c]414
[6c56401]415.. index:: CONFIGURE_UNLIMITED_OBJECTS
[9aafb39]416
[0e8f08d]417.. _CONFIGURE_UNLIMITED_OBJECTS:
[3384994]418
[0e8f08d]419CONFIGURE_UNLIMITED_OBJECTS
420---------------------------
[fd6dc8c]421
[53bb72e]422CONSTANT:
[fd6dc8c]423    ``CONFIGURE_UNLIMITED_OBJECTS``
424
[53bb72e]425DATA TYPE:
[fd6dc8c]426    Boolean feature macro.
427
[53bb72e]428RANGE:
[fd6dc8c]429    Defined or undefined.
430
[53bb72e]431DEFAULT VALUE:
[fd6dc8c]432    This is not defined by default.
433
[53bb72e]434DESCRIPTION:
435    ``CONFIGURE_UNLIMITED_OBJECTS`` enables ``rtems_resource_unlimited`` mode
436    for Classic API and POSIX API objects that do not already have a specific
437    maximum limit defined.
[fd6dc8c]438
[53bb72e]439NOTES:
440    When using unlimited objects, it is common practice to also specify
441    ``CONFIGURE_UNIFIED_WORK_AREAS`` so the system operates with a single pool
442    of memory for both RTEMS and application memory allocations.
[fd6dc8c]443
[0e8f08d]444.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
[9aafb39]445
[0e8f08d]446CONFIGURE_UNLIMITED_ALLOCATION_SIZE
447-----------------------------------
[fd6dc8c]448
[53bb72e]449CONSTANT:
[fd6dc8c]450    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
451
[53bb72e]452DATA TYPE:
[fd6dc8c]453    Unsigned integer (``uint32_t``).
454
[53bb72e]455RANGE:
[fd6dc8c]456    Positive.
457
[53bb72e]458DEFAULT VALUE:
459    If not defined and ``CONFIGURE_UNLIMITED_OBJECTS`` is defined, the default
460    value is eight (8).
[fd6dc8c]461
[53bb72e]462DESCRIPTION:
463    ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE`` provides an allocation size to use
464    for ``rtems_resource_unlimited`` when using
465    ``CONFIGURE_UNLIMITED_OBJECTS``.
[fd6dc8c]466
[53bb72e]467NOTES:
468    By allowing users to declare all resources as being unlimited the user can
469    avoid identifying and limiting the resources
470    used. ``CONFIGURE_UNLIMITED_OBJECTS`` does not support varying the
471    allocation sizes for different objects; users who want that much control
472    can define the ``rtems_resource_unlimited`` macros themselves.
[c9aaf31]473
[25d55d4]474.. code-block:: c
[fd6dc8c]475
476    #define CONFIGURE_UNLIMITED_OBJECTS
477    #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
478
479Classic API Configuration
480=========================
481
[c9aaf31]482This section defines the Classic API related system configuration parameters
483supported by ``<rtems/confdefs.h>``.
[fd6dc8c]484
[6c56401]485.. index:: CONFIGURE_MAXIMUM_TASKS
[9aafb39]486
[0e8f08d]487.. _CONFIGURE_MAXIMUM_TASKS:
[3384994]488
[0e8f08d]489CONFIGURE_MAXIMUM_TASKS
490-----------------------
[fd6dc8c]491
[53bb72e]492CONSTANT:
[fd6dc8c]493    ``CONFIGURE_MAXIMUM_TASKS``
494
[53bb72e]495DATA TYPE:
[fd6dc8c]496    Unsigned integer (``uint32_t``).
497
[53bb72e]498RANGE:
[fd6dc8c]499    Zero or positive.
500
[53bb72e]501DEFAULT VALUE:
502    The default value is ``0``.
[fd6dc8c]503
[53bb72e]504DESCRIPTION:
505    ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
506    can be concurrently active.
[fd6dc8c]507
[53bb72e]508NOTES:
509    This object class can be configured in unlimited allocation mode.
[fd6dc8c]510
[53bb72e]511    The calculations for the required memory in the RTEMS Workspace for tasks
512    assume that each task has a minimum stack size and has floating point
513    support enabled.  The configuration parameter
514    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements
515    *ABOVE* the minimum size required.  See :ref:`Reserve Task/Thread Stack
516    Memory Above Minimum` for more information about
517    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c]518
[53bb72e]519    The maximum number of POSIX threads is specified by
520    ``CONFIGURE_MAXIMUM_POSIX_THREADS``.
[fd6dc8c]521
[53bb72e]522    A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
523    assumption that all tasks have floating point enabled. This would require
524    the addition of a new configuration parameter to specify the number of
525    tasks which enable floating point support.
[fd6dc8c]526
527.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
528
[6c56401]529.. index:: CONFIGURE_MAXIMUM_TIMERS
[9aafb39]530
[0e8f08d]531.. _CONFIGURE_MAXIMUM_TIMERS:
[3384994]532
[0e8f08d]533CONFIGURE_MAXIMUM_TIMERS
534------------------------
[fd6dc8c]535
[53bb72e]536CONSTANT:
[fd6dc8c]537    ``CONFIGURE_MAXIMUM_TIMERS``
538
[53bb72e]539DATA TYPE:
[fd6dc8c]540    Unsigned integer (``uint32_t``).
541
[53bb72e]542RANGE:
[fd6dc8c]543    Zero or positive.
544
[53bb72e]545DEFAULT VALUE:
[fd6dc8c]546    The default value is 0.
547
[53bb72e]548DESCRIPTION:
549    ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
550    that can be concurrently active.
[fd6dc8c]551
[53bb72e]552NOTES:
553    This object class can be configured in unlimited allocation mode.
[fd6dc8c]554
[6c56401]555.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
[9aafb39]556
[0e8f08d]557.. _CONFIGURE_MAXIMUM_SEMAPHORES:
[3384994]558
[0e8f08d]559CONFIGURE_MAXIMUM_SEMAPHORES
560----------------------------
[fd6dc8c]561
[53bb72e]562CONSTANT:
[fd6dc8c]563    ``CONFIGURE_MAXIMUM_SEMAPHORES``
564
[53bb72e]565DATA TYPE:
[fd6dc8c]566    Unsigned integer (``uint32_t``).
567
[53bb72e]568RANGE:
[fd6dc8c]569    Zero or positive.
570
[53bb72e]571DEFAULT VALUE:
[fd6dc8c]572    The default value is 0.
573
[53bb72e]574DESCRIPTION:
575    ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
576    Semaphores that can be concurrently active.
[fd6dc8c]577
[53bb72e]578NOTES:
579    This object class can be configured in unlimited allocation mode.
[fd6dc8c]580
[6c56401]581.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
[9aafb39]582
[0e8f08d]583.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
[3384994]584
[0e8f08d]585CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
586---------------------------------
[fd6dc8c]587
[53bb72e]588CONSTANT:
[fd6dc8c]589    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
590
[53bb72e]591DATA TYPE:
[fd6dc8c]592    Unsigned integer (``uint32_t``).
593
[53bb72e]594RANGE:
[fd6dc8c]595    Zero or positive.
596
[53bb72e]597DEFAULT VALUE:
[fd6dc8c]598    The default value is 0.
599
[53bb72e]600DESCRIPTION:
601    ``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
[a0d2eee]602    Semaphores using the :ref:`MrsP` that can be concurrently active.
[fd6dc8c]603
[53bb72e]604NOTES:
[a0d2eee]605    This configuration option is only used in SMP configurations.  In
606    uni-processor configurations, the :ref:`PriorityCeiling` is used for MrsP
[53bb72e]607    semaphores and thus no extra memory is necessary.
[fd6dc8c]608
[6c56401]609.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
[9aafb39]610
[0e8f08d]611.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
[3384994]612
[0e8f08d]613CONFIGURE_MAXIMUM_MESSAGE_QUEUES
614--------------------------------
[fd6dc8c]615
[53bb72e]616CONSTANT:
[fd6dc8c]617    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
618
[53bb72e]619DATA TYPE:
[fd6dc8c]620    Unsigned integer (``uint32_t``).
621
[53bb72e]622RANGE:
[fd6dc8c]623    Zero or positive.
624
[53bb72e]625DEFAULT VALUE:
[fd6dc8c]626    The default value is 0.
627
[53bb72e]628DESCRIPTION:
629    ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
630    Message Queues that can be concurrently active.
[fd6dc8c]631
[53bb72e]632NOTES:
633    This object class can be configured in unlimited allocation mode.
[fd6dc8c]634
[6c56401]635.. index:: CONFIGURE_MAXIMUM_BARRIERS
[9aafb39]636
[0e8f08d]637.. _CONFIGURE_MAXIMUM_BARRIERS:
[3384994]638
[0e8f08d]639CONFIGURE_MAXIMUM_BARRIERS
640--------------------------
[fd6dc8c]641
[53bb72e]642CONSTANT:
[fd6dc8c]643    ``CONFIGURE_MAXIMUM_BARRIERS``
644
[53bb72e]645DATA TYPE:
[fd6dc8c]646    Unsigned integer (``uint32_t``).
647
[53bb72e]648RANGE:
[fd6dc8c]649    Zero or positive.
650
[53bb72e]651DEFAULT VALUE:
[fd6dc8c]652    The default value is 0.
653
[53bb72e]654DESCRIPTION:
655    ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
656    Barriers that can be concurrently active.
[fd6dc8c]657
[53bb72e]658NOTES:
659    This object class can be configured in unlimited allocation mode.
[fd6dc8c]660
[6c56401]661.. index:: CONFIGURE_MAXIMUM_PERIODS
[9aafb39]662
[0e8f08d]663.. _CONFIGURE_MAXIMUM_PERIODS:
[3384994]664
[0e8f08d]665CONFIGURE_MAXIMUM_PERIODS
666-------------------------
[fd6dc8c]667
[53bb72e]668CONSTANT:
[fd6dc8c]669    ``CONFIGURE_MAXIMUM_PERIODS``
670
[53bb72e]671DATA TYPE:
[fd6dc8c]672    Unsigned integer (``uint32_t``).
673
[53bb72e]674RANGE:
[fd6dc8c]675    Zero or positive.
676
[53bb72e]677DEFAULT VALUE:
[fd6dc8c]678    The default value is 0.
679
[53bb72e]680DESCRIPTION:
681    ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
682    that can be concurrently active.
[fd6dc8c]683
[53bb72e]684NOTES:
685    This object class can be configured in unlimited allocation mode.
[fd6dc8c]686
[6c56401]687.. index:: CONFIGURE_MAXIMUM_PARTITIONS
[9aafb39]688
[0e8f08d]689.. _CONFIGURE_MAXIMUM_PARTITIONS:
[3384994]690
[0e8f08d]691CONFIGURE_MAXIMUM_PARTITIONS
692----------------------------
[fd6dc8c]693
[53bb72e]694CONSTANT:
[fd6dc8c]695    ``CONFIGURE_MAXIMUM_PARTITIONS``
696
[53bb72e]697DATA TYPE:
[fd6dc8c]698    Unsigned integer (``uint32_t``).
699
[53bb72e]700RANGE:
[fd6dc8c]701    Zero or positive.
702
[53bb72e]703DEFAULT VALUE:
[fd6dc8c]704    The default value is 0.
705
[53bb72e]706DESCRIPTION:
707    ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
708    Partitions that can be concurrently active.
[fd6dc8c]709
[53bb72e]710NOTES:
711    This object class can be configured in unlimited allocation mode.
[fd6dc8c]712
[6c56401]713.. index:: CONFIGURE_MAXIMUM_REGIONS
[9aafb39]714
[0e8f08d]715.. _CONFIGURE_MAXIMUM_REGIONS:
[3384994]716
[0e8f08d]717CONFIGURE_MAXIMUM_REGIONS
718-------------------------
[fd6dc8c]719
[53bb72e]720CONSTANT:
[fd6dc8c]721    ``CONFIGURE_MAXIMUM_REGIONS``
722
[53bb72e]723DATA TYPE:
[fd6dc8c]724    Unsigned integer (``uint32_t``).
725
[53bb72e]726RANGE:
[fd6dc8c]727    Zero or positive.
728
[53bb72e]729DEFAULT VALUE:
[fd6dc8c]730    The default value is 0.
731
[53bb72e]732DESCRIPTION:
733    ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
734    that can be concurrently active.
[fd6dc8c]735
[53bb72e]736NOTES:
737    None.
[fd6dc8c]738
[6c56401]739.. index:: CONFIGURE_MAXIMUM_PORTS
[9aafb39]740
[0e8f08d]741.. _CONFIGURE_MAXIMUM_PORTS:
[3384994]742
[0e8f08d]743CONFIGURE_MAXIMUM_PORTS
744-----------------------
[fd6dc8c]745
[53bb72e]746CONSTANT:
[fd6dc8c]747    ``CONFIGURE_MAXIMUM_PORTS``
748
[53bb72e]749DATA TYPE:
[fd6dc8c]750    Unsigned integer (``uint32_t``).
751
[53bb72e]752RANGE:
[fd6dc8c]753    Zero or positive.
754
[53bb72e]755DEFAULT VALUE:
[fd6dc8c]756    The default value is 0.
757
[53bb72e]758DESCRIPTION:
759    ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
760    can be concurrently active.
[fd6dc8c]761
[53bb72e]762NOTES:
763    This object class can be configured in unlimited allocation mode.
[fd6dc8c]764
[6c56401]765.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
[9aafb39]766
[0e8f08d]767.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
[3384994]768
[0e8f08d]769CONFIGURE_MAXIMUM_USER_EXTENSIONS
770---------------------------------
[fd6dc8c]771
[53bb72e]772CONSTANT:
[fd6dc8c]773    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
774
[53bb72e]775DATA TYPE:
[fd6dc8c]776    Unsigned integer (``uint32_t``).
777
[53bb72e]778RANGE:
[fd6dc8c]779    Zero or positive.
780
[53bb72e]781DEFAULT VALUE:
[fd6dc8c]782    The default value is 0.
783
[53bb72e]784DESCRIPTION:
785    ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
786    User Extensions that can be concurrently active.
[fd6dc8c]787
[53bb72e]788NOTES:
789    This object class can be configured in unlimited allocation mode.
[fd6dc8c]790
791Classic API Initialization Tasks Table Configuration
792====================================================
793
[c9aaf31]794The ``<rtems/confdefs.h>`` configuration system can automatically generate an
795Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
796The following parameters control the generation of that table.
[fd6dc8c]797
[6c56401]798.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
[9aafb39]799
[0e8f08d]800.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
[3384994]801
[0e8f08d]802CONFIGURE_RTEMS_INIT_TASKS_TABLE
803--------------------------------
[fd6dc8c]804
[53bb72e]805CONSTANT:
[fd6dc8c]806    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
807
[53bb72e]808DATA TYPE:
[fd6dc8c]809    Boolean feature macro.
810
[53bb72e]811RANGE:
[fd6dc8c]812    Defined or undefined.
813
[53bb72e]814DEFAULT VALUE:
[fd6dc8c]815    This is not defined by default.
816
[53bb72e]817DESCRIPTION:
818    ``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
819    Classic RTEMS API Initialization Task Table. The table built by
820    ``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
821    sufficient for applications which initialization the system from a single
822    task.
[fd6dc8c]823
[53bb72e]824    By default, this field is not defined as the user MUST select their own API
825    for initialization tasks.
[fd6dc8c]826
[53bb72e]827NOTES:
828    The application may choose to use the initialization tasks or threads table
829    from another API.
[fd6dc8c]830
[53bb72e]831    A compile time error will be generated if the user does not configure any
832    initialization tasks or threads.
[fd6dc8c]833
[6c56401]834.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
[9aafb39]835
[0e8f08d]836.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
[3384994]837
[0e8f08d]838CONFIGURE_INIT_TASK_ENTRY_POINT
839-------------------------------
[fd6dc8c]840
[53bb72e]841CONSTANT:
[fd6dc8c]842    ``CONFIGURE_INIT_TASK_ENTRY_POINT``
843
[53bb72e]844DATA TYPE:
[fd6dc8c]845    Task entry function pointer (``rtems_task_entry``).
846
[53bb72e]847RANGE:
[fd6dc8c]848    Valid task entry function pointer.
849
[53bb72e]850DEFAULT VALUE:
[fd6dc8c]851    The default value is ``Init``.
852
[53bb72e]853DESCRIPTION:
854    ``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
855    name) of the single initialization task defined by the Classic API
856    Initialization Tasks Table.
[fd6dc8c]857
[53bb72e]858NOTES:
859    The user must implement the function ``Init`` or the function name provided
860    in this configuration parameter.
[fd6dc8c]861
[6c56401]862.. index:: CONFIGURE_INIT_TASK_NAME
[9aafb39]863
[0e8f08d]864.. _CONFIGURE_INIT_TASK_NAME:
[3384994]865
[0e8f08d]866CONFIGURE_INIT_TASK_NAME
867------------------------
[fd6dc8c]868
[53bb72e]869CONSTANT:
[fd6dc8c]870    ``CONFIGURE_INIT_TASK_NAME``
871
[53bb72e]872DATA TYPE:
[fd6dc8c]873    RTEMS Name (``rtems_name``).
874
[53bb72e]875RANGE:
[fd6dc8c]876    Any value.
877
[53bb72e]878DEFAULT VALUE:
[fd6dc8c]879    The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
880
[53bb72e]881DESCRIPTION:
882    ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
883    defined by the Classic API Initialization Tasks Table.
[fd6dc8c]884
[53bb72e]885NOTES:
886    None.
[fd6dc8c]887
[6c56401]888.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
[9aafb39]889
[0e8f08d]890.. _CONFIGURE_INIT_TASK_STACK_SIZE:
[3384994]891
[0e8f08d]892CONFIGURE_INIT_TASK_STACK_SIZE
893------------------------------
[fd6dc8c]894
[53bb72e]895CONSTANT:
[fd6dc8c]896    ``CONFIGURE_INIT_TASK_STACK_SIZE``
897
[53bb72e]898DATA TYPE:
[fd6dc8c]899    Unsigned integer (``size_t``).
900
[53bb72e]901RANGE:
[fd6dc8c]902    Zero or positive.
903
[53bb72e]904DEFAULT VALUE:
[fd6dc8c]905    The default value is RTEMS_MINIMUM_STACK_SIZE.
906
[53bb72e]907DESCRIPTION:
908    ``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
909    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c]910
[53bb72e]911NOTES:
912    If the stack size specified is greater than the configured minimum, it must
913    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
914    Task/Thread Stack Memory Above Minimum` for more information about
915    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c]916
[6c56401]917.. index:: CONFIGURE_INIT_TASK_PRIORITY
[9aafb39]918
[0e8f08d]919.. _CONFIGURE_INIT_TASK_PRIORITY:
[3384994]920
[0e8f08d]921CONFIGURE_INIT_TASK_PRIORITY
922----------------------------
[fd6dc8c]923
[53bb72e]924CONSTANT:
[fd6dc8c]925    ``CONFIGURE_INIT_TASK_PRIORITY``
926
[53bb72e]927DATA TYPE:
[fd6dc8c]928    RTEMS Task Priority (``rtems_task_priority``).
929
[53bb72e]930RANGE:
[fd6dc8c]931    One (1) to CONFIGURE_MAXIMUM_PRIORITY.
932
[53bb72e]933DEFAULT VALUE:
934    The default value is 1, which is the highest priority in the Classic API.
[fd6dc8c]935
[53bb72e]936DESCRIPTION:
937    ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
938    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c]939
[53bb72e]940NOTES:
941    None.
[fd6dc8c]942
943
[6c56401]944.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
[9aafb39]945
[0e8f08d]946.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
[3384994]947
[0e8f08d]948CONFIGURE_INIT_TASK_ATTRIBUTES
949------------------------------
[fd6dc8c]950
[53bb72e]951CONSTANT:
[fd6dc8c]952    ``CONFIGURE_INIT_TASK_ATTRIBUTES``
953
[53bb72e]954DATA TYPE:
[fd6dc8c]955    RTEMS Attributes (``rtems_attribute``).
956
[53bb72e]957RANGE:
[fd6dc8c]958    Valid task attribute sets.
959
[53bb72e]960DEFAULT VALUE:
[fd6dc8c]961    The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
962
[53bb72e]963DESCRIPTION:
964    ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
965    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c]966
[53bb72e]967NOTES:
968    None.
[fd6dc8c]969
[6c56401]970.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
[9aafb39]971
[0e8f08d]972.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
[3384994]973
[0e8f08d]974CONFIGURE_INIT_TASK_INITIAL_MODES
975---------------------------------
[fd6dc8c]976
[53bb72e]977CONSTANT:
[fd6dc8c]978    ``CONFIGURE_INIT_TASK_INITIAL_MODES``
979
[53bb72e]980DATA TYPE:
[fd6dc8c]981    RTEMS Mode (``rtems_mode``).
982
[53bb72e]983RANGE:
[fd6dc8c]984    Valid task mode sets.
985
[53bb72e]986DEFAULT VALUE:
[fd6dc8c]987    The default value is ``RTEMS_NO_PREEMPT``.
988
[53bb72e]989DESCRIPTION:
990    ``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
991    single initialization task defined by the Classic API Initialization Tasks
992    Table.
[fd6dc8c]993
[53bb72e]994NOTES:
995    None.
[fd6dc8c]996
[6c56401]997.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
[9aafb39]998
[0e8f08d]999.. _CONFIGURE_INIT_TASK_ARGUMENTS:
[3384994]1000
[0e8f08d]1001CONFIGURE_INIT_TASK_ARGUMENTS
1002-----------------------------
[fd6dc8c]1003
[53bb72e]1004CONSTANT:
[fd6dc8c]1005    ``CONFIGURE_INIT_TASK_ARGUMENTS``
1006
[53bb72e]1007DATA TYPE:
[fd6dc8c]1008    RTEMS Task Argument (``rtems_task_argument``).
1009
[53bb72e]1010RANGE:
[fd6dc8c]1011    Complete range of the type.
1012
[53bb72e]1013DEFAULT VALUE:
[fd6dc8c]1014    The default value is 0.
1015
[53bb72e]1016DESCRIPTION:
1017    ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
1018    initialization task defined by the Classic API Initialization Tasks Table.
[fd6dc8c]1019
[53bb72e]1020NOTES:
1021    None.
[fd6dc8c]1022
[6c56401]1023.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
[9aafb39]1024
[0e8f08d]1025.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
[3384994]1026
[0e8f08d]1027CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1028---------------------------------
[fd6dc8c]1029
[53bb72e]1030CONSTANT:
[fd6dc8c]1031    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
1032
[53bb72e]1033DATA TYPE:
[fd6dc8c]1034    Boolean feature macro.
1035
[53bb72e]1036RANGE:
[fd6dc8c]1037    Defined or undefined.
1038
[53bb72e]1039DEFAULT VALUE:
[fd6dc8c]1040    This is not defined by default.
1041
[53bb72e]1042DESCRIPTION:
1043    ``CONFIGURE_HAS_OWN_INIT_TASK_TABLE`` is defined if the user wishes to
1044    define their own Classic API Initialization Tasks Table.  This table should
1045    be named ``Initialization_tasks``.
[fd6dc8c]1046
[53bb72e]1047NOTES:
1048    This is a seldom used configuration parameter. The most likely use case is
1049    when an application desires to have more than one initialization task.
[fd6dc8c]1050
1051POSIX API Configuration
1052=======================
1053
[c9aaf31]1054The parameters in this section are used to configure resources for the RTEMS
1055POSIX API.  They are only relevant if the POSIX API is enabled at configure
1056time using the ``--enable-posix`` option.
[fd6dc8c]1057
[6c56401]1058.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
[9aafb39]1059
[0e8f08d]1060.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
[3384994]1061
[0e8f08d]1062CONFIGURE_MAXIMUM_POSIX_THREADS
1063-------------------------------
[fd6dc8c]1064
[53bb72e]1065CONSTANT:
[fd6dc8c]1066    ``CONFIGURE_MAXIMUM_POSIX_THREADS``
1067
[53bb72e]1068DATA TYPE:
[fd6dc8c]1069    Unsigned integer (``uint32_t``).
1070
[53bb72e]1071RANGE:
[fd6dc8c]1072    Zero or positive.
1073
[53bb72e]1074DEFAULT VALUE:
[fd6dc8c]1075    The default value is 0.
1076
[53bb72e]1077DESCRIPTION:
1078    ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
1079    Threads that can be concurrently active.
[fd6dc8c]1080
[53bb72e]1081NOTES:
1082    This object class can be configured in unlimited allocation mode.
[fd6dc8c]1083
[53bb72e]1084    This calculations for the required memory in the RTEMS Workspace for
1085    threads assume that each thread has a minimum stack size and has floating
1086    point support enabled.  The configuration parameter
1087    ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
1088    requirements *ABOVE* the minimum size required.  See :ref:`Reserve
1089    Task/Thread Stack Memory Above Minimum` for more information about
1090    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c]1091
[53bb72e]1092    The maximum number of Classic API Tasks is specified by
1093    ``CONFIGURE_MAXIMUM_TASKS``.
[fd6dc8c]1094
[53bb72e]1095    All POSIX threads have floating point enabled.
[fd6dc8c]1096
[6c56401]1097.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
[9aafb39]1098
[0e8f08d]1099.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
[3384994]1100
[0e8f08d]1101CONFIGURE_MAXIMUM_POSIX_KEYS
1102----------------------------
[fd6dc8c]1103
[53bb72e]1104CONSTANT:
[fd6dc8c]1105    ``CONFIGURE_MAXIMUM_POSIX_KEYS``
1106
[53bb72e]1107DATA TYPE:
[fd6dc8c]1108    Unsigned integer (``uint32_t``).
1109
[53bb72e]1110RANGE:
[fd6dc8c]1111    Zero or positive.
1112
[53bb72e]1113DEFAULT VALUE:
[fd6dc8c]1114    The default value is 0.
1115
[53bb72e]1116DESCRIPTION:
1117    ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
1118    that can be concurrently active.
[fd6dc8c]1119
[53bb72e]1120NOTES:
1121    This object class can be configured in unlimited allocation mode.
[fd6dc8c]1122
[6c56401]1123.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
[9aafb39]1124
[0e8f08d]1125.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
[3384994]1126
[0e8f08d]1127CONFIGURE_MAXIMUM_POSIX_TIMERS
1128------------------------------
[fd6dc8c]1129
[53bb72e]1130CONSTANT:
[fd6dc8c]1131    ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
1132
[53bb72e]1133DATA TYPE:
[fd6dc8c]1134    Unsigned integer (``uint32_t``).
1135
[53bb72e]1136RANGE:
[fd6dc8c]1137    Zero or positive.
1138
[53bb72e]1139DEFAULT VALUE:
[fd6dc8c]1140    The default value is 0.
1141
[53bb72e]1142DESCRIPTION:
1143    ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
1144    Timers that can be concurrently active.
[fd6dc8c]1145
[53bb72e]1146NOTES:
1147    This object class can be configured in unlimited allocation mode.
[fd6dc8c]1148
[6c56401]1149.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
[9aafb39]1150
[0e8f08d]1151.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
[3384994]1152
[0e8f08d]1153CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
1154--------------------------------------
[fd6dc8c]1155
[53bb72e]1156CONSTANT:
[fd6dc8c]1157    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
1158
[53bb72e]1159DATA TYPE:
[fd6dc8c]1160    Unsigned integer (``uint32_t``).
1161
[53bb72e]1162RANGE:
[fd6dc8c]1163    Zero or positive.
1164
[53bb72e]1165DEFAULT VALUE:
[fd6dc8c]1166    The default value is 0.
1167
[53bb72e]1168DESCRIPTION:
1169    ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
1170    API Queued Signals that can be concurrently active.
[fd6dc8c]1171
[53bb72e]1172NOTES:
1173    None.
[fd6dc8c]1174
[6c56401]1175.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
[9aafb39]1176
[0e8f08d]1177.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
[3384994]1178
[0e8f08d]1179CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
1180--------------------------------------
[fd6dc8c]1181
[53bb72e]1182CONSTANT:
[fd6dc8c]1183    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
1184
[53bb72e]1185DATA TYPE:
[fd6dc8c]1186    Unsigned integer (``uint32_t``).
1187
[53bb72e]1188RANGE:
[fd6dc8c]1189    Zero or positive.
1190
[53bb72e]1191DEFAULT VALUE:
[fd6dc8c]1192    The default value is 0.
1193
[53bb72e]1194DESCRIPTION:
1195    ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
1196    API Message Queues that can be concurrently active.
[fd6dc8c]1197
[53bb72e]1198NOTES:
1199    This object class can be configured in unlimited allocation mode.
[fd6dc8c]1200
[6c56401]1201.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
[64564df]1202
[0e8f08d]1203.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
[3384994]1204
[0e8f08d]1205CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
1206----------------------------------
[64564df]1207
1208CONSTANT:
1209    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
1210
1211DATA TYPE:
1212    Unsigned integer (``uint32_t``).
1213
1214RANGE:
1215    Zero or positive.
1216
1217DEFAULT VALUE:
1218    The default value is 0.
1219
1220DESCRIPTION:
1221    ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
1222    Named Semaphores that can be concurrently active.  Named semaphores are
1223    created with ``sem_open()``.  Semaphores initialized with ``sem_init()``
1224    are not affected by this configuration option since the storage space for
1225    these semaphores is user-provided.
1226
1227NOTES:
1228    None.
1229
[fd6dc8c]1230POSIX Initialization Threads Table Configuration
1231================================================
1232
[c9aaf31]1233The ``<rtems/confdefs.h>`` configuration system can automatically generate a
1234POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
1235a single entry.  The following parameters control the generation of that table.
[fd6dc8c]1236
[6c56401]1237.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
[9aafb39]1238
[0e8f08d]1239.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
[3384994]1240
[0e8f08d]1241CONFIGURE_POSIX_INIT_THREAD_TABLE
1242---------------------------------
[fd6dc8c]1243
[53bb72e]1244CONSTANT:
1245
1246    ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
[fd6dc8c]1247
[53bb72e]1248DATA TYPE:
[fd6dc8c]1249    Boolean feature macro.
1250
[53bb72e]1251RANGE:
[fd6dc8c]1252    Defined or undefined.
1253
[53bb72e]1254DEFAULT VALUE:
[c9aaf31]1255    This field is not defined by default, as the user MUST select their own API
1256    for initialization tasks.
[fd6dc8c]1257
[53bb72e]1258DESCRIPTION:
1259    ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
1260    a POSIX API Initialization Threads Table.  The table built by
1261    ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
1262    is sufficient for applications which initialization the system from a
1263    single task.
[fd6dc8c]1264
[53bb72e]1265    By default, this field is not defined as the user MUST select their own API
1266    for initialization tasks.
[fd6dc8c]1267
[53bb72e]1268NOTES:
1269    The application may choose to use the initialization tasks or threads table
1270    from another API.
[fd6dc8c]1271
[53bb72e]1272    A compile time error will be generated if the user does not configure any
1273    initialization tasks or threads.
[fd6dc8c]1274
[6c56401]1275.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
[9aafb39]1276
[0e8f08d]1277.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
[3384994]1278
[0e8f08d]1279CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
1280---------------------------------------
[fd6dc8c]1281
[53bb72e]1282CONSTANT:
[fd6dc8c]1283    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
1284
[53bb72e]1285DATA TYPE:
[bcd64c6]1286    POSIX thread function pointer (``void *(*entry_point)(void *)``).
[fd6dc8c]1287
[53bb72e]1288RANGE:
[fd6dc8c]1289    Undefined or a valid POSIX thread function pointer.
1290
[53bb72e]1291DEFAULT VALUE:
[fd6dc8c]1292    The default value is ``POSIX_Init``.
1293
[53bb72e]1294DESCRIPTION:
1295    ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
1296    (a.k.a. function name) of the single initialization thread defined by the
1297    POSIX API Initialization Threads Table.
[fd6dc8c]1298
[53bb72e]1299NOTES:
1300    The user must implement the function ``POSIX_Init`` or the function name
1301    provided in this configuration parameter.
[fd6dc8c]1302
[6c56401]1303.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
[9aafb39]1304
[0e8f08d]1305.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
[3384994]1306
[0e8f08d]1307CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
1308--------------------------------------
[fd6dc8c]1309
[53bb72e]1310CONSTANT:
[fd6dc8c]1311    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
1312
[53bb72e]1313DATA TYPE:
[fd6dc8c]1314    Unsigned integer (``size_t``).
1315
[53bb72e]1316RANGE:
[fd6dc8c]1317    Zero or positive.
1318
[53bb72e]1319DEFAULT VALUE:
[9aafb39]1320    The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
[fd6dc8c]1321
[53bb72e]1322DESCRIPTION:
1323    ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
1324    initialization thread defined by the POSIX API Initialization Threads
1325    Table.
[fd6dc8c]1326
[53bb72e]1327NOTES:
1328    If the stack size specified is greater than the configured minimum, it must
1329    be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``.  See :ref:`Reserve
1330    Task/Thread Stack Memory Above Minimum` for more information about
1331    ``CONFIGURE_EXTRA_TASK_STACKS``.
[fd6dc8c]1332
[6c56401]1333.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
[9aafb39]1334
[0e8f08d]1335.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
[3384994]1336
[0e8f08d]1337CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
1338-----------------------------------------
[fd6dc8c]1339
[53bb72e]1340CONSTANT:
[fd6dc8c]1341    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
1342
[53bb72e]1343DATA TYPE:
[fd6dc8c]1344    Boolean feature macro.
1345
[53bb72e]1346RANGE:
[fd6dc8c]1347    Defined or undefined.
1348
[53bb72e]1349DEFAULT VALUE:
[fd6dc8c]1350    This is not defined by default.
1351
[53bb72e]1352DESCRIPTION:
1353    ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
1354    to define their own POSIX API Initialization Threads Table.  This table
1355    should be named ``POSIX_Initialization_threads``.
[fd6dc8c]1356
[53bb72e]1357NOTES:
1358    This is a seldom used configuration parameter. The most likely use case is
1359    when an application desires to have more than one initialization task.
[fd6dc8c]1360
1361Basic System Information
1362========================
1363
[c9aaf31]1364This section defines the general system configuration parameters supported by
1365``<rtems/confdefs.h>``.
[fd6dc8c]1366
1367.. index:: CONFIGURE_UNIFIED_WORK_AREAS
1368.. index:: unified work areas
1369.. index:: separate work areas
1370.. index:: RTEMS Workspace
1371.. index:: C Program Heap
1372
[0e8f08d]1373.. _CONFIGURE_UNIFIED_WORK_AREAS:
[3384994]1374
[0e8f08d]1375CONFIGURE_UNIFIED_WORK_AREAS
1376----------------------------
[6c56401]1377
[53bb72e]1378CONSTANT:
[fd6dc8c]1379    ``CONFIGURE_UNIFIED_WORK_AREAS``
1380
[53bb72e]1381DATA TYPE:
[fd6dc8c]1382    Boolean feature macro.
1383
[53bb72e]1384RANGE:
[fd6dc8c]1385    Defined or undefined.
1386
[53bb72e]1387DEFAULT VALUE:
[c9aaf31]1388    This is not defined by default, which specifies that the C Program Heap and
1389    the RTEMS Workspace will be separate.
[fd6dc8c]1390
[53bb72e]1391DESCRIPTION:
1392    When defined, the C Program Heap and the RTEMS Workspace will be one pool
1393    of memory.
[fd6dc8c]1394
[53bb72e]1395    When not defined, there will be separate memory pools for the RTEMS
1396    Workspace and C Program Heap.
[fd6dc8c]1397
[53bb72e]1398NOTES:
1399    Having separate pools does have some advantages in the event a task blows a
1400    stack or writes outside its memory area. However, in low memory systems the
1401    overhead of the two pools plus the potential for unused memory in either
1402    pool is very undesirable.
[fd6dc8c]1403
[53bb72e]1404    In high memory environments, this is desirable when you want to use the
1405    RTEMS "unlimited" objects option.  You will be able to create objects until
1406    you run out of all available memory rather then just until you run out of
1407    RTEMS Workspace.
[fd6dc8c]1408
[6c56401]1409.. index:: CONFIGURE_MAXIMUM_PROCESSORS
[1d073c5]1410
[3384994]1411.. _CONFIGURE_MAXIMUM_PROCESSORS:
1412
[0e8f08d]1413CONFIGURE_MAXIMUM_PROCESSORS
1414----------------------------
[1d073c5]1415
1416CONSTANT:
1417    ``CONFIGURE_MAXIMUM_PROCESSORS``
1418
1419DATA TYPE:
1420    Unsigned integer (``uint32_t``).
1421
1422RANGE:
1423    Positive.
1424
1425DEFAULT VALUE:
1426    The default value is 1.
1427
1428DESCRIPTION:
1429    ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to the maximum number of
1430    processors an applicaiton intends to use.  The number of acually available
1431    processors depends on the hardware and may be less.  It is recommended to
1432    use the smallest value suitable for the application in order to save
1433    memory.  Each processor needs an idle thread and interrupt stack for
1434    example.
1435
1436NOTES:
1437    If there are more processors available than configured, the rest will be
1438    ignored.  This configuration define is ignored in uni-processor
1439    configurations.
1440
[6c56401]1441.. index:: CONFIGURE_MICROSECONDS_PER_TICK
1442.. index:: tick quantum
[9aafb39]1443
[3384994]1444.. _CONFIGURE_MICROSECONDS_PER_TICK:
1445
[0e8f08d]1446CONFIGURE_MICROSECONDS_PER_TICK
1447-------------------------------
[fd6dc8c]1448
[53bb72e]1449CONSTANT:
[fd6dc8c]1450    ``CONFIGURE_MICROSECONDS_PER_TICK``
1451
[53bb72e]1452DATA TYPE:
[fd6dc8c]1453    Unsigned integer (``uint32_t``).
1454
[53bb72e]1455RANGE:
[fd6dc8c]1456    Positive.
1457
[53bb72e]1458DEFAULT VALUE:
[c9aaf31]1459    This is not defined by default. When not defined, the clock tick quantum is
1460    configured to be 10,000 microseconds which is ten (10) milliseconds.
[fd6dc8c]1461
[53bb72e]1462DESCRIPTION:
1463    This constant is  used to specify the length of time between clock ticks.
[fd6dc8c]1464
[53bb72e]1465    When the clock tick quantum value is too low, the system will spend so much
1466    time processing clock ticks that it does not have processing time available
1467    to perform application work. In this case, the system will become
1468    unresponsive.
[fd6dc8c]1469
[53bb72e]1470    The lowest practical time quantum varies widely based upon the speed of the
1471    target hardware and the architectural overhead associated with
1472    interrupts. In general terms, you do not want to configure it lower than is
1473    needed for the application.
[c9aaf31]1474
[53bb72e]1475    The clock tick quantum should be selected such that it all blocking and
1476    delay times in the application are evenly divisible by it. Otherwise,
1477    rounding errors will be introduced which may negatively impact the
1478    application.
[fd6dc8c]1479
[53bb72e]1480NOTES:
1481    This configuration parameter has no impact if the Clock Tick Device driver
1482    is not configured.
[fd6dc8c]1483
[53bb72e]1484    There may be BSP specific limits on the resolution or maximum value of a
1485    clock tick quantum.
[fd6dc8c]1486
[6c56401]1487.. index:: CONFIGURE_TICKS_PER_TIMESLICE
1488.. index:: ticks per timeslice
[9aafb39]1489
[0e8f08d]1490.. _CONFIGURE_TICKS_PER_TIMESLICE:
[3384994]1491
[0e8f08d]1492CONFIGURE_TICKS_PER_TIMESLICE
1493-----------------------------
[fd6dc8c]1494
[53bb72e]1495CONSTANT:
[fd6dc8c]1496    ``CONFIGURE_TICKS_PER_TIMESLICE``
1497
[53bb72e]1498DATA TYPE:
[fd6dc8c]1499    Unsigned integer (``uint32_t``).
1500
[53bb72e]1501RANGE:
[fd6dc8c]1502    Positive.
1503
[53bb72e]1504DEFAULT VALUE:
[fd6dc8c]1505    The default value is 50.
1506
[53bb72e]1507DESCRIPTION:
1508    This configuration parameter specifies the length of the timeslice quantum
1509    in ticks for each task.
[fd6dc8c]1510
[53bb72e]1511NOTES:
1512    This configuration parameter has no impact if the Clock Tick Device driver
1513    is not configured.
[fd6dc8c]1514
1515.. index:: CONFIGURE_MAXIMUM_PRIORITY
1516.. index:: maximum priority
1517.. index:: number of priority levels
1518
[0e8f08d]1519.. _CONFIGURE_MAXIMUM_PRIORITY:
[3384994]1520
[0e8f08d]1521CONFIGURE_MAXIMUM_PRIORITY
1522--------------------------
[6c56401]1523
[53bb72e]1524CONSTANT:
[fd6dc8c]1525    ``CONFIGURE_MAXIMUM_PRIORITY``
1526
[53bb72e]1527DATA TYPE:
[fd6dc8c]1528    Unsigned integer (``uint8_t``).
1529
[53bb72e]1530RANGE:
[fd6dc8c]1531    Valid values for this configuration parameter must be one (1) less than
1532    than a power of two (2) between 4 and 256 inclusively.  In other words,
1533    valid values are 3, 7, 31, 63, 127, and 255.
1534
[53bb72e]1535DEFAULT VALUE:
[c9aaf31]1536    The default value is 255, because RTEMS must support 256 priority levels to
1537    be compliant with various standards. These priorities range from zero (0)
1538    to 255.
[fd6dc8c]1539
[53bb72e]1540DESCRIPTION:
1541   This configuration parameter specified the maximum numeric priority of any
1542   task in the system and one less that the number of priority levels in the
1543   system.
[fd6dc8c]1544
[53bb72e]1545   Reducing the number of priorities in the system reduces the amount of memory
1546   allocated from the RTEMS Workspace.
[fd6dc8c]1547
[53bb72e]1548NOTES:
1549   The numerically greatest priority is the logically lowest priority in the
1550   system and will thus be used by the IDLE task.
[fd6dc8c]1551
[53bb72e]1552   Priority zero (0) is reserved for internal use by RTEMS and is not available
1553   to applications.
[fd6dc8c]1554
[53bb72e]1555   With some schedulers, reducing the number of priorities can reduce the
1556   amount of memory used by the scheduler. For example, the Deterministic
1557   Priority Scheduler (DPS) used by default uses three pointers of storage per
1558   priority level. Reducing the number of priorities from 256 levels to
1559   sixteen (16) can reduce memory usage by about three (3) kilobytes.
[fd6dc8c]1560
[6c56401]1561.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1562.. index:: maximum thread name size
[fde6ac6]1563
[3384994]1564.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
1565
[0e8f08d]1566CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
1567----------------------------------
[fde6ac6]1568
1569CONSTANT:
1570    ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
1571
1572DATA TYPE:
1573    Unsigned integer (``size_t``).
1574
1575RANGE:
1576    No restrictions.
1577
1578DEFAULT VALUE:
1579    The default value is 16.  This value was chosen for Linux compatibility,
1580    see
1581    `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
1582
1583DESCRIPTION:
1584   This configuration parameter specifies the maximum thread name size
1585   including the terminating `NUL` character.
1586
1587NOTE:
1588   The size of the thread control block is increased by the maximum thread name
[60a6d6e]1589   size.  This configuration option is available since RTEMS 5.1.
[fde6ac6]1590
[6c56401]1591.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
1592.. index:: minimum task stack size
[9aafb39]1593
[0e8f08d]1594.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
[3384994]1595
[0e8f08d]1596CONFIGURE_MINIMUM_TASK_STACK_SIZE
1597---------------------------------
[fd6dc8c]1598
[53bb72e]1599CONSTANT:
[fd6dc8c]1600    ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
1601
[53bb72e]1602DATA TYPE:
[fd6dc8c]1603    Unsigned integer (``uint32_t``).
1604
[53bb72e]1605RANGE:
[fd6dc8c]1606    Positive.
1607
[53bb72e]1608DEFAULT VALUE:
[fd6dc8c]1609    This is not defined by default, which sets the executive to the recommended
1610    minimum stack size for this processor.
1611
[53bb72e]1612DESCRIPTION:
1613    The configuration parameter is set to the number of bytes the application
1614    wants the minimum stack size to be for every task or thread in the system.
[fd6dc8c]1615
[53bb72e]1616    Adjusting this parameter should be done with caution. Examining the actual
1617    usage using the Stack Checker Usage Reporting facility is recommended.
[fd6dc8c]1618
[53bb72e]1619NOTES:
1620    This parameter can be used to lower the minimum from that recommended. This
1621    can be used in low memory systems to reduce memory consumption for
1622    stacks. However, this must be done with caution as it could increase the
1623    possibility of a blown task stack.
[fd6dc8c]1624
[53bb72e]1625    This parameter can be used to increase the minimum from that
1626    recommended. This can be used in higher memory systems to reduce the risk
1627    of stack overflow without performing analysis on actual consumption.
[fd6dc8c]1628
[6c56401]1629.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
1630.. index:: interrupt stack size
[9aafb39]1631
[0e8f08d]1632.. _CONFIGURE_INTERRUPT_STACK_SIZE:
[3384994]1633
[0e8f08d]1634CONFIGURE_INTERRUPT_STACK_SIZE
1635------------------------------
[fd6dc8c]1636
[53bb72e]1637CONSTANT:
[fd6dc8c]1638    ``CONFIGURE_INTERRUPT_STACK_SIZE``
1639
[53bb72e]1640DATA TYPE:
[fd6dc8c]1641    Unsigned integer (``uint32_t``).
1642
[53bb72e]1643RANGE:
[fd6dc8c]1644    Positive.
1645
[53bb72e]1646DEFAULT VALUE:
[c9aaf31]1647    The default value is CONFIGURE_MINIMUM_TASK_STACK_SIZE, which is the
1648    minimum interrupt stack size.
[fd6dc8c]1649
[53bb72e]1650DESCRIPTION:
1651    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is set to the size of the interrupt
1652    stack.  The interrupt stack size is often set by the BSP but since this
1653    memory may be allocated from the RTEMS Workspace, it must be accounted for.
[fd6dc8c]1654
[53bb72e]1655NOTES:
1656    In some BSPs, changing this constant does NOT change the size of the
1657    interrupt stack, only the amount of memory reserved for it.
[fd6dc8c]1658
[53bb72e]1659    Patches which result in this constant only being used in memory
1660    calculations when the interrupt stack is intended to be allocated from the
1661    RTEMS Workspace would be welcomed by the RTEMS Project.
[fd6dc8c]1662
[6c56401]1663.. index:: CONFIGURE_EXTRA_TASK_STACKS
1664.. index:: memory for task tasks
[fd6dc8c]1665
[0e8f08d]1666.. _CONFIGURE_EXTRA_TASK_STACKS:
[3384994]1667
[0e8f08d]1668CONFIGURE_EXTRA_TASK_STACKS
1669---------------------------
[fd6dc8c]1670
[53bb72e]1671CONSTANT:
[fd6dc8c]1672    ``CONFIGURE_EXTRA_TASK_STACKS``
1673
[53bb72e]1674DATA TYPE:
[fd6dc8c]1675    Unsigned integer (``size_t``).
1676
[53bb72e]1677RANGE:
[fd6dc8c]1678    Undefined or positive.
1679
[53bb72e]1680DEFAULT VALUE:
[fd6dc8c]1681    The default value is 0.
1682
[53bb72e]1683DESCRIPTION:
1684    This configuration parameter is set to the number of bytes the applications
1685    wishes to add to the task stack requirements calculated by
1686    ``<rtems/confdefs.h>``.
[fd6dc8c]1687
[53bb72e]1688NOTES:
1689    This parameter is very important.  If the application creates tasks with
1690    stacks larger then the minimum, then that memory is NOT accounted for by
1691    ``<rtems/confdefs.h>``.
[fd6dc8c]1692
1693.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1694.. index:: clear C Program Heap
1695.. index:: clear RTEMS Workspace
1696.. index:: zero C Program Heap
1697.. index:: zero RTEMS Workspace
1698
[0e8f08d]1699.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
[3384994]1700
[0e8f08d]1701CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1702--------------------------------------
[6c56401]1703
[53bb72e]1704CONSTANT:
[fd6dc8c]1705    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
1706
[53bb72e]1707DATA TYPE:
[fd6dc8c]1708    Boolean feature macro.
1709
[53bb72e]1710RANGE:
[fd6dc8c]1711    Defined or undefined.
1712
[53bb72e]1713DEFAULT VALUE:
[c9aaf31]1714    This is not defined by default, unless overridden by the BSP.  The default
1715    is *NOT* to zero out the RTEMS Workspace or C Program Heap.
[fd6dc8c]1716
[53bb72e]1717DESCRIPTION:
1718    This macro indicates whether RTEMS should zero the RTEMS Workspace and C
1719    Program Heap as part of its initialization.  If defined, the memory regions
1720    are zeroed.  Otherwise, they are not.
[fd6dc8c]1721
[53bb72e]1722NOTES:
1723    Zeroing memory can add significantly to system boot time. It is not
1724    necessary for RTEMS but is often assumed by support libraries.
[fd6dc8c]1725
[6c56401]1726.. index:: CONFIGURE_STACK_CHECKER_ENABLED
[9aafb39]1727
[0e8f08d]1728.. _CONFIGURE_STACK_CHECKER_ENABLED:
[3384994]1729
[0e8f08d]1730CONFIGURE_STACK_CHECKER_ENABLED
1731-------------------------------
[fd6dc8c]1732
[53bb72e]1733CONSTANT:
[fd6dc8c]1734    ``CONFIGURE_STACK_CHECKER_ENABLED``
1735
[53bb72e]1736DATA TYPE:
[fd6dc8c]1737    Boolean feature macro.
1738
[53bb72e]1739RANGE:
[fd6dc8c]1740    Defined or undefined.
1741
[53bb72e]1742DEFAULT VALUE:
[fd6dc8c]1743    This is not defined by default, and thus stack checking is disabled.
1744
[53bb72e]1745DESCRIPTION:
1746    This configuration parameter is defined when the application wishes to
1747    enable run-time stack bounds checking.
[fd6dc8c]1748
[53bb72e]1749NOTES:
1750    In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
[fd6dc8c]1751
[53bb72e]1752    This increases the time required to create tasks as well as adding overhead
1753    to each context switch.
[fd6dc8c]1754
[6c56401]1755.. index:: CONFIGURE_INITIAL_EXTENSIONS
[9aafb39]1756
[3384994]1757.. _CONFIGURE_INITIAL_EXTENSIONS:
1758
[0e8f08d]1759CONFIGURE_INITIAL_EXTENSIONS
1760----------------------------
[fd6dc8c]1761
[53bb72e]1762CONSTANT:
[fd6dc8c]1763    ``CONFIGURE_INITIAL_EXTENSIONS``
1764
[53bb72e]1765DATA TYPE:
[fd6dc8c]1766    List of user extension initializers (``rtems_extensions_table``).
1767
[53bb72e]1768RANGE:
[fd6dc8c]1769    Undefined or a list of one or more user extensions.
1770
[53bb72e]1771DEFAULT VALUE:
[fd6dc8c]1772    This is not defined by default.
1773
[53bb72e]1774DESCRIPTION:
1775    If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
1776    this application specific set of initial extensions will be placed in the
1777    initial extension table.
[fd6dc8c]1778
[53bb72e]1779NOTES:
1780    None.
[fd6dc8c]1781
1782Configuring Custom Task Stack Allocation
1783========================================
1784
1785RTEMS allows the application or BSP to define its own allocation and
[c9aaf31]1786deallocation methods for task stacks. This can be used to place task stacks in
1787special areas of memory or to utilize a Memory Management Unit so that stack
1788overflows are detected in hardware.
[fd6dc8c]1789
[6c56401]1790.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
[9aafb39]1791
[0e8f08d]1792.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
[3384994]1793
[0e8f08d]1794CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1795-----------------------------------
[fd6dc8c]1796
[53bb72e]1797CONSTANT:
[fd6dc8c]1798    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1799
[53bb72e]1800DATA TYPE:
[fd6dc8c]1801    Function pointer.
1802
[53bb72e]1803RANGE:
[fd6dc8c]1804    Undefined, NULL or valid function pointer.
1805
[53bb72e]1806DEFAULT VALUE:
[c9aaf31]1807    The default value is NULL, which indicates that task stacks will be
1808    allocated from the RTEMS Workspace.
[fd6dc8c]1809
[53bb72e]1810DESCRIPTION:
1811    ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
1812    method for an application or BSP specific task stack allocation
1813    implementation.
[fd6dc8c]1814
[53bb72e]1815NOTES:
1816    A correctly configured system must configure the following to be consistent:
[fd6dc8c]1817
1818- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1819
1820- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1821
1822- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1823
[6c56401]1824.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
1825.. index:: task stack allocator
[9aafb39]1826
[0e8f08d]1827.. _CONFIGURE_TASK_STACK_ALLOCATOR:
[3384994]1828
[0e8f08d]1829CONFIGURE_TASK_STACK_ALLOCATOR
1830------------------------------
[fd6dc8c]1831
[53bb72e]1832CONSTANT:
[fd6dc8c]1833    ``CONFIGURE_TASK_STACK_ALLOCATOR``
1834
[53bb72e]1835DATA TYPE:
[fd6dc8c]1836    Function pointer.
1837
[53bb72e]1838RANGE:
[fd6dc8c]1839    Undefined or valid function pointer.
1840
[53bb72e]1841DEFAULT VALUE:
[c9aaf31]1842    The default value is ``_Workspace_Allocate``, which indicates that task
1843    stacks will be allocated from the RTEMS Workspace.
[fd6dc8c]1844
[53bb72e]1845DESCRIPTION:
1846    ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
1847    allocate task stacks.
[fd6dc8c]1848
[53bb72e]1849NOTES:
1850    A correctly configured system must configure the following to be consistent:
[fd6dc8c]1851
1852- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1853
1854- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1855
1856- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1857
[6c56401]1858.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
1859.. index:: task stack deallocator
[9aafb39]1860
[0e8f08d]1861.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
[3384994]1862
[0e8f08d]1863CONFIGURE_TASK_STACK_DEALLOCATOR
1864--------------------------------
[fd6dc8c]1865
[53bb72e]1866CONSTANT:
[fd6dc8c]1867    ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1868
[53bb72e]1869DATA TYPE:
[fd6dc8c]1870    Function pointer.
1871
[53bb72e]1872RANGE:
[fd6dc8c]1873    Undefined or valid function pointer.
1874
[53bb72e]1875DEFAULT VALUE:
[c9aaf31]1876    The default value is ``_Workspace_Free``, which indicates that task stacks
1877    will be allocated from the RTEMS Workspace.
[fd6dc8c]1878
[53bb72e]1879DESCRIPTION:
1880    ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
1881    to free task stacks.
[fd6dc8c]1882
[53bb72e]1883NOTES:
1884    A correctly configured system must configure the following to be consistent:
[fd6dc8c]1885
1886- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
1887
1888- ``CONFIGURE_TASK_STACK_ALLOCATOR``
1889
1890- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
1891
1892Configuring Memory for Classic API Message Buffers
1893==================================================
1894
[c9aaf31]1895This section describes the configuration parameters related to specifying the
1896amount of memory reserved for Classic API Message Buffers.
[fd6dc8c]1897
[6c56401]1898.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1899.. index:: memory for a single message queue's buffers
[9aafb39]1900
[0e8f08d]1901.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
[3384994]1902
[0e8f08d]1903CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
1904-----------------------------------
[fd6dc8c]1905
[53bb72e]1906CONSTANT:
[fd6dc8c]1907    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
1908
[53bb72e]1909DATA TYPE:
[fd6dc8c]1910    Unsigned integer (``size_t``).
1911
[53bb72e]1912RANGE:
[fd6dc8c]1913    Positive.
1914
[53bb72e]1915DEFAULT VALUE:
[fd6dc8c]1916    The default value is None.
1917
[53bb72e]1918DESCRIPTION:
1919    This is a helper macro which is used to assist in computing the total
1920    amount of memory required for message buffers.  Each message queue will
1921    have its own configuration with maximum message size and maximum number of
1922    pending messages.
[fd6dc8c]1923
[53bb72e]1924    The interface for this macro is as follows:
[fd6dc8c]1925
[53bb72e]1926    .. code-block:: c
[fd6dc8c]1927
[53bb72e]1928        CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
[fd6dc8c]1929
[53bb72e]1930    Where ``max_messages`` is the maximum number of pending messages and
1931    ``size_per`` is the size in bytes of the user message.
[fd6dc8c]1932
[53bb72e]1933NOTES:
[fd6dc8c]1934
[53bb72e]1935    This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
[fd6dc8c]1936
[6c56401]1937.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
1938.. index:: configure message queue buffer memory
[9aafb39]1939
[0e8f08d]1940.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
[3384994]1941
[0e8f08d]1942CONFIGURE_MESSAGE_BUFFER_MEMORY
1943-------------------------------
[fd6dc8c]1944
[53bb72e]1945CONSTANT:
[fd6dc8c]1946    ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
1947
[53bb72e]1948DATA TYPE:
[fd6dc8c]1949    integer summation macro
1950
[53bb72e]1951RANGE:
[fd6dc8c]1952    undefined (zero) or calculation resulting in a positive integer
1953
[53bb72e]1954DEFAULT VALUE:
[fd6dc8c]1955    This is not defined by default, and zero (0) memory is reserved.
1956
[53bb72e]1957DESCRIPTION:
1958    This macro is set to the number of bytes the application requires to be
1959    reserved for pending Classic API Message Queue buffers.
1960
1961NOTES:
1962    The following illustrates how the help macro
1963    ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE`` can be used to assist in
1964    calculating the message buffer memory required.  In this example, there are
1965    two message queues used in this application.  The first message queue has
1966    maximum of 24 pending messages with the message structure defined by the
1967    type ``one_message_type``.  The other message queue has maximum of 500
1968    pending messages with the message structure defined by the type
1969    ``other_message_type``.
1970
1971    .. code-block:: c
1972
1973        #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
1974                    (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
1975                         24, sizeof(one_message_type) \
1976                     ) + \
1977                     CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
1978                         500, sizeof(other_message_type) \
1979                     )
[fd6dc8c]1980
1981Seldom Used Configuration Parameters
1982====================================
1983
[c9aaf31]1984This section describes configuration parameters supported by
1985``<rtems/confdefs.h>`` which are seldom used by applications. These parameters
1986tend to be oriented to debugging system configurations and providing
1987work-arounds when the memory estimated by ``<rtems/confdefs.h>`` is incorrect.
[fd6dc8c]1988
[6c56401]1989.. index:: CONFIGURE_MEMORY_OVERHEAD
[fd6dc8c]1990
[0e8f08d]1991.. _CONFIGURE_MEMORY_OVERHEAD:
[3384994]1992
[0e8f08d]1993CONFIGURE_MEMORY_OVERHEAD
1994-------------------------
[fd6dc8c]1995
[53bb72e]1996CONSTANT:
[fd6dc8c]1997    ``CONFIGURE_MEMORY_OVERHEAD``
1998
[53bb72e]1999DATA TYPE:
[fd6dc8c]2000    Unsigned integer (``size_t``).
2001
[53bb72e]2002RANGE:
[fd6dc8c]2003    Zero or positive.
2004
[53bb72e]2005DEFAULT VALUE:
[fd6dc8c]2006    The default value is 0.
2007
[53bb72e]2008DESCRIPTION:
2009    This parameter is set to the number of kilobytes the application wishes to
2010    add to the requirements calculated by ``<rtems/confdefs.h>``.
[fd6dc8c]2011
[53bb72e]2012NOTES:
2013    This configuration parameter should only be used when it is suspected that
2014    a bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.
2015    Typically the memory allocation will be too low when an application does
2016    not account for all message queue buffers or task stacks.
[fd6dc8c]2017
[6c56401]2018.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
[9aafb39]2019
[0e8f08d]2020.. _CONFIGURE_HAS_OWN_CONFIGURATION_TABLE:
[3384994]2021
[0e8f08d]2022CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
2023-------------------------------------
[fd6dc8c]2024
[53bb72e]2025CONSTANT:
[fd6dc8c]2026    ``CONFIGURE_HAS_OWN_CONFIGURATION_TABLE``
2027
[53bb72e]2028DATA TYPE:
[fd6dc8c]2029    Boolean feature macro.
2030
[53bb72e]2031RANGE:
[fd6dc8c]2032    Defined or undefined.
2033
[53bb72e]2034DEFAULT VALUE:
[fd6dc8c]2035    This is not defined by default.
2036
[53bb72e]2037DESCRIPTION:
2038    This configuration parameter should only be defined if the application is
2039    providing their own complete set of configuration tables.
[fd6dc8c]2040
[53bb72e]2041NOTES:
2042    None.
[fd6dc8c]2043
2044C Library Support Configuration
2045===============================
2046
[c9aaf31]2047This section defines the file system and IO library related configuration
2048parameters supported by ``<rtems/confdefs.h>``.
[fd6dc8c]2049
[6c56401]2050.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2051.. index:: maximum file descriptors
[9aafb39]2052
[0e8f08d]2053.. _CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS:
[3384994]2054
[0e8f08d]2055CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
2056----------------------------------------
[fd6dc8c]2057
[53bb72e]2058CONSTANT:
[fd6dc8c]2059    ``CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS``
2060
[53bb72e]2061DATA TYPE:
[fd6dc8c]2062    Unsigned integer (``uint32_t``).
2063
[53bb72e]2064RANGE:
[fd6dc8c]2065    Zero or positive.
2066
[53bb72e]2067DEFAULT VALUE:
[fd6dc8c]2068    If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
[c9aaf31]2069    default value is 3, otherwise the default value is 0.  Three file
2070    descriptors allows RTEMS to support standard input, output, and error I/O
2071    streams on ``/dev/console``.
[fd6dc8c]2072
[53bb72e]2073DESCRIPTION:
2074    This configuration parameter is set to the maximum number of file like
2075    objects that can be concurrently open.
[fd6dc8c]2076
[53bb72e]2077NOTES:
2078    None.
[fd6dc8c]2079
2080File System Configuration Parameters
2081====================================
2082
2083This section defines File System related configuration parameters.
2084
[6c56401]2085.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
[9aafb39]2086
[0e8f08d]2087.. _CONFIGURE_HAS_OWN_MOUNT_TABLE:
[3384994]2088
[0e8f08d]2089CONFIGURE_HAS_OWN_MOUNT_TABLE
2090-----------------------------
[fd6dc8c]2091
[53bb72e]2092CONSTANT:
[fd6dc8c]2093    ``CONFIGURE_HAS_OWN_MOUNT_TABLE``
2094
[53bb72e]2095DATA TYPE:
[fd6dc8c]2096    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2097
[53bb72e]2098RANGE:
[fd6dc8c]2099    Undefined or an array of type ``rtems_filesystem_mount_table_t``.
2100
[53bb72e]2101DEFAULT VALUE:
[fd6dc8c]2102    This is not defined by default.
2103
[53bb72e]2104DESCRIPTION:
2105    This configuration parameter is defined when the application provides their
2106    own filesystem mount table.  The mount table is an array of
2107    ``rtems_filesystem_mount_table_t`` entries pointed to by the global
2108    variable ``rtems_filesystem_mount_table``.  The number of entries in this
2109    table is in an integer variable named ``rtems_filesystem_mount_table_t``.
[fd6dc8c]2110
2111.. COMMENT: XXX - is the variable name for the count right?
2112
[53bb72e]2113NOTES:
2114    None.
[fd6dc8c]2115
2116.. COMMENT: XXX - Please provide an example
2117
[6c56401]2118.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
[9aafb39]2119
[0e8f08d]2120.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
[3384994]2121
[0e8f08d]2122CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
2123--------------------------------------
[fd6dc8c]2124
[53bb72e]2125CONSTANT:
[fd6dc8c]2126    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
2127
[53bb72e]2128DATA TYPE:
[fd6dc8c]2129    Boolean feature macro.
2130
[53bb72e]2131RANGE:
[fd6dc8c]2132    Defined or undefined.
2133
[53bb72e]2134DEFAULT VALUE:
[c9aaf31]2135    This is not defined by default. If no other root file system configuration
2136    parameters are specified, the IMFS will be used as the root file system.
[fd6dc8c]2137
[53bb72e]2138DESCRIPTION:
2139    This configuration parameter is defined if the application wishes to use
2140    the device-only filesytem as the root file system.
[fd6dc8c]2141
[53bb72e]2142NOTES:
2143    The device-only filesystem supports only device nodes and is smaller in
2144    executable code size than the full IMFS and miniIMFS.
[fd6dc8c]2145
[53bb72e]2146    The devFS is comparable in functionality to the pseudo-filesystem name
2147    space provided before RTEMS release 4.5.0.
[fd6dc8c]2148
[6c56401]2149.. index:: CONFIGURE_MAXIMUM_DEVICES
[9aafb39]2150
[0e8f08d]2151.. _CONFIGURE_MAXIMUM_DEVICES:
[3384994]2152
[0e8f08d]2153CONFIGURE_MAXIMUM_DEVICES
2154-------------------------
[fd6dc8c]2155
[53bb72e]2156CONSTANT:
[fd6dc8c]2157    ``CONFIGURE_MAXIMUM_DEVICES``
2158
[53bb72e]2159DATA TYPE:
[fd6dc8c]2160    Unsigned integer (``uint32_t``).
2161
[53bb72e]2162RANGE:
[fd6dc8c]2163    Positive.
2164
[53bb72e]2165DEFAULT VALUE:
[c9aaf31]2166    If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
2167    ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
[fd6dc8c]2168
[53bb72e]2169DESCRIPTION:
2170    ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
2171    devices that may be registered in the device file system (devFS).
[fd6dc8c]2172
[53bb72e]2173NOTES:
2174    This option is specific to the device file system (devFS) and should not be
2175    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
2176    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
2177    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
[fd6dc8c]2178
[6c56401]2179.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
[9aafb39]2180
[0e8f08d]2181.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
[3384994]2182
[0e8f08d]2183CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
2184----------------------------------------
[fd6dc8c]2185
[53bb72e]2186CONSTANT:
[fd6dc8c]2187    ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
2188
[53bb72e]2189DATA TYPE:
[fd6dc8c]2190    Boolean feature macro.
2191
[53bb72e]2192RANGE:
[fd6dc8c]2193    Defined or undefined.
2194
[53bb72e]2195DEFAULT VALUE:
[c9aaf31]2196    This is not defined by default. If no other root file system configuration
2197    parameters are specified, the IMFS will be used as the root file system.
[fd6dc8c]2198
[53bb72e]2199DESCRIPTION:
2200    This configuration parameter is defined if the application dose not intend
2201    to use any kind of filesystem support. This include the device
2202    infrastructure necessary to support ``printf()``.
[fd6dc8c]2203
[53bb72e]2204NOTES:
2205    None.
[fd6dc8c]2206
[6c56401]2207.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
[9aafb39]2208
[0e8f08d]2209.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
[3384994]2210
[0e8f08d]2211CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
2212-----------------------------------------
[fd6dc8c]2213
[53bb72e]2214CONSTANT:
[fd6dc8c]2215    ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
2216
[53bb72e]2217DATA TYPE:
[fd6dc8c]2218    Boolean feature macro.
2219
[53bb72e]2220RANGE:
[fd6dc8c]2221    Defined or undefined.
2222
[53bb72e]2223DEFAULT VALUE:
[fd6dc8c]2224    This is not defined by default.
2225
[53bb72e]2226DESCRIPTION:
2227    In case this configuration option is defined, then the following
2228    configuration options will be defined as well
[fd6dc8c]2229
[53bb72e]2230    - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
[fd6dc8c]2231
[53bb72e]2232    - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
[fd6dc8c]2233
[53bb72e]2234    - ``CONFIGURE_IMFS_DISABLE_UTIME``,
[fd6dc8c]2235
[53bb72e]2236    - ``CONFIGURE_IMFS_DISABLE_LINK``,
[fd6dc8c]2237
[53bb72e]2238    - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
[fd6dc8c]2239
[53bb72e]2240    - ``CONFIGURE_IMFS_DISABLE_READLINK``,
[fd6dc8c]2241
[53bb72e]2242    - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
[fd6dc8c]2243
[53bb72e]2244    - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
[fd6dc8c]2245
[6c56401]2246.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
[9aafb39]2247
[0e8f08d]2248.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
[3384994]2249
[0e8f08d]2250CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
2251--------------------------------------
[fd6dc8c]2252
[53bb72e]2253CONSTANT:
[fd6dc8c]2254    ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
2255
[53bb72e]2256DATA TYPE:
[fd6dc8c]2257    Boolean feature macro.
2258
[53bb72e]2259RANGE:
[fd6dc8c]2260    Valid values for this configuration parameter are a power of two (2)
[c9aaf31]2261    between 16 and 512 inclusive.  In other words, valid values are 16, 32, 64,
2262    128, 256,and 512.
[fd6dc8c]2263
[53bb72e]2264DEFAULT VALUE:
[fd6dc8c]2265    The default IMFS block size is 128 bytes.
2266
[53bb72e]2267DESCRIPTION:
2268    This configuration parameter specifies the block size for in-memory files
2269    managed by the IMFS. The configured block size has two impacts. The first
2270    is the average amount of unused memory in the last block of each file. For
2271    example, when the block size is 512, on average one-half of the last block
2272    of each file will remain unused and the memory is wasted. In contrast, when
2273    the block size is 16, the average unused memory per file is only 8
2274    bytes. However, it requires more allocations for the same size file and
2275    thus more overhead per block for the dynamic memory management.
[fd6dc8c]2276
[53bb72e]2277    Second, the block size has an impact on the maximum size file that can be
2278    stored in the IMFS. With smaller block size, the maximum file size is
2279    correspondingly smaller. The following shows the maximum file size possible
2280    based on the configured block size:
[fd6dc8c]2281
[53bb72e]2282    - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
[fd6dc8c]2283
[53bb72e]2284    - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
[fd6dc8c]2285
[53bb72e]2286    - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
[fd6dc8c]2287
[53bb72e]2288    - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
[fd6dc8c]2289
[53bb72e]2290    - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
[c9aaf31]2291
[53bb72e]2292    - when the block size is 512 bytes, the maximum file size is 1,082,195,456
2293      bytes.
[fd6dc8c]2294
[6c56401]2295.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
[9aafb39]2296
[0e8f08d]2297.. _CONFIGURE_IMFS_DISABLE_CHOWN:
[3384994]2298
[0e8f08d]2299CONFIGURE_IMFS_DISABLE_CHOWN
2300----------------------------
[fd6dc8c]2301
[53bb72e]2302CONSTANT:
[fd6dc8c]2303    ``CONFIGURE_IMFS_DISABLE_CHOWN``
2304
[53bb72e]2305DATA TYPE:
[fd6dc8c]2306    Boolean feature macro.
2307
[53bb72e]2308RANGE:
[fd6dc8c]2309    Defined or undefined.
2310
[53bb72e]2311DEFAULT VALUE:
[fd6dc8c]2312    This is not defined by default.
2313
[53bb72e]2314DESCRIPTION:
2315    In case this configuration option is defined, then the support to change
2316    the owner is disabled in the root IMFS.
[fd6dc8c]2317
[6c56401]2318.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
[9aafb39]2319
[0e8f08d]2320.. _CONFIGURE_IMFS_DISABLE_CHMOD:
[3384994]2321
[0e8f08d]2322CONFIGURE_IMFS_DISABLE_CHMOD
2323----------------------------
[fd6dc8c]2324
[53bb72e]2325CONSTANT:
[fd6dc8c]2326    ``CONFIGURE_IMFS_DISABLE_CHMOD``
2327
[53bb72e]2328DATA TYPE:
[fd6dc8c]2329    Boolean feature macro.
2330
[53bb72e]2331RANGE:
[fd6dc8c]2332    Defined or undefined.
2333
[53bb72e]2334DEFAULT VALUE:
[fd6dc8c]2335    This is not defined by default.
2336
[53bb72e]2337DESCRIPTION:
2338    In case this configuration option is defined, then the support to change
2339    the mode is disabled in the root IMFS.
[fd6dc8c]2340
[6c56401]2341.. index:: CONFIGURE_IMFS_DISABLE_UTIME
[9aafb39]2342
[0e8f08d]2343.. _CONFIGURE_IMFS_DISABLE_UTIME:
[3384994]2344
[0e8f08d]2345CONFIGURE_IMFS_DISABLE_UTIME
2346----------------------------
[fd6dc8c]2347
[53bb72e]2348CONSTANT:
[fd6dc8c]2349    ``CONFIGURE_IMFS_DISABLE_UTIME``
2350
[53bb72e]2351DATA TYPE:
[fd6dc8c]2352    Boolean feature macro.
2353
[53bb72e]2354RANGE:
[fd6dc8c]2355    Defined or undefined.
2356
[53bb72e]2357DEFAULT VALUE:
[fd6dc8c]2358    This is not defined by default.
2359
[53bb72e]2360DESCRIPTION:
2361    In case this configuration option is defined, then the support to change
2362    times is disabled in the root IMFS.
[fd6dc8c]2363
[6c56401]2364.. index:: CONFIGURE_IMFS_DISABLE_LINK
[9aafb39]2365
[0e8f08d]2366.. _CONFIGURE_IMFS_DISABLE_LINK:
[3384994]2367
[0e8f08d]2368CONFIGURE_IMFS_DISABLE_LINK
2369---------------------------
[fd6dc8c]2370
[53bb72e]2371CONSTANT:
[fd6dc8c]2372    ``CONFIGURE_IMFS_DISABLE_LINK``
2373
[53bb72e]2374DATA TYPE:
[fd6dc8c]2375    Boolean feature macro.
2376
[53bb72e]2377RANGE:
[fd6dc8c]2378    Defined or undefined.
2379
[53bb72e]2380DEFAULT VALUE:
[fd6dc8c]2381    This is not defined by default.
2382
[53bb72e]2383DESCRIPTION:
2384    In case this configuration option is defined, then the support to create
2385    hard links is disabled in the root IMFS.
[fd6dc8c]2386
[6c56401]2387.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
[9aafb39]2388
[0e8f08d]2389.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
[3384994]2390
[0e8f08d]2391CONFIGURE_IMFS_DISABLE_SYMLINK
2392------------------------------
[fd6dc8c]2393
[53bb72e]2394CONSTANT:
[fd6dc8c]2395    ``CONFIGURE_IMFS_DISABLE_SYMLINK``
2396
[53bb72e]2397DATA TYPE:
[fd6dc8c]2398    Boolean feature macro.
2399
[53bb72e]2400RANGE:
[fd6dc8c]2401    Defined or undefined.
2402
[53bb72e]2403DEFAULT VALUE:
[fd6dc8c]2404    This is not defined by default.
2405
[53bb72e]2406DESCRIPTION:
2407    In case this configuration option is defined, then the support to create
2408    symbolic links is disabled in the root IMFS.
[fd6dc8c]2409
[6c56401]2410.. index:: CONFIGURE_IMFS_DISABLE_READLINK
[9aafb39]2411
[0e8f08d]2412.. _CONFIGURE_IMFS_DISABLE_READLINK:
[3384994]2413
[0e8f08d]2414CONFIGURE_IMFS_DISABLE_READLINK
2415-------------------------------
[fd6dc8c]2416
[53bb72e]2417CONSTANT:
[fd6dc8c]2418    ``CONFIGURE_IMFS_DISABLE_READLINK``
2419
[53bb72e]2420DATA TYPE:
[fd6dc8c]2421    Boolean feature macro.
2422
[53bb72e]2423RANGE:
[fd6dc8c]2424    Defined or undefined.
2425
[53bb72e]2426DEFAULT VALUE:
[fd6dc8c]2427    This is not defined by default.
2428
[53bb72e]2429DESCRIPTION:
2430    In case this configuration option is defined, then the support to read
2431    symbolic links is disabled in the root IMFS.
[fd6dc8c]2432
[6c56401]2433.. index:: CONFIGURE_IMFS_DISABLE_RENAME
[9aafb39]2434
[0e8f08d]2435.. _CONFIGURE_IMFS_DISABLE_RENAME:
[3384994]2436
[0e8f08d]2437CONFIGURE_IMFS_DISABLE_RENAME
2438-----------------------------
[fd6dc8c]2439
[53bb72e]2440CONSTANT:
[fd6dc8c]2441    ``CONFIGURE_IMFS_DISABLE_RENAME``
2442
[53bb72e]2443DATA TYPE:
[fd6dc8c]2444    Boolean feature macro.
2445
[53bb72e]2446RANGE:
[fd6dc8c]2447    Defined or undefined.
2448
[53bb72e]2449DEFAULT VALUE:
[fd6dc8c]2450    This is not defined by default.
2451
[53bb72e]2452DESCRIPTION:
2453    In case this configuration option is defined, then the support to rename
2454    nodes is disabled in the root IMFS.
[fd6dc8c]2455
[6c56401]2456.. index:: CONFIGURE_IMFS_DISABLE_READDIR
[9aafb39]2457
[0e8f08d]2458.. _CONFIGURE_IMFS_DISABLE_READDIR:
[3384994]2459
[0e8f08d]2460CONFIGURE_IMFS_DISABLE_READDIR
2461------------------------------
[fd6dc8c]2462
[53bb72e]2463CONSTANT:
[fd6dc8c]2464    ``CONFIGURE_IMFS_DISABLE_READDIR``
2465
[53bb72e]2466DATA TYPE:
[fd6dc8c]2467    Boolean feature macro.
2468
[53bb72e]2469RANGE:
[fd6dc8c]2470    Defined or undefined.
2471
[53bb72e]2472DEFAULT VALUE:
[fd6dc8c]2473    This is not defined by default.
2474
[53bb72e]2475DESCRIPTION:
2476    In case this configuration option is defined, then the support to read a
2477    directory is disabled in the root IMFS.  It is still possible to open nodes
2478    in a directory.
[fd6dc8c]2479
[6c56401]2480.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
[9aafb39]2481
[0e8f08d]2482.. _CONFIGURE_IMFS_DISABLE_MOUNT:
[3384994]2483
[0e8f08d]2484CONFIGURE_IMFS_DISABLE_MOUNT
2485----------------------------
[fd6dc8c]2486
[53bb72e]2487CONSTANT:
[fd6dc8c]2488    ``CONFIGURE_IMFS_DISABLE_MOUNT``
2489
[53bb72e]2490DATA TYPE:
[fd6dc8c]2491    Boolean feature macro.
2492
[53bb72e]2493RANGE:
[fd6dc8c]2494    Defined or undefined.
2495
[53bb72e]2496DEFAULT VALUE:
[fd6dc8c]2497    This is not defined by default.
2498
[53bb72e]2499DESCRIPTION:
2500    In case this configuration option is defined, then the support to mount
2501    other file systems is disabled in the root IMFS.
[fd6dc8c]2502
[6c56401]2503.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
[9aafb39]2504
[0e8f08d]2505.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
[3384994]2506
[0e8f08d]2507CONFIGURE_IMFS_DISABLE_UNMOUNT
2508------------------------------
[fd6dc8c]2509
[53bb72e]2510CONSTANT:
[fd6dc8c]2511    ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
2512
[53bb72e]2513DATA TYPE:
[fd6dc8c]2514    Boolean feature macro.
2515
[53bb72e]2516RANGE:
[fd6dc8c]2517    Defined or undefined.
2518
[53bb72e]2519DEFAULT VALUE:
[fd6dc8c]2520    This is not defined by default.
2521
[53bb72e]2522DESCRIPTION:
2523    In case this configuration option is defined, then the support to unmount
2524    file systems is disabled in the root IMFS.
[fd6dc8c]2525
[6c56401]2526.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
[9aafb39]2527
[0e8f08d]2528.. _CONFIGURE_IMFS_DISABLE_MKNOD:
[3384994]2529
[0e8f08d]2530CONFIGURE_IMFS_DISABLE_MKNOD
2531----------------------------
[fd6dc8c]2532
[53bb72e]2533CONSTANT:
[fd6dc8c]2534    ``CONFIGURE_IMFS_DISABLE_MKNOD``
2535
[53bb72e]2536DATA TYPE:
[fd6dc8c]2537    Boolean feature macro.
2538
[53bb72e]2539RANGE:
[fd6dc8c]2540    Defined or undefined.
2541
[53bb72e]2542DEFAULT VALUE:
[fd6dc8c]2543    This is not defined by default.
2544
[53bb72e]2545DESCRIPTION:
2546    In case this configuration option is defined, then the support to make
2547    directories, devices, regular files and FIFOs is disabled in the root IMFS.
[fd6dc8c]2548
[6c56401]2549.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
[9aafb39]2550
[0e8f08d]2551.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
[3384994]2552
[0e8f08d]2553CONFIGURE_IMFS_DISABLE_MKNOD_FILE
2554---------------------------------
[fd6dc8c]2555
[53bb72e]2556CONSTANT:
[fd6dc8c]2557    ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
2558
[53bb72e]2559DATA TYPE:
[fd6dc8c]2560    Boolean feature macro.
2561
[53bb72e]2562RANGE:
[fd6dc8c]2563    Defined or undefined.
2564
[53bb72e]2565DEFAULT VALUE:
[fd6dc8c]2566    This is not defined by default.
2567
[53bb72e]2568DESCRIPTION:
2569    In case this configuration option is defined, then the support to make
2570    regular files is disabled in the root IMFS.
[fd6dc8c]2571
[6c56401]2572.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
[9aafb39]2573
[0e8f08d]2574.. _CONFIGURE_IMFS_DISABLE_RMNOD:
[3384994]2575
[0e8f08d]2576CONFIGURE_IMFS_DISABLE_RMNOD
2577----------------------------
[fd6dc8c]2578
[53bb72e]2579CONSTANT:
[fd6dc8c]2580    ``CONFIGURE_IMFS_DISABLE_RMNOD``
2581
[53bb72e]2582DATA TYPE:
[fd6dc8c]2583    Boolean feature macro.
2584
[53bb72e]2585RANGE:
[fd6dc8c]2586    Defined or undefined.
2587
[53bb72e]2588DEFAULT VALUE:
[fd6dc8c]2589    This is not defined by default.
2590
[53bb72e]2591DESCRIPTION:
2592    In case this configuration option is defined, then the support to remove
2593    nodes is disabled in the root IMFS.
[fd6dc8c]2594
2595Block Device Cache Configuration
2596================================
2597
2598This section defines Block Device Cache (bdbuf) related configuration
2599parameters.
2600
[6c56401]2601.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
[9aafb39]2602
[0e8f08d]2603.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
[3384994]2604
[0e8f08d]2605CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
2606------------------------------------
[fd6dc8c]2607
[53bb72e]2608CONSTANT:
[fd6dc8c]2609    ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
2610
[53bb72e]2611DATA TYPE:
[fd6dc8c]2612    Boolean feature macro.
2613
[53bb72e]2614RANGE:
[fd6dc8c]2615    Defined or undefined.
2616
[53bb72e]2617DEFAULT VALUE:
[fd6dc8c]2618    This is not defined by default.
2619
[53bb72e]2620DESCRIPTION:
2621    Provides a Block Device Cache configuration.
[fd6dc8c]2622
[53bb72e]2623NOTES:
2624    Each option of the Block Device Cache configuration can be explicitly set
2625    by the user with the configuration options below.  The Block Device Cache
2626    is used for example by the RFS and DOSFS file systems.
[fd6dc8c]2627
[6c56401]2628.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
[9aafb39]2629
[0e8f08d]2630.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
[3384994]2631
[0e8f08d]2632CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
2633---------------------------------
[fd6dc8c]2634
[53bb72e]2635CONSTANT:
[fd6dc8c]2636    ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
2637
[53bb72e]2638DATA TYPE:
[fd6dc8c]2639    Unsigned integer (``size_t``).
2640
[53bb72e]2641RANGE:
[fd6dc8c]2642    Positive.
2643
[53bb72e]2644DEFAULT VALUE:
[fd6dc8c]2645    The default value is 32768 bytes.
2646
[53bb72e]2647DESCRIPTION:
2648    Size of the cache memory in bytes.
[fd6dc8c]2649
[53bb72e]2650NOTES:
2651    None.
[fd6dc8c]2652
[6c56401]2653.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
[9aafb39]2654
[0e8f08d]2655.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
[3384994]2656
[0e8f08d]2657CONFIGURE_BDBUF_BUFFER_MIN_SIZE
2658-------------------------------
[fd6dc8c]2659
[53bb72e]2660CONSTANT:
[fd6dc8c]2661    ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
2662
[53bb72e]2663DATA TYPE:
[fd6dc8c]2664    Unsigned integer (``uint32_t``).
2665
[53bb72e]2666RANGE:
[fd6dc8c]2667    Positive.
2668
[53bb72e]2669DEFAULT VALUE:
[fd6dc8c]2670    The default value is 512 bytes.
2671
[53bb72e]2672DESCRIPTION:
2673    Defines the minimum size of a buffer in bytes.
[fd6dc8c]2674
[53bb72e]2675NOTES:
2676    None.
[fd6dc8c]2677
[6c56401]2678.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
[9aafb39]2679
[0e8f08d]2680.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
[3384994]2681
[0e8f08d]2682CONFIGURE_BDBUF_BUFFER_MAX_SIZE
2683-------------------------------
[fd6dc8c]2684
[53bb72e]2685CONSTANT:
[fd6dc8c]2686    ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
2687
[53bb72e]2688DATA TYPE:
[fd6dc8c]2689    Unsigned integer (``uint32_t``).
2690
[53bb72e]2691RANGE:
[fd6dc8c]2692    It must be positive and an integral multiple of the buffer minimum size.
2693
[53bb72e]2694DEFAULT VALUE:
[fd6dc8c]2695    The default value is 4096 bytes.
2696
[53bb72e]2697DESCRIPTION:
2698    Defines the maximum size of a buffer in bytes.
[fd6dc8c]2699
[53bb72e]2700NOTES:
2701    None.
[fd6dc8c]2702
[6c56401]2703.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
[9aafb39]2704
[0e8f08d]2705.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
[3384994]2706
[0e8f08d]2707CONFIGURE_SWAPOUT_SWAP_PERIOD
2708-----------------------------
[fd6dc8c]2709
[53bb72e]2710CONSTANT:
[fd6dc8c]2711    ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
2712
[53bb72e]2713DATA TYPE:
[fd6dc8c]2714    Unsigned integer (``uint32_t``).
2715
[53bb72e]2716RANGE:
[fd6dc8c]2717    Positive.
2718
[53bb72e]2719DEFAULT VALUE:
[fd6dc8c]2720    The default value is 250 milliseconds.
2721
[53bb72e]2722DESCRIPTION:
2723    Defines the swapout task swap period in milliseconds.
[fd6dc8c]2724
[53bb72e]2725NOTES:
2726    None.
[fd6dc8c]2727
[6c56401]2728.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
[9aafb39]2729
[0e8f08d]2730.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
[3384994]2731
[0e8f08d]2732CONFIGURE_SWAPOUT_BLOCK_HOLD
2733----------------------------
[fd6dc8c]2734
[53bb72e]2735CONSTANT:
[fd6dc8c]2736    ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
2737
[53bb72e]2738DATA TYPE:
[fd6dc8c]2739    Unsigned integer (``uint32_t``).
2740
[53bb72e]2741RANGE:
[fd6dc8c]2742    Positive.
2743
[53bb72e]2744DEFAULT VALUE:
[fd6dc8c]2745    The default value is 1000 milliseconds.
2746
[53bb72e]2747DESCRIPTION:
2748    Defines the swapout task maximum block hold time in milliseconds.
[fd6dc8c]2749
[53bb72e]2750NOTES:
2751    None.
[fd6dc8c]2752
[6c56401]2753.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
[9aafb39]2754
[0e8f08d]2755.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
[3384994]2756
[0e8f08d]2757CONFIGURE_SWAPOUT_TASK_PRIORITY
2758-------------------------------
[fd6dc8c]2759
[53bb72e]2760CONSTANT:
[fd6dc8c]2761    ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
2762
[53bb72e]2763DATA TYPE:
[fd6dc8c]2764    Task priority (``rtems_task_priority``).
2765
[53bb72e]2766RANGE:
[fd6dc8c]2767    Valid task priority.
2768
[53bb72e]2769DEFAULT VALUE:
[fd6dc8c]2770    The default value is 15.
2771
[53bb72e]2772DESCRIPTION:
2773    Defines the swapout task priority.
[fd6dc8c]2774
[53bb72e]2775NOTES:
2776    None.
[fd6dc8c]2777
[6c56401]2778.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
[9aafb39]2779
[0e8f08d]2780.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
[3384994]2781
[0e8f08d]2782CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
[fd6dc8c]2783-------------------------------------
2784
[53bb72e]2785CONSTANT:
[fd6dc8c]2786    ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
2787
[53bb72e]2788DATA TYPE:
[fd6dc8c]2789    Unsigned integer (``uint32_t``).
2790
[53bb72e]2791RANGE:
[fd6dc8c]2792    Positive.
2793
[53bb72e]2794DEFAULT VALUE:
[fd6dc8c]2795    The default value is 0.
2796
[53bb72e]2797DESCRIPTION:
2798    Defines the maximum blocks per read-ahead request.
[fd6dc8c]2799
[53bb72e]2800NOTES:
2801    A value of 0 disables the read-ahead task (default).  The read-ahead task
2802    will issue speculative read transfers if a sequential access pattern is
2803    detected.  This can improve the performance on some systems.
[fd6dc8c]2804
[6c56401]2805.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
[9aafb39]2806
[0e8f08d]2807.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
[3384994]2808
[0e8f08d]2809CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
[fd6dc8c]2810--------------------------------
2811
[53bb72e]2812CONSTANT:
[fd6dc8c]2813    ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
2814
[53bb72e]2815DATA TYPE:
[fd6dc8c]2816    Unsigned integer (``uint32_t``).
2817
[53bb72e]2818RANGE:
[fd6dc8c]2819    Positive.
2820
[53bb72e]2821DEFAULT VALUE:
[fd6dc8c]2822    The default value is 16.
2823
[53bb72e]2824DESCRIPTION:
2825    Defines the maximum blocks per write request.
[fd6dc8c]2826
[53bb72e]2827NOTES:
2828    None.
[fd6dc8c]2829
[6c56401]2830.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
[9aafb39]2831
[0e8f08d]2832.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
[3384994]2833
[0e8f08d]2834CONFIGURE_BDBUF_TASK_STACK_SIZE
2835-------------------------------
[fd6dc8c]2836
[53bb72e]2837CONSTANT:
[fd6dc8c]2838    ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
2839
[53bb72e]2840DATA TYPE:
[fd6dc8c]2841    Unsigned integer (``size_t``).
2842
[53bb72e]2843RANGE:
[fd6dc8c]2844    Zero or positive.
2845
[53bb72e]2846DEFAULT VALUE:
[fd6dc8c]2847    The default value is RTEMS_MINIMUM_STACK_SIZE.
2848
[53bb72e]2849DESCRIPTION:
2850    Defines the task stack size of the Block Device Cache tasks in bytes.
[fd6dc8c]2851
[53bb72e]2852NOTES:
2853    None.
[fd6dc8c]2854
[6c56401]2855.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
[9aafb39]2856
[0e8f08d]2857.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
[3384994]2858
[0e8f08d]2859CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
2860----------------------------------------
[fd6dc8c]2861
[53bb72e]2862CONSTANT:
[fd6dc8c]2863    ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
2864
[53bb72e]2865DATA TYPE:
[fd6dc8c]2866    Task priority (``rtems_task_priority``).
2867
[53bb72e]2868RANGE:
[fd6dc8c]2869    Valid task priority.
2870
[53bb72e]2871DEFAULT VALUE:
[fd6dc8c]2872    The default value is 15.
2873
[53bb72e]2874DESCRIPTION:
2875    Defines the read-ahead task priority.
[fd6dc8c]2876
[53bb72e]2877NOTES:
2878    None.
[fd6dc8c]2879
[6c56401]2880.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
[9aafb39]2881
[0e8f08d]2882.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
[3384994]2883
[0e8f08d]2884CONFIGURE_SWAPOUT_WORKER_TASKS
2885------------------------------
[fd6dc8c]2886
[53bb72e]2887CONSTANT:
[fd6dc8c]2888    ``CONFIGURE_SWAPOUT_WORKER_TASKS``
2889
[53bb72e]2890DATA TYPE:
[fd6dc8c]2891    Unsigned integer (``size_t``).
2892
[53bb72e]2893RANGE:
[fd6dc8c]2894    Zero or positive.
2895
[53bb72e]2896DEFAULT VALUE:
[fd6dc8c]2897    The default value is 0.
2898
[53bb72e]2899DESCRIPTION:
2900    Defines the swapout worker task count.
[fd6dc8c]2901
[53bb72e]2902NOTES:
2903    None.
[fd6dc8c]2904
[6c56401]2905.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
[9aafb39]2906
[0e8f08d]2907.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
[3384994]2908
[0e8f08d]2909CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
2910--------------------------------------
[fd6dc8c]2911
[53bb72e]2912CONSTANT:
[fd6dc8c]2913    ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
2914
[53bb72e]2915DATA TYPE:
[fd6dc8c]2916    Task priority (``rtems_task_priority``).
2917
[53bb72e]2918RANGE:
[fd6dc8c]2919    Valid task priority.
2920
[53bb72e]2921DEFAULT VALUE:
[fd6dc8c]2922    The default value is 15.
2923
[53bb72e]2924DESCRIPTION:
2925    Defines the swapout worker task priority.
[fd6dc8c]2926
[53bb72e]2927NOTES:
2928    None.
[fd6dc8c]2929
2930BSP Specific Settings
2931=====================
2932
[c9aaf31]2933This section describes BSP specific configuration settings used by
2934``<rtems/confdefs.h>``.  The BSP specific configuration settings are defined in
2935``<bsp.h>``.
[fd6dc8c]2936
[6c56401]2937.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
[9aafb39]2938
[0e8f08d]2939.. _CONFIGURE_DISABLE_BSP_SETTINGS:
[3384994]2940
[0e8f08d]2941CONFIGURE_DISABLE_BSP_SETTINGS
2942------------------------------
[fd6dc8c]2943
[53bb72e]2944CONSTANT:
[fd6dc8c]2945    ``CONFIGURE_DISABLE_BSP_SETTINGS``
2946
[53bb72e]2947DATA TYPE:
[fd6dc8c]2948    Boolean feature macro.
2949
[53bb72e]2950RANGE:
[fd6dc8c]2951    Defined or undefined.
2952
[53bb72e]2953DEFAULT VALUE:
[fd6dc8c]2954    This is not defined by default.
2955
[53bb72e]2956DESCRIPTION:
2957    All BSP specific configuration settings can be disabled by the application
2958    with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
[fd6dc8c]2959
[53bb72e]2960NOTES:
2961    None.
[fd6dc8c]2962
[6c56401]2963.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
[9aafb39]2964
[0e8f08d]2965.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
[3384994]2966
[0e8f08d]2967CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
2968----------------------------------
[fd6dc8c]2969
[53bb72e]2970CONSTANT:
[fd6dc8c]2971    ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
2972
[53bb72e]2973DATA TYPE:
[fd6dc8c]2974    Boolean feature macro.
2975
[53bb72e]2976RANGE:
[fd6dc8c]2977    Defined or undefined.
2978
[53bb72e]2979DEFAULT VALUE:
[fd6dc8c]2980    This option is BSP specific.
2981
[53bb72e]2982DESCRIPTION:
2983    This configuration parameter is defined by a BSP to indicate that it does
2984    not allocate all available memory to the C Program Heap used by the Malloc
2985    Family of routines.
[fd6dc8c]2986
[53bb72e]2987    If defined, when ``malloc()`` is unable to allocate memory, it will call
2988    the BSP supplied ``sbrk()`` to obtain more memory.
[fd6dc8c]2989
[53bb72e]2990NOTES:
2991    This parameter should not be defined by the application. Only the BSP knows
2992    how it allocates memory to the C Program Heap.
[fd6dc8c]2993
[6c56401]2994.. index:: BSP_IDLE_TASK_BODY
[9aafb39]2995
[0e8f08d]2996.. _BSP_IDLE_TASK_BODY:
[3384994]2997
[0e8f08d]2998BSP_IDLE_TASK_BODY
2999------------------
[fd6dc8c]3000
[53bb72e]3001CONSTANT:
[fd6dc8c]3002    ``BSP_IDLE_TASK_BODY``
3003
[53bb72e]3004DATA TYPE:
[fd6dc8c]3005    Function pointer.
3006
[53bb72e]3007RANGE:
[fd6dc8c]3008    Undefined or valid function pointer.
3009
[53bb72e]3010DEFAULT VALUE:
[fd6dc8c]3011    This option is BSP specific.
3012
[53bb72e]3013DESCRIPTION:
3014    If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
3015    ``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
3016    BSP specific idle task body will be used.
[fd6dc8c]3017
[53bb72e]3018NOTES:
3019    As it has knowledge of the specific CPU model, system controller logic, and
3020    peripheral buses, a BSP specific IDLE task may be capable of turning
3021    components off to save power during extended periods of no task activity
[fd6dc8c]3022
[6c56401]3023.. index:: BSP_IDLE_TASK_STACK_SIZE
[9aafb39]3024
[0e8f08d]3025.. _BSP_IDLE_TASK_STACK_SIZE:
[3384994]3026
[0e8f08d]3027BSP_IDLE_TASK_STACK_SIZE
3028------------------------
[fd6dc8c]3029
[53bb72e]3030CONSTANT:
[fd6dc8c]3031    ``BSP_IDLE_TASK_STACK_SIZE``
3032
[53bb72e]3033DATA TYPE:
[fd6dc8c]3034    Unsigned integer (``size_t``).
3035
[53bb72e]3036RANGE:
[fd6dc8c]3037    Undefined or positive.
3038
[53bb72e]3039DEFAULT VALUE:
[fd6dc8c]3040    This option is BSP specific.
3041
[53bb72e]3042DESCRIPTION:
3043    If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
3044    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
3045    this BSP suggested idle task stack size will be used.
[fd6dc8c]3046
[53bb72e]3047NOTES:
3048    The order of precedence for configuring the IDLE task stack size is:
[fd6dc8c]3049
[53bb72e]3050    - RTEMS default minimum stack size.
[fd6dc8c]3051
[53bb72e]3052    - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
[fd6dc8c]3053
[53bb72e]3054    - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
[fd6dc8c]3055
[53bb72e]3056    - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
[fd6dc8c]3057
3058.. COMMENT: XXX - add cross references to other related values.
3059
[6c56401]3060.. index:: BSP_INITIAL_EXTENSION
[9aafb39]3061
[0e8f08d]3062.. _BSP_INITIAL_EXTENSION:
[3384994]3063
[0e8f08d]3064BSP_INITIAL_EXTENSION
3065---------------------
[fd6dc8c]3066
[53bb72e]3067CONSTANT:
[fd6dc8c]3068    ``BSP_INITIAL_EXTENSION``
3069
[53bb72e]3070DATA TYPE:
[fd6dc8c]3071    List of user extension initializers (``rtems_extensions_table``).
3072
[53bb72e]3073RANGE:
[fd6dc8c]3074    Undefined or a list of user extension initializers.
3075
[53bb72e]3076DEFAULT VALUE:
[fd6dc8c]3077    This option is BSP specific.
3078
[53bb72e]3079DESCRIPTION:
3080    If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
3081    initial extension will be placed as the last entry in the initial extension
3082    table.
[fd6dc8c]3083
[53bb72e]3084NOTES:
3085    None.
[fd6dc8c]3086
[6c56401]3087.. index:: BSP_INTERRUPT_STACK_SIZE
[9aafb39]3088
[0e8f08d]3089.. _BSP_INTERRUPT_STACK_SIZE:
[3384994]3090
[0e8f08d]3091BSP_INTERRUPT_STACK_SIZE
3092------------------------
[fd6dc8c]3093
[53bb72e]3094CONSTANT:
[fd6dc8c]3095    ``BSP_INTERRUPT_STACK_SIZE``
3096
[53bb72e]3097DATA TYPE:
[fd6dc8c]3098    Unsigned integer (``size_t``).
3099
[53bb72e]3100RANGE:
[fd6dc8c]3101    Undefined or positive.
3102
[53bb72e]3103DEFAULT VALUE:
[fd6dc8c]3104    This option is BSP specific.
3105
[53bb72e]3106DESCRIPTION:
3107    If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
3108    ``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
3109    this BSP specific interrupt stack size will be used.
[fd6dc8c]3110
[53bb72e]3111NOTES:
3112    None.
[fd6dc8c]3113
[6c56401]3114.. index:: BSP_MAXIMUM_DEVICES
[9aafb39]3115
[0e8f08d]3116.. _BSP_MAXIMUM_DEVICES:
[3384994]3117
[0e8f08d]3118BSP_MAXIMUM_DEVICES
3119-------------------
[fd6dc8c]3120
[53bb72e]3121CONSTANT:
[fd6dc8c]3122    ``BSP_MAXIMUM_DEVICES``
3123
[53bb72e]3124DATA TYPE:
[fd6dc8c]3125    Unsigned integer (``size_t``).
3126
[53bb72e]3127RANGE:
[fd6dc8c]3128    Undefined or positive.
3129
[53bb72e]3130DEFAULT VALUE:
[fd6dc8c]3131    This option is BSP specific.
3132
[53bb72e]3133DESCRIPTION:
3134    If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
3135    ``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
3136    BSP specific maximum device count will be used.
[fd6dc8c]3137
[53bb72e]3138NOTES:
3139    This option is specific to the device file system (devFS) and should not be
3140    confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option.  This parameter
3141    only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
3142    ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
[fd6dc8c]3143
[6c56401]3144.. index:: BSP_ZERO_WORKSPACE_AUTOMATICALLY
[9aafb39]3145
[0e8f08d]3146.. _BSP_ZERO_WORKSPACE_AUTOMATICALLY:
[3384994]3147
[0e8f08d]3148BSP_ZERO_WORKSPACE_AUTOMATICALLY
3149--------------------------------
[fd6dc8c]3150
[53bb72e]3151CONSTANT:
[fd6dc8c]3152    ``BSP_ZERO_WORKSPACE_AUTOMATICALLY``
3153
[53bb72e]3154DATA TYPE:
[fd6dc8c]3155    Boolean feature macro.
3156
[53bb72e]3157RANGE:
[fd6dc8c]3158    Defined or undefined.
3159
[53bb72e]3160DEFAULT VALUE:
[fd6dc8c]3161    This option is BSP specific.
3162
[53bb72e]3163DESCRIPTION:
3164    If ``BSP_ZERO_WORKSPACE_AUTOMATICALLY`` is defined by the BSP and
3165    ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY`` is not defined by the
3166    application, then the workspace will be zeroed automatically.
[fd6dc8c]3167
[53bb72e]3168NOTES:
3169    Zeroing memory can add significantly to system boot time. It is not
3170    necessary for RTEMS but is often assumed by support libraries.
[fd6dc8c]3171
[6c56401]3172.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
[9aafb39]3173
[0e8f08d]3174.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
[3384994]3175
[0e8f08d]3176CONFIGURE_BSP_PREREQUISITE_DRIVERS
3177----------------------------------
[fd6dc8c]3178
[53bb72e]3179CONSTANT:
[fd6dc8c]3180    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
3181
[53bb72e]3182DATA TYPE:
[fd6dc8c]3183    List of device driver initializers (``rtems_driver_address_table``).
3184
[53bb72e]3185RANGE:
[fd6dc8c]3186    Undefined or array of device drivers.
3187
[53bb72e]3188DEFAULT VALUE:
[fd6dc8c]3189    This option is BSP specific.
3190
[53bb72e]3191DESCRIPTION:
3192    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
3193    drivers it needs to include in the Device Driver Table.  This should be
3194    defined to the set of device driver entries that will be placed in the
3195    table at the *FRONT* of the Device Driver Table and initialized before any
3196    other drivers *INCLUDING* any application prerequisite drivers.
[fd6dc8c]3197
[53bb72e]3198NOTES:
3199    ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
3200    configure common infrastructure such as bus controllers or probe for
3201    devices.
[fd6dc8c]3202
3203Idle Task Configuration
3204=======================
3205
[c9aaf31]3206This section defines the IDLE task related configuration parameters supported
3207by ``<rtems/confdefs.h>``.
[fd6dc8c]3208
[6c56401]3209.. index:: CONFIGURE_IDLE_TASK_BODY
[9aafb39]3210
[0e8f08d]3211.. _CONFIGURE_IDLE_TASK_BODY:
[3384994]3212
[0e8f08d]3213CONFIGURE_IDLE_TASK_BODY
3214------------------------
[fd6dc8c]3215
[53bb72e]3216CONSTANT:
[fd6dc8c]3217    ``CONFIGURE_IDLE_TASK_BODY``
3218
[53bb72e]3219DATA TYPE:
[fd6dc8c]3220    Function pointer.
3221
[53bb72e]3222RANGE:
[fd6dc8c]3223    Undefined or valid function pointer.
3224
[53bb72e]3225DEFAULT VALUE:
[fd6dc8c]3226    This is not defined by default.
3227
[53bb72e]3228DESCRIPTION:
3229    ``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
3230    the application specific IDLE thread body.  If not specified, the BSP or
3231    RTEMS default IDLE thread body will be used.
[fd6dc8c]3232
[53bb72e]3233NOTES:
3234    None.
[fd6dc8c]3235
[6c56401]3236.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
[9aafb39]3237
[0e8f08d]3238.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
[3384994]3239
[0e8f08d]3240CONFIGURE_IDLE_TASK_STACK_SIZE
3241------------------------------
[fd6dc8c]3242
[53bb72e]3243CONSTANT:
[fd6dc8c]3244    ``CONFIGURE_IDLE_TASK_STACK_SIZE``
3245
[53bb72e]3246DATA TYPE:
[fd6dc8c]3247    Unsigned integer (``size_t``).
3248
[53bb72e]3249RANGE:
[fd6dc8c]3250    Undefined or positive.
3251
[53bb72e]3252DEFAULT VALUE:
[fd6dc8c]3253    The default value is RTEMS_MINIMUM_STACK_SIZE.
3254
[53bb72e]3255DESCRIPTION:
3256    ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
3257    IDLE task.
[fd6dc8c]3258
[53bb72e]3259NOTES:
3260    None.
[fd6dc8c]3261
[6c56401]3262..<