mirror of
https://git.rtems.org/rtems-docs/
synced 2025-05-15 05:57:08 +08:00
4927 lines
131 KiB
ReStructuredText
4927 lines
131 KiB
ReStructuredText
.. comment SPDX-License-Identifier: CC-BY-SA-4.0
|
|
|
|
.. COMMENT: COPYRIGHT (c) 1988-2008.
|
|
.. COMMENT: On-Line Applications Research Corporation (OAR).
|
|
.. COMMENT: All rights reserved.
|
|
|
|
.. index:: configuring a system
|
|
.. _Configuring a System:
|
|
|
|
Configuring a System
|
|
********************
|
|
|
|
Introduction
|
|
============
|
|
|
|
RTEMS must be configured for an application. This configuration encompasses a
|
|
variety of information including the length of each clock tick, the maximum
|
|
number of each information RTEMS object that can be created, the application
|
|
initialization tasks, the task scheduling algorithm to be used, and the device
|
|
drivers in the application.
|
|
|
|
Although this information is contained in data structures that are used by
|
|
RTEMS at system initialization time, the data structures themselves must not be
|
|
generated by hand. RTEMS provides a set of macros system which provides a
|
|
simple standard mechanism to automate the generation of these structures.
|
|
|
|
.. index:: confdefs.h
|
|
.. index:: <rtems/confdefs.h>
|
|
|
|
The RTEMS header file ``<rtems/confdefs.h>`` is at the core of the automatic
|
|
generation of system configuration. It is based on the idea of setting macros
|
|
which define configuration parameters of interest to the application and
|
|
defaulting or calculating all others. This variety of macros can automatically
|
|
produce all of the configuration data required for an RTEMS application.
|
|
|
|
.. sidebar: Trivia:
|
|
|
|
The term ``confdefs`` is shorthand for a *Configuration Defaults*.
|
|
|
|
As a general rule, application developers only specify values for the
|
|
configuration parameters of interest to them. They define what resources or
|
|
features they require. In most cases, when a parameter is not specified, it
|
|
defaults to zero (0) instances, a standards compliant value, or disabled as
|
|
appropriate. For example, by default there will be 256 task priority levels but
|
|
this can be lowered by the application. This number of priority levels is
|
|
required to be compliant with the RTEID/ORKID standards upon which the Classic
|
|
API is based. There are similar cases where the default is selected to be
|
|
compliant with with the POSIX standard.
|
|
|
|
For each configuration parameter in the configuration tables, the macro
|
|
corresponding to that field is discussed. The RTEMS Maintainers expect that all
|
|
systems can be easily configured using the ``<rtems/confdefs.h>`` mechanism and
|
|
that using this mechanism will avoid internal RTEMS configuration changes
|
|
impacting applications.
|
|
|
|
Default Value Selection Philosophy
|
|
==================================
|
|
|
|
The user should be aware that the defaults are intentionally set as low as
|
|
possible. By default, no application resources are configured. The
|
|
``<rtems/confdefs.h>`` file ensures that at least one application task or
|
|
thread is configured and that at least one of the initialization task/thread
|
|
tables is configured.
|
|
|
|
.. _Sizing the RTEMS Workspace:
|
|
|
|
Sizing the RTEMS Workspace
|
|
==========================
|
|
|
|
The RTEMS Workspace is a user-specified block of memory reserved for use by
|
|
RTEMS. The application should NOT modify this memory. This area consists
|
|
primarily of the RTEMS data structures whose exact size depends upon the values
|
|
specified in the Configuration Table. In addition, task stacks and floating
|
|
point context areas are dynamically allocated from the RTEMS Workspace.
|
|
|
|
The ``<rtems/confdefs.h>`` mechanism calculates the size of the RTEMS Workspace
|
|
automatically. It assumes that all tasks are floating point and that all will
|
|
be allocated the minimum stack space. This calculation includes the amount of
|
|
memory that will be allocated for internal use by RTEMS. The automatic
|
|
calculation may underestimate the workspace size truly needed by the
|
|
application, in which case one can use the ``CONFIGURE_MEMORY_OVERHEAD`` macro
|
|
to add a value to the estimate. See :ref:`Specify Memory Overhead` for more
|
|
details.
|
|
|
|
The memory area for the RTEMS Workspace is determined by the BSP. In case the
|
|
RTEMS Workspace is too large for the available memory, then a fatal run-time
|
|
error occurs and the system terminates.
|
|
|
|
The file ``<rtems/confdefs.h>`` will calculate the value of the
|
|
``work_space_size`` parameter of the Configuration Table. There are many
|
|
parameters the application developer can specify to help ``<rtems/confdefs.h>``
|
|
in its calculations. Correctly specifying the application requirements via
|
|
parameters such as ``CONFIGURE_EXTRA_TASK_STACKS`` and
|
|
``CONFIGURE_MAXIMUM_TASKS`` is critical for production software.
|
|
|
|
For each class of objects, the allocation can operate in one of two ways. The
|
|
default way has an ceiling on the maximum number of object instances which can
|
|
concurrently exist in the system. Memory for all instances of that object class
|
|
is reserved at system initialization. The second way allocates memory for an
|
|
initial number of objects and increases the current allocation by a fixed
|
|
increment when required. Both ways allocate space from inside the RTEMS
|
|
Workspace.
|
|
|
|
See :ref:`Unlimited Objects` for more details about the second way, which
|
|
allows for dynamic allocation of objects and therefore does not provide
|
|
determinism. This mode is useful mostly for when the number of objects cannot
|
|
be determined ahead of time or when porting software for which you do not know
|
|
the object requirements.
|
|
|
|
The space needed for stacks and for RTEMS objects will vary from one version of
|
|
RTEMS and from one target processor to another. Therefore it is safest to use
|
|
``<rtems/confdefs.h>`` and specify your application's requirements in terms of
|
|
the numbers of objects and multiples of ``RTEMS_MINIMUM_STACK_SIZE``, as far as
|
|
is possible. The automatic estimates of space required will in general change
|
|
when:
|
|
|
|
- a configuration parameter is changed,
|
|
|
|
- task or interrupt stack sizes change,
|
|
|
|
- the floating point attribute of a task changes,
|
|
|
|
- task floating point attribute is altered,
|
|
|
|
- RTEMS is upgraded, or
|
|
|
|
- the target processor is changed.
|
|
|
|
Failure to provide enough space in the RTEMS Workspace may result in fatal
|
|
run-time errors terminating the system.
|
|
|
|
Potential Issues with RTEMS Workspace Size Estimation
|
|
=====================================================
|
|
|
|
The ``<rtems/confdefs.h>`` file estimates the amount of memory required for the
|
|
RTEMS Workspace. This estimate is only as accurate as the information given to
|
|
``<rtems/confdefs.h>`` and may be either too high or too low for a variety of
|
|
reasons. Some of the reasons that ``<rtems/confdefs.h>`` may reserve too much
|
|
memory for RTEMS are:
|
|
|
|
- All tasks/threads are assumed to be floating point.
|
|
|
|
Conversely, there are many more reasons that the resource estimate could be too
|
|
low:
|
|
|
|
- Task/thread stacks greater than minimum size must be accounted for explicitly
|
|
by developer.
|
|
|
|
- Memory for messages is not included.
|
|
|
|
- Device driver requirements are not included.
|
|
|
|
- Network stack requirements are not included.
|
|
|
|
- Requirements for add-on libraries are not included.
|
|
|
|
In general, ``<rtems/confdefs.h>`` is very accurate when given enough
|
|
information. However, it is quite easy to use a library and forget to account
|
|
for its resources.
|
|
|
|
Format to be followed for making changes in this file
|
|
=====================================================
|
|
|
|
MACRO NAME:
|
|
Should be alphanumeric. Can have '_' (underscore).
|
|
|
|
DATA TYPE:
|
|
Please refer to all existing formats.
|
|
|
|
RANGE:
|
|
The range depends on the Data Type of the macro.
|
|
|
|
- If the data type is of type task priority, then its value should be an
|
|
integer in the range of 1 to 255.
|
|
|
|
- If the data type is an integer, then it can have numbers, characters (in
|
|
case the value is defined using another macro) and arithmetic operations
|
|
(+, -, \*, /).
|
|
|
|
- If the data type is a function pointer the first character should be an
|
|
alphabet or an underscore. The rest of the string can be alphanumeric.
|
|
|
|
- If the data type is RTEMS Attributes or RTEMS Mode then the string should
|
|
be alphanumeric.
|
|
|
|
- If the data type is RTEMS NAME then the value should be an integer>=0 or
|
|
``RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )``
|
|
|
|
DEFAULT VALUE:
|
|
The default value should be in the following formats- Please note that the
|
|
'.' (full stop) is necessary.
|
|
|
|
- In case the value is not defined then: This is not defined by default.
|
|
|
|
- If we know the default value then: The default value is XXX.
|
|
|
|
- If the default value is BSP Specific then: This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
The description of the macro. (No specific format)
|
|
|
|
NOTES:
|
|
Any further notes. (No specific format)
|
|
|
|
Configuration Example
|
|
=====================
|
|
|
|
In the following example, the configuration information for a system with a
|
|
single message queue, four (4) tasks, and a timeslice of fifty (50)
|
|
milliseconds is as follows:
|
|
|
|
.. code-block:: c
|
|
|
|
#include <bsp.h>
|
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
|
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
|
#define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */
|
|
#define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */
|
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
|
#define CONFIGURE_MAXIMUM_TASKS 4
|
|
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
|
|
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
|
|
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
|
|
#define CONFIGURE_INIT
|
|
#include <rtems/confdefs.h>
|
|
|
|
In this example, only a few configuration parameters are specified. The impact
|
|
of these are as follows:
|
|
|
|
- The example specified ``CONFIGURE_RTEMS_INIT_TASK_TABLE`` but did not specify
|
|
any additional parameters. This results in a configuration of an application
|
|
which will begin execution of a single initialization task named ``Init``
|
|
which is non-preemptible and at priority one (1).
|
|
|
|
- By specifying ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``, this application
|
|
is configured to have a clock tick device driver. Without a clock tick device
|
|
driver, RTEMS has no way to know that time is passing and will be unable to
|
|
support delays and wall time. Further configuration details about time are
|
|
provided. Per ``CONFIGURE_MICROSECONDS_PER_TICK`` and
|
|
``CONFIGURE_TICKS_PER_TIMESLICE``, the user specified they wanted a clock
|
|
tick to occur each millisecond, and that the length of a timeslice would be
|
|
fifty (50) milliseconds.
|
|
|
|
- By specifying ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``, the application
|
|
will include a console device driver. Although the console device driver may
|
|
support a combination of multiple serial ports and display and keyboard
|
|
combinations, it is only required to provide a single device named
|
|
``/dev/console``. This device will be used for Standard Input, Output and
|
|
Error I/O Streams. Thus when ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
|
|
is specified, implicitly three (3) file descriptors are reserved for the
|
|
Standard I/O Streams and those file descriptors are associated with
|
|
``/dev/console`` during initialization. All console devices are expected to
|
|
support the POSIX*termios* interface.
|
|
|
|
- The example above specifies via ``CONFIGURE_MAXIMUM_TASKS`` that the
|
|
application requires a maximum of four (4) simultaneously existing Classic
|
|
API tasks. Similarly, by specifying ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``,
|
|
there may be a maximum of only one (1) concurrently existent Classic API
|
|
message queues.
|
|
|
|
- The most surprising configuration parameter in this example is the use of
|
|
``CONFIGURE_MESSAGE_BUFFER_MEMORY``. Message buffer memory is allocated from
|
|
the RTEMS Workspace and must be accounted for. In this example, the single
|
|
message queue will have up to twenty (20) messages of type ``struct
|
|
USER_MESSAGE``.
|
|
|
|
- The ``CONFIGURE_INIT`` constant must be defined in order to make
|
|
``<rtems/confdefs.h>`` instantiate the configuration data structures. This
|
|
can only be defined in one source file per application that includes
|
|
``<rtems/confdefs.h>`` or the symbol table will be instantiated multiple
|
|
times and linking errors produced.
|
|
|
|
This example illustrates that parameters have default values. Among other
|
|
things, the application implicitly used the following defaults:
|
|
|
|
- All unspecified types of communications and synchronization objects in the
|
|
Classic and POSIX Threads API have maximums of zero (0).
|
|
|
|
- The filesystem will be the default filesystem which is the In-Memory File
|
|
System (IMFS).
|
|
|
|
- The application will have the default number of priority levels.
|
|
|
|
- The minimum task stack size will be that recommended by RTEMS for the target
|
|
architecture.
|
|
|
|
.. _Unlimited Objects:
|
|
|
|
Unlimited Objects
|
|
=================
|
|
|
|
In real-time embedded systems the RAM is normally a limited, critical resource
|
|
and dynamic allocation is avoided as much as possible to ensure predictable,
|
|
deterministic execution times. For such cases, see :ref:`Sizing the RTEMS
|
|
Workspace` for an overview of how to tune the size of the workspace.
|
|
Frequently when users are porting software to RTEMS the precise resource
|
|
requirements of the software is unknown. In these situations users do not need
|
|
to control the size of the workspace very tightly because they just want to get
|
|
the new software to run; later they can tune the workspace size as needed.
|
|
|
|
The following object classes in the Classic API can be configured in unlimited
|
|
mode:
|
|
|
|
- Barriers
|
|
|
|
- Message Queues
|
|
|
|
- Partitions
|
|
|
|
- Periods
|
|
|
|
- Ports
|
|
|
|
- Regions
|
|
|
|
- Semaphores
|
|
|
|
- Tasks
|
|
|
|
- Timers
|
|
|
|
Additionally, the following object classes from the POSIX API can be configured
|
|
in unlimited mode:
|
|
|
|
- Keys -- :c:func:`pthread_key_create`
|
|
|
|
- Key Value Pairs -- :c:func:`pthread_setspecific`
|
|
|
|
- Message Queues -- :c:func:`mq_open`
|
|
|
|
- Named Semaphores -- :c:func:`sem_open`
|
|
|
|
- Shared Memory -- :c:func:`shm_open`
|
|
|
|
- Threads -- :c:func:`pthread_create`
|
|
|
|
- Timers -- :c:func:`timer_create`
|
|
|
|
.. warning::
|
|
|
|
The following object classes can *not* be configured in unlimited mode:
|
|
|
|
- Drivers
|
|
|
|
- File Descriptors
|
|
|
|
- POSIX Queued Signals
|
|
|
|
- User Extensions
|
|
|
|
Due to the memory requirements of unlimited objects it is strongly recommended
|
|
to use them only in combination with the unified work areas. See :ref:`Separate
|
|
or Unified Work Areas` for more information on unified work areas.
|
|
|
|
The following example demonstrates how the two simple configuration defines for
|
|
unlimited objects and unified works areas can replace many seperate
|
|
configuration defines for supported object classes:
|
|
|
|
.. code-block:: c
|
|
|
|
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
|
#define CONFIGURE_UNIFIED_WORK_AREAS
|
|
#define CONFIGURE_UNLIMITED_OBJECTS
|
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
|
#define CONFIGURE_INIT
|
|
#include <rtems/confdefs.h>
|
|
|
|
Users are cautioned that using unlimited objects is not recommended for
|
|
production software unless the dynamic growth is absolutely required. It is
|
|
generally considered a safer embedded systems programming practice to know the
|
|
system limits rather than experience an out of memory error at an arbitrary and
|
|
largely unpredictable time in the field.
|
|
|
|
.. _Per Object Class Unlimited Object Instances:
|
|
|
|
.. index:: rtems_resource_unlimited
|
|
|
|
Per Object Class Unlimited Object Instances
|
|
-------------------------------------------
|
|
|
|
When the number of objects is not known ahead of time, RTEMS provides an
|
|
auto-extending mode that can be enabled individually for each object type by
|
|
using the macro ``rtems_resource_unlimited``. This takes a value as a
|
|
parameter, and is used to set the object maximum number field in an API
|
|
Configuration table. The value is an allocation unit size. When RTEMS is
|
|
required to grow the object table it is grown by this size. The kernel will
|
|
return the object memory back to the RTEMS Workspace when an object is
|
|
destroyed. The kernel will only return an allocated block of objects to the
|
|
RTEMS Workspace if at least half the allocation size of free objects remain
|
|
allocated. RTEMS always keeps one allocation block of objects allocated. Here
|
|
is an example of using ``rtems_resource_unlimited``:
|
|
|
|
.. code-block:: c
|
|
|
|
#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
|
|
|
|
.. index:: rtems_resource_is_unlimited
|
|
.. index:: rtems_resource_maximum_per_allocation
|
|
|
|
Object maximum specifications can be evaluated with the
|
|
``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
|
|
macros.
|
|
|
|
.. _Unlimited Object Instances:
|
|
|
|
Unlimited Object Instances
|
|
--------------------------
|
|
|
|
To ease the burden of developers who are porting new software RTEMS also
|
|
provides the capability to make all object classes listed above operate in
|
|
unlimited mode in a simple manner. The application developer is only
|
|
responsible for enabling unlimited objects and specifying the allocation size.
|
|
|
|
.. index:: CONFIGURE_UNLIMITED_OBJECTS
|
|
|
|
.. _CONFIGURE_UNLIMITED_OBJECTS:
|
|
|
|
CONFIGURE_UNLIMITED_OBJECTS
|
|
---------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_UNLIMITED_OBJECTS``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_UNLIMITED_OBJECTS`` enables ``rtems_resource_unlimited`` mode
|
|
for Classic API and POSIX API objects that do not already have a specific
|
|
maximum limit defined.
|
|
|
|
NOTES:
|
|
When using unlimited objects, it is common practice to also specify
|
|
``CONFIGURE_UNIFIED_WORK_AREAS`` so the system operates with a single pool
|
|
of memory for both RTEMS and application memory allocations.
|
|
|
|
.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
|
|
|
|
CONFIGURE_UNLIMITED_ALLOCATION_SIZE
|
|
-----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
If not defined and ``CONFIGURE_UNLIMITED_OBJECTS`` is defined, the default
|
|
value is eight (8).
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_UNLIMITED_ALLOCATION_SIZE`` provides an allocation size to use
|
|
for ``rtems_resource_unlimited`` when using
|
|
``CONFIGURE_UNLIMITED_OBJECTS``.
|
|
|
|
NOTES:
|
|
By allowing users to declare all resources as being unlimited the user can
|
|
avoid identifying and limiting the resources
|
|
used. ``CONFIGURE_UNLIMITED_OBJECTS`` does not support varying the
|
|
allocation sizes for different objects; users who want that much control
|
|
can define the ``rtems_resource_unlimited`` macros themselves.
|
|
|
|
.. code-block:: c
|
|
|
|
#define CONFIGURE_UNLIMITED_OBJECTS
|
|
#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
|
|
|
|
Classic API Configuration
|
|
=========================
|
|
|
|
This section defines the Classic API related system configuration parameters
|
|
supported by ``<rtems/confdefs.h>``.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_TASKS
|
|
|
|
.. _CONFIGURE_MAXIMUM_TASKS:
|
|
|
|
CONFIGURE_MAXIMUM_TASKS
|
|
-----------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_TASKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``0``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
|
|
can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
The calculations for the required memory in the RTEMS Workspace for tasks
|
|
assume that each task has a minimum stack size and has floating point
|
|
support enabled. The configuration parameter
|
|
``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements
|
|
*ABOVE* the minimum size required. See :ref:`Reserve Task/Thread Stack
|
|
Memory Above Minimum` for more information about
|
|
``CONFIGURE_EXTRA_TASK_STACKS``.
|
|
|
|
The maximum number of POSIX threads is specified by
|
|
``CONFIGURE_MAXIMUM_POSIX_THREADS``.
|
|
|
|
A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
|
|
assumption that all tasks have floating point enabled. This would require
|
|
the addition of a new configuration parameter to specify the number of
|
|
tasks which enable floating point support.
|
|
|
|
.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_TIMERS
|
|
|
|
.. _CONFIGURE_MAXIMUM_TIMERS:
|
|
|
|
CONFIGURE_MAXIMUM_TIMERS
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_TIMERS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
|
|
that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
|
|
|
|
.. _CONFIGURE_MAXIMUM_SEMAPHORES:
|
|
|
|
CONFIGURE_MAXIMUM_SEMAPHORES
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_SEMAPHORES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
|
|
Semaphores that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
|
|
|
|
.. _CONFIGURE_MAXIMUM_MRSP_SEMAPHORES:
|
|
|
|
CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_MRSP_SEMAPHORES`` is the maximum number of Classic API
|
|
Semaphores using the :ref:`MrsP` that can be concurrently active.
|
|
|
|
NOTES:
|
|
This configuration option is only used in SMP configurations. In
|
|
uniprocessor configurations, the :ref:`PriorityCeiling` is used for MrsP
|
|
semaphores and thus no extra memory is necessary.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
|
|
|
|
.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
|
|
|
|
CONFIGURE_MAXIMUM_MESSAGE_QUEUES
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
|
|
Message Queues that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_BARRIERS
|
|
|
|
.. _CONFIGURE_MAXIMUM_BARRIERS:
|
|
|
|
CONFIGURE_MAXIMUM_BARRIERS
|
|
--------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_BARRIERS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
|
|
Barriers that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_PERIODS
|
|
|
|
.. _CONFIGURE_MAXIMUM_PERIODS:
|
|
|
|
CONFIGURE_MAXIMUM_PERIODS
|
|
-------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_PERIODS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
|
|
that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_PARTITIONS
|
|
|
|
.. _CONFIGURE_MAXIMUM_PARTITIONS:
|
|
|
|
CONFIGURE_MAXIMUM_PARTITIONS
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_PARTITIONS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
|
|
Partitions that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_REGIONS
|
|
|
|
.. _CONFIGURE_MAXIMUM_REGIONS:
|
|
|
|
CONFIGURE_MAXIMUM_REGIONS
|
|
-------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_REGIONS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
|
|
that can be concurrently active.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_PORTS
|
|
|
|
.. _CONFIGURE_MAXIMUM_PORTS:
|
|
|
|
CONFIGURE_MAXIMUM_PORTS
|
|
-----------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_PORTS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
|
|
can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
|
|
|
|
.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
|
|
|
|
CONFIGURE_MAXIMUM_USER_EXTENSIONS
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
|
|
User Extensions that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
Classic API Initialization Tasks Table Configuration
|
|
====================================================
|
|
|
|
The ``<rtems/confdefs.h>`` configuration system can automatically generate an
|
|
Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
|
|
The following parameters control the generation of that table.
|
|
|
|
.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
|
|
|
.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
|
|
|
|
CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
|
|
Classic RTEMS API Initialization Task Table. The table built by
|
|
``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
|
|
sufficient for applications which initialization the system from a single
|
|
task.
|
|
|
|
By default, this field is not defined as the user MUST select their own API
|
|
for initialization tasks.
|
|
|
|
NOTES:
|
|
The application may choose to use the initialization tasks or threads table
|
|
from another API.
|
|
|
|
A compile time error will be generated if the user does not configure any
|
|
initialization tasks or threads.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
|
|
|
|
.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
|
|
|
|
CONFIGURE_INIT_TASK_ENTRY_POINT
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_ENTRY_POINT``
|
|
|
|
DATA TYPE:
|
|
Task entry function pointer (``rtems_task_entry``).
|
|
|
|
RANGE:
|
|
Valid task entry function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``Init``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
|
|
name) of the single initialization task defined by the Classic API
|
|
Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
The user must implement the function ``Init`` or the function name provided
|
|
in this configuration parameter.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_NAME
|
|
|
|
.. _CONFIGURE_INIT_TASK_NAME:
|
|
|
|
CONFIGURE_INIT_TASK_NAME
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_NAME``
|
|
|
|
DATA TYPE:
|
|
RTEMS Name (``rtems_name``).
|
|
|
|
RANGE:
|
|
Any value.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
|
|
defined by the Classic API Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
|
|
|
|
.. _CONFIGURE_INIT_TASK_STACK_SIZE:
|
|
|
|
CONFIGURE_INIT_TASK_STACK_SIZE
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is RTEMS_MINIMUM_STACK_SIZE.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
|
|
initialization task defined by the Classic API Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
If the stack size specified is greater than the configured minimum, it must
|
|
be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``. See :ref:`Reserve
|
|
Task/Thread Stack Memory Above Minimum` for more information about
|
|
``CONFIGURE_EXTRA_TASK_STACKS``.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_PRIORITY
|
|
|
|
.. _CONFIGURE_INIT_TASK_PRIORITY:
|
|
|
|
CONFIGURE_INIT_TASK_PRIORITY
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
RTEMS Task Priority (``rtems_task_priority``).
|
|
|
|
RANGE:
|
|
One (1) to CONFIGURE_MAXIMUM_PRIORITY.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 1, which is the highest priority in the Classic API.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
|
|
initialization task defined by the Classic API Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
|
|
|
|
.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
|
|
|
|
CONFIGURE_INIT_TASK_ATTRIBUTES
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_ATTRIBUTES``
|
|
|
|
DATA TYPE:
|
|
RTEMS Attributes (``rtems_attribute``).
|
|
|
|
RANGE:
|
|
Valid task attribute sets.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
|
|
initialization task defined by the Classic API Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
|
|
|
|
.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
|
|
|
|
CONFIGURE_INIT_TASK_INITIAL_MODES
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_INITIAL_MODES``
|
|
|
|
DATA TYPE:
|
|
RTEMS Mode (``rtems_mode``).
|
|
|
|
RANGE:
|
|
Valid task mode sets.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``RTEMS_NO_PREEMPT``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
|
|
single initialization task defined by the Classic API Initialization Tasks
|
|
Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
|
|
|
|
.. _CONFIGURE_INIT_TASK_ARGUMENTS:
|
|
|
|
CONFIGURE_INIT_TASK_ARGUMENTS
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INIT_TASK_ARGUMENTS``
|
|
|
|
DATA TYPE:
|
|
RTEMS Task Argument (``rtems_task_argument``).
|
|
|
|
RANGE:
|
|
Complete range of the type.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
|
|
initialization task defined by the Classic API Initialization Tasks Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
|
|
|
|
.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
|
|
|
|
CONFIGURE_HAS_OWN_INIT_TASK_TABLE
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_HAS_OWN_INIT_TASK_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_HAS_OWN_INIT_TASK_TABLE`` is defined if the user wishes to
|
|
define their own Classic API Initialization Tasks Table. This table should
|
|
be named ``Initialization_tasks``.
|
|
|
|
NOTES:
|
|
This is a seldom used configuration parameter. The most likely use case is
|
|
when an application desires to have more than one initialization task.
|
|
|
|
POSIX API Configuration
|
|
=======================
|
|
|
|
The parameters in this section are used to configure resources for the RTEMS
|
|
POSIX API. They are only relevant if the POSIX API is enabled at configure
|
|
time using the ``--enable-posix`` option.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_THREADS
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_THREADS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
|
|
Threads that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
This calculations for the required memory in the RTEMS Workspace for
|
|
threads assume that each thread has a minimum stack size and has floating
|
|
point support enabled. The configuration parameter
|
|
``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
|
|
requirements *ABOVE* the minimum size required. See :ref:`Reserve
|
|
Task/Thread Stack Memory Above Minimum` for more information about
|
|
``CONFIGURE_EXTRA_TASK_STACKS``.
|
|
|
|
The maximum number of Classic API Tasks is specified by
|
|
``CONFIGURE_MAXIMUM_TASKS``.
|
|
|
|
All POSIX threads have floating point enabled.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_KEYS
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_KEYS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
|
|
that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_TIMERS
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_TIMERS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
|
|
Timers that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
|
|
API Queued Signals that can be concurrently active.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
|
|
API Message Queues that can be concurrently active.
|
|
|
|
NOTES:
|
|
This object class can be configured in unlimited allocation mode.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
|
|
|
|
.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
|
|
----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
|
|
Named Semaphores that can be concurrently active. Named semaphores are
|
|
created with ``sem_open()``. Semaphores initialized with ``sem_init()``
|
|
are not affected by this configuration option since the storage space for
|
|
these semaphores is user-provided.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
POSIX Initialization Threads Table Configuration
|
|
================================================
|
|
|
|
The ``<rtems/confdefs.h>`` configuration system can automatically generate a
|
|
POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
|
|
a single entry. The following parameters control the generation of that table.
|
|
|
|
.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
|
|
|
|
.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
|
|
|
|
CONFIGURE_POSIX_INIT_THREAD_TABLE
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
|
|
``CONFIGURE_POSIX_INIT_THREAD_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This field is not defined by default, as the user MUST select their own API
|
|
for initialization tasks.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
|
|
a POSIX API Initialization Threads Table. The table built by
|
|
``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
|
|
is sufficient for applications which initialization the system from a
|
|
single task.
|
|
|
|
By default, this field is not defined as the user MUST select their own API
|
|
for initialization tasks.
|
|
|
|
NOTES:
|
|
The application may choose to use the initialization tasks or threads table
|
|
from another API.
|
|
|
|
A compile time error will be generated if the user does not configure any
|
|
initialization tasks or threads.
|
|
|
|
.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
|
|
|
|
.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
|
|
|
|
CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
|
|
---------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
|
|
|
|
DATA TYPE:
|
|
POSIX thread function pointer (``void *(*entry_point)(void *)``).
|
|
|
|
RANGE:
|
|
Undefined or a valid POSIX thread function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``POSIX_Init``.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
|
|
(a.k.a. function name) of the single initialization thread defined by the
|
|
POSIX API Initialization Threads Table.
|
|
|
|
NOTES:
|
|
The user must implement the function ``POSIX_Init`` or the function name
|
|
provided in this configuration parameter.
|
|
|
|
.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
|
|
|
|
.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
|
|
|
|
CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
|
|
initialization thread defined by the POSIX API Initialization Threads
|
|
Table.
|
|
|
|
NOTES:
|
|
If the stack size specified is greater than the configured minimum, it must
|
|
be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``. See :ref:`Reserve
|
|
Task/Thread Stack Memory Above Minimum` for more information about
|
|
``CONFIGURE_EXTRA_TASK_STACKS``.
|
|
|
|
.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
|
|
|
|
.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
|
|
|
|
CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
|
|
-----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE`` is defined if the user wishes
|
|
to define their own POSIX API Initialization Threads Table. This table
|
|
should be named ``POSIX_Initialization_threads``.
|
|
|
|
NOTES:
|
|
This is a seldom used configuration parameter. The most likely use case is
|
|
when an application desires to have more than one initialization task.
|
|
|
|
Basic System Information
|
|
========================
|
|
|
|
This section defines the general system configuration parameters supported by
|
|
``<rtems/confdefs.h>``.
|
|
|
|
.. index:: CONFIGURE_UNIFIED_WORK_AREAS
|
|
.. index:: unified work areas
|
|
.. index:: separate work areas
|
|
.. index:: RTEMS Workspace
|
|
.. index:: C Program Heap
|
|
|
|
.. _CONFIGURE_UNIFIED_WORK_AREAS:
|
|
|
|
CONFIGURE_UNIFIED_WORK_AREAS
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_UNIFIED_WORK_AREAS``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, which specifies that the C Program Heap and
|
|
the RTEMS Workspace will be separate.
|
|
|
|
DESCRIPTION:
|
|
When defined, the C Program Heap and the RTEMS Workspace will be one pool
|
|
of memory.
|
|
|
|
When not defined, there will be separate memory pools for the RTEMS
|
|
Workspace and C Program Heap.
|
|
|
|
NOTES:
|
|
Having separate pools does have some advantages in the event a task blows a
|
|
stack or writes outside its memory area. However, in low memory systems the
|
|
overhead of the two pools plus the potential for unused memory in either
|
|
pool is very undesirable.
|
|
|
|
In high memory environments, this is desirable when you want to use the
|
|
RTEMS "unlimited" objects option. You will be able to create objects until
|
|
you run out of all available memory rather then just until you run out of
|
|
RTEMS Workspace.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_PROCESSORS
|
|
|
|
.. _CONFIGURE_MAXIMUM_PROCESSORS:
|
|
|
|
CONFIGURE_MAXIMUM_PROCESSORS
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_PROCESSORS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 1.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to the maximum number of
|
|
processors an applicaiton intends to use. The number of acually available
|
|
processors depends on the hardware and may be less. It is recommended to
|
|
use the smallest value suitable for the application in order to save
|
|
memory. Each processor needs an idle thread and interrupt stack for
|
|
example.
|
|
|
|
NOTES:
|
|
If there are more processors available than configured, the rest will be
|
|
ignored. This configuration define is ignored in uniprocessor
|
|
configurations.
|
|
|
|
.. index:: CONFIGURE_MICROSECONDS_PER_TICK
|
|
.. index:: tick quantum
|
|
|
|
.. _CONFIGURE_MICROSECONDS_PER_TICK:
|
|
|
|
CONFIGURE_MICROSECONDS_PER_TICK
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MICROSECONDS_PER_TICK``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default. When not defined, the clock tick quantum is
|
|
configured to be 10,000 microseconds which is ten (10) milliseconds.
|
|
|
|
DESCRIPTION:
|
|
This constant is used to specify the length of time between clock ticks.
|
|
|
|
When the clock tick quantum value is too low, the system will spend so much
|
|
time processing clock ticks that it does not have processing time available
|
|
to perform application work. In this case, the system will become
|
|
unresponsive.
|
|
|
|
The lowest practical time quantum varies widely based upon the speed of the
|
|
target hardware and the architectural overhead associated with
|
|
interrupts. In general terms, you do not want to configure it lower than is
|
|
needed for the application.
|
|
|
|
The clock tick quantum should be selected such that it all blocking and
|
|
delay times in the application are evenly divisible by it. Otherwise,
|
|
rounding errors will be introduced which may negatively impact the
|
|
application.
|
|
|
|
NOTES:
|
|
This configuration parameter has no impact if the Clock Tick Device driver
|
|
is not configured.
|
|
|
|
There may be BSP specific limits on the resolution or maximum value of a
|
|
clock tick quantum.
|
|
|
|
.. index:: CONFIGURE_TICKS_PER_TIMESLICE
|
|
.. index:: ticks per timeslice
|
|
|
|
.. _CONFIGURE_TICKS_PER_TIMESLICE:
|
|
|
|
CONFIGURE_TICKS_PER_TIMESLICE
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_TICKS_PER_TIMESLICE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 50.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter specifies the length of the timeslice quantum
|
|
in ticks for each task.
|
|
|
|
NOTES:
|
|
This configuration parameter has no impact if the Clock Tick Device driver
|
|
is not configured.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_PRIORITY
|
|
.. index:: maximum priority
|
|
.. index:: number of priority levels
|
|
|
|
.. _CONFIGURE_MAXIMUM_PRIORITY:
|
|
|
|
CONFIGURE_MAXIMUM_PRIORITY
|
|
--------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint8_t``).
|
|
|
|
RANGE:
|
|
Valid values for this configuration parameter must be one (1) less than
|
|
than a power of two (2) between 4 and 256 inclusively. In other words,
|
|
valid values are 3, 7, 31, 63, 127, and 255.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 255, because RTEMS must support 256 priority levels to
|
|
be compliant with various standards. These priorities range from zero (0)
|
|
to 255.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter specified the maximum numeric priority of any
|
|
task in the system and one less that the number of priority levels in the
|
|
system.
|
|
|
|
Reducing the number of priorities in the system reduces the amount of memory
|
|
allocated from the RTEMS Workspace.
|
|
|
|
NOTES:
|
|
The numerically greatest priority is the logically lowest priority in the
|
|
system and will thus be used by the IDLE task.
|
|
|
|
Priority zero (0) is reserved for internal use by RTEMS and is not available
|
|
to applications.
|
|
|
|
With some schedulers, reducing the number of priorities can reduce the
|
|
amount of memory used by the scheduler. For example, the Deterministic
|
|
Priority Scheduler (DPS) used by default uses three pointers of storage per
|
|
priority level. Reducing the number of priorities from 256 levels to
|
|
sixteen (16) can reduce memory usage by about three (3) kilobytes.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
|
|
.. index:: maximum thread name size
|
|
|
|
.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
|
|
|
|
CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
|
|
----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
No restrictions.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 16. This value was chosen for Linux compatibility,
|
|
see
|
|
`PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter specifies the maximum thread name size
|
|
including the terminating `NUL` character.
|
|
|
|
NOTE:
|
|
The size of the thread control block is increased by the maximum thread name
|
|
size. This configuration option is available since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
|
|
.. index:: minimum task stack size
|
|
|
|
.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
|
|
|
|
CONFIGURE_MINIMUM_TASK_STACK_SIZE
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, which sets the executive to the recommended
|
|
minimum stack size for this processor.
|
|
|
|
DESCRIPTION:
|
|
The configuration parameter is set to the number of bytes the application
|
|
wants the minimum stack size to be for every task or thread in the system.
|
|
|
|
Adjusting this parameter should be done with caution. Examining the actual
|
|
usage using the Stack Checker Usage Reporting facility is recommended.
|
|
|
|
NOTES:
|
|
This parameter can be used to lower the minimum from that recommended. This
|
|
can be used in low memory systems to reduce memory consumption for
|
|
stacks. However, this must be done with caution as it could increase the
|
|
possibility of a blown task stack.
|
|
|
|
This parameter can be used to increase the minimum from that
|
|
recommended. This can be used in higher memory systems to reduce the risk
|
|
of stack overflow without performing analysis on actual consumption.
|
|
|
|
.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
|
|
.. index:: interrupt stack size
|
|
|
|
.. _CONFIGURE_INTERRUPT_STACK_SIZE:
|
|
|
|
CONFIGURE_INTERRUPT_STACK_SIZE
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INTERRUPT_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is CONFIGURE_MINIMUM_TASK_STACK_SIZE, which is the
|
|
minimum interrupt stack size.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_INTERRUPT_STACK_SIZE`` is set to the size of the interrupt
|
|
stack. The interrupt stack size is often set by the BSP but since this
|
|
memory may be allocated from the RTEMS Workspace, it must be accounted for.
|
|
|
|
NOTES:
|
|
In some BSPs, changing this constant does NOT change the size of the
|
|
interrupt stack, only the amount of memory reserved for it.
|
|
|
|
Patches which result in this constant only being used in memory
|
|
calculations when the interrupt stack is intended to be allocated from the
|
|
RTEMS Workspace would be welcomed by the RTEMS Project.
|
|
|
|
.. index:: CONFIGURE_EXTRA_TASK_STACKS
|
|
.. index:: memory for task tasks
|
|
|
|
.. _CONFIGURE_EXTRA_TASK_STACKS:
|
|
|
|
CONFIGURE_EXTRA_TASK_STACKS
|
|
---------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_EXTRA_TASK_STACKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is set to the number of bytes the applications
|
|
wishes to add to the task stack requirements calculated by
|
|
``<rtems/confdefs.h>``.
|
|
|
|
NOTES:
|
|
This parameter is very important. If the application creates tasks with
|
|
stacks larger then the minimum, then that memory is NOT accounted for by
|
|
``<rtems/confdefs.h>``.
|
|
|
|
.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
|
|
.. index:: clear C Program Heap
|
|
.. index:: clear RTEMS Workspace
|
|
.. index:: zero C Program Heap
|
|
.. index:: zero RTEMS Workspace
|
|
|
|
.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
|
|
|
|
CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, unless overridden by the BSP. The default
|
|
is *NOT* to zero out the RTEMS Workspace or C Program Heap.
|
|
|
|
DESCRIPTION:
|
|
This macro indicates whether RTEMS should zero the RTEMS Workspace and C
|
|
Program Heap as part of its initialization. If defined, the memory regions
|
|
are zeroed. Otherwise, they are not.
|
|
|
|
NOTES:
|
|
Zeroing memory can add significantly to system boot time. It is not
|
|
necessary for RTEMS but is often assumed by support libraries.
|
|
|
|
.. index:: CONFIGURE_STACK_CHECKER_ENABLED
|
|
|
|
.. _CONFIGURE_STACK_CHECKER_ENABLED:
|
|
|
|
CONFIGURE_STACK_CHECKER_ENABLED
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_STACK_CHECKER_ENABLED``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, and thus stack checking is disabled.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is defined when the application wishes to
|
|
enable run-time stack bounds checking.
|
|
|
|
NOTES:
|
|
In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
|
|
|
|
This increases the time required to create tasks as well as adding overhead
|
|
to each context switch.
|
|
|
|
.. index:: CONFIGURE_INITIAL_EXTENSIONS
|
|
|
|
.. _CONFIGURE_INITIAL_EXTENSIONS:
|
|
|
|
CONFIGURE_INITIAL_EXTENSIONS
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_INITIAL_EXTENSIONS``
|
|
|
|
DATA TYPE:
|
|
List of user extension initializers (``rtems_extensions_table``).
|
|
|
|
RANGE:
|
|
Undefined or a list of one or more user extensions.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
|
|
this application specific set of initial extensions will be placed in the
|
|
initial extension table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
Configuring Custom Task Stack Allocation
|
|
========================================
|
|
|
|
RTEMS allows the application or BSP to define its own allocation and
|
|
deallocation methods for task stacks. This can be used to place task stacks in
|
|
special areas of memory or to utilize a Memory Management Unit so that stack
|
|
overflows are detected in hardware.
|
|
|
|
.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
|
|
|
|
.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
|
|
|
|
CONFIGURE_TASK_STACK_ALLOCATOR_INIT
|
|
-----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
|
|
|
|
DATA TYPE:
|
|
Function pointer.
|
|
|
|
RANGE:
|
|
Undefined, NULL or valid function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is NULL, which indicates that task stacks will be
|
|
allocated from the RTEMS Workspace.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
|
|
method for an application or BSP specific task stack allocation
|
|
implementation.
|
|
|
|
NOTES:
|
|
A correctly configured system must configure the following to be consistent:
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR``
|
|
|
|
- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
|
|
|
|
.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
|
|
.. index:: task stack allocator
|
|
|
|
.. _CONFIGURE_TASK_STACK_ALLOCATOR:
|
|
|
|
CONFIGURE_TASK_STACK_ALLOCATOR
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_TASK_STACK_ALLOCATOR``
|
|
|
|
DATA TYPE:
|
|
Function pointer.
|
|
|
|
RANGE:
|
|
Undefined or valid function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``_Workspace_Allocate``, which indicates that task
|
|
stacks will be allocated from the RTEMS Workspace.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
|
|
allocate task stacks.
|
|
|
|
NOTES:
|
|
A correctly configured system must configure the following to be consistent:
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR``
|
|
|
|
- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
|
|
|
|
.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
|
|
.. index:: task stack deallocator
|
|
|
|
.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
|
|
|
|
CONFIGURE_TASK_STACK_DEALLOCATOR
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_TASK_STACK_DEALLOCATOR``
|
|
|
|
DATA TYPE:
|
|
Function pointer.
|
|
|
|
RANGE:
|
|
Undefined or valid function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``_Workspace_Free``, which indicates that task stacks
|
|
will be allocated from the RTEMS Workspace.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
|
|
to free task stacks.
|
|
|
|
NOTES:
|
|
A correctly configured system must configure the following to be consistent:
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
|
|
|
|
- ``CONFIGURE_TASK_STACK_ALLOCATOR``
|
|
|
|
- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
|
|
|
|
Configuring Memory for Classic API Message Buffers
|
|
==================================================
|
|
|
|
This section describes the configuration parameters related to specifying the
|
|
amount of memory reserved for Classic API Message Buffers.
|
|
|
|
.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
|
|
.. index:: memory for a single message queue's buffers
|
|
|
|
.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
|
|
|
|
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
|
|
-----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is None.
|
|
|
|
DESCRIPTION:
|
|
This is a helper macro which is used to assist in computing the total
|
|
amount of memory required for message buffers. Each message queue will
|
|
have its own configuration with maximum message size and maximum number of
|
|
pending messages.
|
|
|
|
The interface for this macro is as follows:
|
|
|
|
.. code-block:: c
|
|
|
|
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
|
|
|
|
Where ``max_messages`` is the maximum number of pending messages and
|
|
``size_per`` is the size in bytes of the user message.
|
|
|
|
NOTES:
|
|
|
|
This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
|
|
|
|
.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
|
|
.. index:: configure message queue buffer memory
|
|
|
|
.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
|
|
|
|
CONFIGURE_MESSAGE_BUFFER_MEMORY
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MESSAGE_BUFFER_MEMORY``
|
|
|
|
DATA TYPE:
|
|
integer summation macro
|
|
|
|
RANGE:
|
|
undefined (zero) or calculation resulting in a positive integer
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, and zero (0) memory is reserved.
|
|
|
|
DESCRIPTION:
|
|
This macro is set to the number of bytes the application requires to be
|
|
reserved for pending Classic API Message Queue buffers.
|
|
|
|
NOTES:
|
|
The following illustrates how the help macro
|
|
``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE`` can be used to assist in
|
|
calculating the message buffer memory required. In this example, there are
|
|
two message queues used in this application. The first message queue has
|
|
maximum of 24 pending messages with the message structure defined by the
|
|
type ``one_message_type``. The other message queue has maximum of 500
|
|
pending messages with the message structure defined by the type
|
|
``other_message_type``.
|
|
|
|
.. code-block:: c
|
|
|
|
#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
|
|
(CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
|
|
24, sizeof(one_message_type) \
|
|
) + \
|
|
CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
|
|
500, sizeof(other_message_type) \
|
|
)
|
|
|
|
Seldom Used Configuration Parameters
|
|
====================================
|
|
|
|
This section describes configuration parameters supported by
|
|
``<rtems/confdefs.h>`` which are seldom used by applications. These parameters
|
|
tend to be oriented to debugging system configurations and providing
|
|
work-arounds when the memory estimated by ``<rtems/confdefs.h>`` is incorrect.
|
|
|
|
.. index:: CONFIGURE_MEMORY_OVERHEAD
|
|
|
|
.. _CONFIGURE_MEMORY_OVERHEAD:
|
|
|
|
CONFIGURE_MEMORY_OVERHEAD
|
|
-------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MEMORY_OVERHEAD``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
This parameter is set to the number of kilobytes the application wishes to
|
|
add to the requirements calculated by ``<rtems/confdefs.h>``.
|
|
|
|
NOTES:
|
|
This configuration parameter should only be used when it is suspected that
|
|
a bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.
|
|
Typically the memory allocation will be too low when an application does
|
|
not account for all message queue buffers or task stacks.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
|
|
|
|
.. _CONFIGURE_HAS_OWN_CONFIGURATION_TABLE:
|
|
|
|
CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
|
|
-------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_HAS_OWN_CONFIGURATION_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter should only be defined if the application is
|
|
providing their own complete set of configuration tables.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
C Library Support Configuration
|
|
===============================
|
|
|
|
This section defines the file system and IO library related configuration
|
|
parameters supported by ``<rtems/confdefs.h>``.
|
|
|
|
.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
|
|
.. index:: maximum file descriptors
|
|
|
|
.. _CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS:
|
|
|
|
CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
|
|
----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
|
|
default value is 3, otherwise the default value is 0. Three file
|
|
descriptors allows RTEMS to support standard input, output, and error I/O
|
|
streams on ``/dev/console``.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is set to the maximum number of file like
|
|
objects that can be concurrently open.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
File System Configuration Parameters
|
|
====================================
|
|
|
|
This section defines File System related configuration parameters.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
|
|
|
|
.. _CONFIGURE_HAS_OWN_MOUNT_TABLE:
|
|
|
|
CONFIGURE_HAS_OWN_MOUNT_TABLE
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_HAS_OWN_MOUNT_TABLE``
|
|
|
|
DATA TYPE:
|
|
Undefined or an array of type ``rtems_filesystem_mount_table_t``.
|
|
|
|
RANGE:
|
|
Undefined or an array of type ``rtems_filesystem_mount_table_t``.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is defined when the application provides their
|
|
own filesystem mount table. The mount table is an array of
|
|
``rtems_filesystem_mount_table_t`` entries pointed to by the global
|
|
variable ``rtems_filesystem_mount_table``. The number of entries in this
|
|
table is in an integer variable named ``rtems_filesystem_mount_table_t``.
|
|
|
|
.. COMMENT: XXX - is the variable name for the count right?
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. COMMENT: XXX - Please provide an example
|
|
|
|
.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
|
|
|
|
.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
|
|
|
|
CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default. If no other root file system configuration
|
|
parameters are specified, the IMFS will be used as the root file system.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is defined if the application wishes to use
|
|
the device-only filesytem as the root file system.
|
|
|
|
NOTES:
|
|
The device-only filesystem supports only device nodes and is smaller in
|
|
executable code size than the full IMFS and miniIMFS.
|
|
|
|
The devFS is comparable in functionality to the pseudo-filesystem name
|
|
space provided before RTEMS release 4.5.0.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_DEVICES
|
|
|
|
.. _CONFIGURE_MAXIMUM_DEVICES:
|
|
|
|
CONFIGURE_MAXIMUM_DEVICES
|
|
-------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_DEVICES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
|
|
``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
|
|
devices that may be registered in the device file system (devFS).
|
|
|
|
NOTES:
|
|
This option is specific to the device file system (devFS) and should not be
|
|
confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option. This parameter
|
|
only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
|
|
``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
|
|
|
|
.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
|
|
|
|
CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
|
|
----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default. If no other root file system configuration
|
|
parameters are specified, the IMFS will be used as the root file system.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is defined if the application dose not intend
|
|
to use any kind of filesystem support. This include the device
|
|
infrastructure necessary to support ``printf()``.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
|
|
|
|
.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
|
|
|
|
CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
|
|
-----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the following
|
|
configuration options will be defined as well
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_CHMOD``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_CHOWN``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_UTIME``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_LINK``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_READLINK``,
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_RENAME``, and
|
|
|
|
- ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
|
|
|
|
.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
|
|
|
|
.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
|
|
|
|
CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Valid values for this configuration parameter are a power of two (2)
|
|
between 16 and 512 inclusive. In other words, valid values are 16, 32, 64,
|
|
128, 256,and 512.
|
|
|
|
DEFAULT VALUE:
|
|
The default IMFS block size is 128 bytes.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter specifies the block size for in-memory files
|
|
managed by the IMFS. The configured block size has two impacts. The first
|
|
is the average amount of unused memory in the last block of each file. For
|
|
example, when the block size is 512, on average one-half of the last block
|
|
of each file will remain unused and the memory is wasted. In contrast, when
|
|
the block size is 16, the average unused memory per file is only 8
|
|
bytes. However, it requires more allocations for the same size file and
|
|
thus more overhead per block for the dynamic memory management.
|
|
|
|
Second, the block size has an impact on the maximum size file that can be
|
|
stored in the IMFS. With smaller block size, the maximum file size is
|
|
correspondingly smaller. The following shows the maximum file size possible
|
|
based on the configured block size:
|
|
|
|
- when the block size is 16 bytes, the maximum file size is 1,328 bytes.
|
|
|
|
- when the block size is 32 bytes, the maximum file size is 18,656 bytes.
|
|
|
|
- when the block size is 64 bytes, the maximum file size is 279,488 bytes.
|
|
|
|
- when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
|
|
|
|
- when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
|
|
|
|
- when the block size is 512 bytes, the maximum file size is 1,082,195,456
|
|
bytes.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_CHOWN:
|
|
|
|
CONFIGURE_IMFS_DISABLE_CHOWN
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_CHOWN``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to change
|
|
the owner is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_CHMOD:
|
|
|
|
CONFIGURE_IMFS_DISABLE_CHMOD
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_CHMOD``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to change
|
|
the mode is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_UTIME
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_UTIME:
|
|
|
|
CONFIGURE_IMFS_DISABLE_UTIME
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_UTIME``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to change
|
|
times is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_LINK
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_LINK:
|
|
|
|
CONFIGURE_IMFS_DISABLE_LINK
|
|
---------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_LINK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to create
|
|
hard links is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
|
|
|
|
CONFIGURE_IMFS_DISABLE_SYMLINK
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_SYMLINK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to create
|
|
symbolic links is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_READLINK
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_READLINK:
|
|
|
|
CONFIGURE_IMFS_DISABLE_READLINK
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_READLINK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to read
|
|
symbolic links is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_RENAME
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_RENAME:
|
|
|
|
CONFIGURE_IMFS_DISABLE_RENAME
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_RENAME``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to rename
|
|
nodes is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_READDIR
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_READDIR:
|
|
|
|
CONFIGURE_IMFS_DISABLE_READDIR
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_READDIR``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to read a
|
|
directory is disabled in the root IMFS. It is still possible to open nodes
|
|
in a directory.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_MOUNT:
|
|
|
|
CONFIGURE_IMFS_DISABLE_MOUNT
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_MOUNT``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to mount
|
|
other file systems is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
|
|
|
|
CONFIGURE_IMFS_DISABLE_UNMOUNT
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_UNMOUNT``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to unmount
|
|
file systems is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_MKNOD:
|
|
|
|
CONFIGURE_IMFS_DISABLE_MKNOD
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_MKNOD``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to make
|
|
directories, devices, regular files and FIFOs is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
|
|
|
|
CONFIGURE_IMFS_DISABLE_MKNOD_FILE
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to make
|
|
regular files is disabled in the root IMFS.
|
|
|
|
.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
|
|
|
|
.. _CONFIGURE_IMFS_DISABLE_RMNOD:
|
|
|
|
CONFIGURE_IMFS_DISABLE_RMNOD
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IMFS_DISABLE_RMNOD``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
In case this configuration option is defined, then the support to remove
|
|
nodes is disabled in the root IMFS.
|
|
|
|
Block Device Cache Configuration
|
|
================================
|
|
|
|
This section defines Block Device Cache (bdbuf) related configuration
|
|
parameters.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
|
|
------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
Provides a Block Device Cache configuration.
|
|
|
|
NOTES:
|
|
Each option of the Block Device Cache configuration can be explicitly set
|
|
by the user with the configuration options below. The Block Device Cache
|
|
is used for example by the RFS and DOSFS file systems.
|
|
|
|
.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
|
|
|
|
.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
|
|
|
|
CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
|
|
---------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 32768 bytes.
|
|
|
|
DESCRIPTION:
|
|
Size of the cache memory in bytes.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
|
|
|
|
.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
|
|
|
|
CONFIGURE_BDBUF_BUFFER_MIN_SIZE
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 512 bytes.
|
|
|
|
DESCRIPTION:
|
|
Defines the minimum size of a buffer in bytes.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
|
|
|
|
.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
|
|
|
|
CONFIGURE_BDBUF_BUFFER_MAX_SIZE
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
It must be positive and an integral multiple of the buffer minimum size.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 4096 bytes.
|
|
|
|
DESCRIPTION:
|
|
Defines the maximum size of a buffer in bytes.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
|
|
|
|
.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
|
|
|
|
CONFIGURE_SWAPOUT_SWAP_PERIOD
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SWAPOUT_SWAP_PERIOD``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 250 milliseconds.
|
|
|
|
DESCRIPTION:
|
|
Defines the swapout task swap period in milliseconds.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
|
|
|
|
.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
|
|
|
|
CONFIGURE_SWAPOUT_BLOCK_HOLD
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SWAPOUT_BLOCK_HOLD``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 1000 milliseconds.
|
|
|
|
DESCRIPTION:
|
|
Defines the swapout task maximum block hold time in milliseconds.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
|
|
|
|
.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
|
|
|
|
CONFIGURE_SWAPOUT_TASK_PRIORITY
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SWAPOUT_TASK_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
Task priority (``rtems_task_priority``).
|
|
|
|
RANGE:
|
|
Valid task priority.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 15.
|
|
|
|
DESCRIPTION:
|
|
Defines the swapout task priority.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
|
|
|
|
.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
|
|
|
|
CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
|
|
-------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
Defines the maximum blocks per read-ahead request.
|
|
|
|
NOTES:
|
|
A value of 0 disables the read-ahead task (default). The read-ahead task
|
|
will issue speculative read transfers if a sequential access pattern is
|
|
detected. This can improve the performance on some systems.
|
|
|
|
.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
|
|
|
|
.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
|
|
|
|
CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 16.
|
|
|
|
DESCRIPTION:
|
|
Defines the maximum blocks per write request.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
|
|
|
|
.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
|
|
|
|
CONFIGURE_BDBUF_TASK_STACK_SIZE
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_TASK_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is RTEMS_MINIMUM_STACK_SIZE.
|
|
|
|
DESCRIPTION:
|
|
Defines the task stack size of the Block Device Cache tasks in bytes.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
|
|
|
|
.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
|
|
|
|
CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
|
|
----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
Task priority (``rtems_task_priority``).
|
|
|
|
RANGE:
|
|
Valid task priority.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 15.
|
|
|
|
DESCRIPTION:
|
|
Defines the read-ahead task priority.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
|
|
|
|
.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
|
|
|
|
CONFIGURE_SWAPOUT_WORKER_TASKS
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SWAPOUT_WORKER_TASKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
Defines the swapout worker task count.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
|
|
|
|
.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
|
|
|
|
CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
Task priority (``rtems_task_priority``).
|
|
|
|
RANGE:
|
|
Valid task priority.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 15.
|
|
|
|
DESCRIPTION:
|
|
Defines the swapout worker task priority.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
BSP Specific Settings
|
|
=====================
|
|
|
|
This section describes BSP specific configuration settings used by
|
|
``<rtems/confdefs.h>``. The BSP specific configuration settings are defined in
|
|
``<bsp.h>``.
|
|
|
|
.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
|
|
|
|
.. _CONFIGURE_DISABLE_BSP_SETTINGS:
|
|
|
|
CONFIGURE_DISABLE_BSP_SETTINGS
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_DISABLE_BSP_SETTINGS``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
All BSP specific configuration settings can be disabled by the application
|
|
with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
|
|
|
|
.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
|
|
|
|
CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
|
|
----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter is defined by a BSP to indicate that it does
|
|
not allocate all available memory to the C Program Heap used by the Malloc
|
|
Family of routines.
|
|
|
|
If defined, when ``malloc()`` is unable to allocate memory, it will call
|
|
the BSP supplied ``sbrk()`` to obtain more memory.
|
|
|
|
NOTES:
|
|
This parameter should not be defined by the application. Only the BSP knows
|
|
how it allocates memory to the C Program Heap.
|
|
|
|
.. index:: BSP_IDLE_TASK_BODY
|
|
|
|
.. _BSP_IDLE_TASK_BODY:
|
|
|
|
BSP_IDLE_TASK_BODY
|
|
------------------
|
|
|
|
CONSTANT:
|
|
``BSP_IDLE_TASK_BODY``
|
|
|
|
DATA TYPE:
|
|
Function pointer.
|
|
|
|
RANGE:
|
|
Undefined or valid function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
|
|
``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
|
|
BSP specific idle task body will be used.
|
|
|
|
NOTES:
|
|
As it has knowledge of the specific CPU model, system controller logic, and
|
|
peripheral buses, a BSP specific IDLE task may be capable of turning
|
|
components off to save power during extended periods of no task activity
|
|
|
|
.. index:: BSP_IDLE_TASK_STACK_SIZE
|
|
|
|
.. _BSP_IDLE_TASK_STACK_SIZE:
|
|
|
|
BSP_IDLE_TASK_STACK_SIZE
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``BSP_IDLE_TASK_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
|
|
``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
|
|
this BSP suggested idle task stack size will be used.
|
|
|
|
NOTES:
|
|
The order of precedence for configuring the IDLE task stack size is:
|
|
|
|
- RTEMS default minimum stack size.
|
|
|
|
- If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
|
|
|
|
- If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
|
|
|
|
- If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
|
|
|
|
.. COMMENT: XXX - add cross references to other related values.
|
|
|
|
.. index:: BSP_INITIAL_EXTENSION
|
|
|
|
.. _BSP_INITIAL_EXTENSION:
|
|
|
|
BSP_INITIAL_EXTENSION
|
|
---------------------
|
|
|
|
CONSTANT:
|
|
``BSP_INITIAL_EXTENSION``
|
|
|
|
DATA TYPE:
|
|
List of user extension initializers (``rtems_extensions_table``).
|
|
|
|
RANGE:
|
|
Undefined or a list of user extension initializers.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
|
|
initial extension will be placed as the last entry in the initial extension
|
|
table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: BSP_INTERRUPT_STACK_SIZE
|
|
|
|
.. _BSP_INTERRUPT_STACK_SIZE:
|
|
|
|
BSP_INTERRUPT_STACK_SIZE
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``BSP_INTERRUPT_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
|
|
``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
|
|
this BSP specific interrupt stack size will be used.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: BSP_MAXIMUM_DEVICES
|
|
|
|
.. _BSP_MAXIMUM_DEVICES:
|
|
|
|
BSP_MAXIMUM_DEVICES
|
|
-------------------
|
|
|
|
CONSTANT:
|
|
``BSP_MAXIMUM_DEVICES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
|
|
``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
|
|
BSP specific maximum device count will be used.
|
|
|
|
NOTES:
|
|
This option is specific to the device file system (devFS) and should not be
|
|
confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option. This parameter
|
|
only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
|
|
``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
|
|
|
|
.. index:: BSP_ZERO_WORKSPACE_AUTOMATICALLY
|
|
|
|
.. _BSP_ZERO_WORKSPACE_AUTOMATICALLY:
|
|
|
|
BSP_ZERO_WORKSPACE_AUTOMATICALLY
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``BSP_ZERO_WORKSPACE_AUTOMATICALLY``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
If ``BSP_ZERO_WORKSPACE_AUTOMATICALLY`` is defined by the BSP and
|
|
``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY`` is not defined by the
|
|
application, then the workspace will be zeroed automatically.
|
|
|
|
NOTES:
|
|
Zeroing memory can add significantly to system boot time. It is not
|
|
necessary for RTEMS but is often assumed by support libraries.
|
|
|
|
.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
|
|
|
|
.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
|
|
|
|
CONFIGURE_BSP_PREREQUISITE_DRIVERS
|
|
----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
|
|
|
|
DATA TYPE:
|
|
List of device driver initializers (``rtems_driver_address_table``).
|
|
|
|
RANGE:
|
|
Undefined or array of device drivers.
|
|
|
|
DEFAULT VALUE:
|
|
This option is BSP specific.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
|
|
drivers it needs to include in the Device Driver Table. This should be
|
|
defined to the set of device driver entries that will be placed in the
|
|
table at the *FRONT* of the Device Driver Table and initialized before any
|
|
other drivers *INCLUDING* any application prerequisite drivers.
|
|
|
|
NOTES:
|
|
``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
|
|
configure common infrastructure such as bus controllers or probe for
|
|
devices.
|
|
|
|
Idle Task Configuration
|
|
=======================
|
|
|
|
This section defines the IDLE task related configuration parameters supported
|
|
by ``<rtems/confdefs.h>``.
|
|
|
|
.. index:: CONFIGURE_IDLE_TASK_BODY
|
|
|
|
.. _CONFIGURE_IDLE_TASK_BODY:
|
|
|
|
CONFIGURE_IDLE_TASK_BODY
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IDLE_TASK_BODY``
|
|
|
|
DATA TYPE:
|
|
Function pointer.
|
|
|
|
RANGE:
|
|
Undefined or valid function pointer.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
|
|
the application specific IDLE thread body. If not specified, the BSP or
|
|
RTEMS default IDLE thread body will be used.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
|
|
|
|
.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
|
|
|
|
CONFIGURE_IDLE_TASK_STACK_SIZE
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IDLE_TASK_STACK_SIZE``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``size_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is RTEMS_MINIMUM_STACK_SIZE.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
|
|
IDLE task.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
|
|
|
|
.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
|
|
|
|
CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
|
|
-------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, the user is assumed to provide one or more
|
|
initialization tasks.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`` is set to indicate that the
|
|
user has configured *NO* user initialization tasks or threads and that the
|
|
user provided IDLE task will perform application initialization and then
|
|
transform itself into an IDLE task.
|
|
|
|
NOTES:
|
|
If you use this option be careful, the user IDLE task *CANNOT* block at all
|
|
during the initialization sequence. Further, once application
|
|
initialization is complete, it must make itself preemptible and enter an
|
|
IDLE body loop.
|
|
|
|
The IDLE task must run at the lowest priority of all tasks in the system.
|
|
|
|
General Scheduler Configuration
|
|
===============================
|
|
|
|
This section defines the configuration parameters related to selecting a
|
|
scheduling algorithm for an application. For the :ref:`schedulers built into
|
|
RTEMS <SchedulingConcepts>`, the configuration is straightforward. All that is
|
|
required is to define the configuration macro which specifies which scheduler
|
|
you want for in your application.
|
|
|
|
The pluggable scheduler interface also enables the user to provide their own
|
|
scheduling algorithm. If you choose to do this, you must define multiple
|
|
configuration macros.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_CBS
|
|
|
|
.. _CONFIGURE_SCHEDULER_CBS:
|
|
|
|
CONFIGURE_SCHEDULER_CBS
|
|
-----------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_CBS``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Constant Bandwidth Server (CBS) Scheduler
|
|
<SchedulerCBS>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for exactly one processor.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_EDF
|
|
|
|
.. _CONFIGURE_SCHEDULER_EDF:
|
|
|
|
CONFIGURE_SCHEDULER_EDF
|
|
-----------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_EDF``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Earliest Deadline First (EDF) Scheduler
|
|
<SchedulerEDF>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for exactly one processor.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_EDF_SMP
|
|
|
|
.. _CONFIGURE_SCHEDULER_EDF_SMP:
|
|
|
|
CONFIGURE_SCHEDULER_EDF_SMP
|
|
---------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_EDF_SMP``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
|
|
<SchedulerSMPEDF>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
This scheduler algorithm is only available when RTEMS is built with SMP
|
|
support enabled.
|
|
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for up to 32 processors.
|
|
|
|
This scheduler algorithm is the default in SMP configurations and is only
|
|
selected when :ref:`CONFIGURE_MAXIMUM_PROCESSORS
|
|
<CONFIGURE_MAXIMUM_PROCESSORS>` is greater than one.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_NAME
|
|
|
|
.. _CONFIGURE_SCHEDULER_NAME:
|
|
|
|
CONFIGURE_SCHEDULER_NAME
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_NAME``
|
|
|
|
DATA TYPE:
|
|
RTEMS Name (``rtems_name``).
|
|
|
|
RANGE:
|
|
Any value.
|
|
|
|
DEFAULT VALUE:
|
|
The default name is
|
|
|
|
- ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
|
|
- ``"MPA "`` for the :ref:`Aribitary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
|
|
- ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
|
|
- ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
|
|
- ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
|
|
- ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
|
|
- ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
|
|
- ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
|
|
|
|
DESCRIPTION:
|
|
Schedulers can be identified via ``rtems_scheduler_ident``. The name of
|
|
the scheduler is determined by the configuration.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_PRIORITY
|
|
|
|
.. _CONFIGURE_SCHEDULER_PRIORITY:
|
|
|
|
CONFIGURE_SCHEDULER_PRIORITY
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_PRIORITY``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is defined by default. This is the default scheduler and specifying
|
|
this configuration parameter is redundant.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Deterministic Priority Scheduler
|
|
<SchedulerPriority>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for exactly one processor.
|
|
|
|
This scheduler algorithm is the default when
|
|
:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
|
|
exactly one.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
|
|
|
|
.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
|
|
|
|
CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
|
|
-----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Arbitrary Processor Affinity SMP Scheduler
|
|
<SchedulerSMPPriorityAffinity>` algorithm is made available to the
|
|
application.
|
|
|
|
NOTES:
|
|
This scheduler algorithm is only available when RTEMS is built with SMP
|
|
support enabled.
|
|
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for up to 32 processors.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
|
|
|
|
.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
|
|
|
|
CONFIGURE_SCHEDULER_PRIORITY_SMP
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_PRIORITY_SMP``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Deterministic Priority SMP Scheduler
|
|
<SchedulerSMPPriority>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
This scheduler algorithm is only available when RTEMS is built with SMP
|
|
support enabled.
|
|
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for up to 32 processors.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_SIMPLE
|
|
|
|
.. _CONFIGURE_SCHEDULER_SIMPLE:
|
|
|
|
CONFIGURE_SCHEDULER_SIMPLE
|
|
--------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_SIMPLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Simple Priority Scheduler
|
|
<SchedulerPrioritySimple>` algorithm is made available to the application.
|
|
|
|
NOTES:
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for exactly one processor.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
|
|
|
|
.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
|
|
|
|
CONFIGURE_SCHEDULER_SIMPLE_SMP
|
|
------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_SIMPLE_SMP``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
If defined, then the :ref:`Simple Priority SMP Scheduler
|
|
<SchedulerSMPPrioritySimple>` algorithm is made available to the
|
|
application.
|
|
|
|
NOTES:
|
|
This scheduler algorithm is only available when RTEMS is built with SMP
|
|
support enabled.
|
|
|
|
In case no explicit :ref:`clustered scheduler configuration
|
|
<ConfigurationSchedulersClustered>` is present, then it is used as the
|
|
scheduler for up to 32 processors.
|
|
|
|
.. index:: CONFIGURE_SCHEDULER_USER
|
|
|
|
.. _CONFIGURE_SCHEDULER_USER:
|
|
|
|
CONFIGURE_SCHEDULER_USER
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_SCHEDULER_USER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
RTEMS allows the application to provide its own task/thread scheduling
|
|
algorithm. In order to do this, one must define
|
|
``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
|
|
scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
|
|
following additional macros must be defined:
|
|
|
|
- ``CONFIGURE_SCHEDULER_CONTEXT`` must be defined to a static definition of
|
|
the scheduler context of the user scheduler.
|
|
|
|
- ``CONFIGURE_SCHEDULER_CONTROLS`` must be defined to a scheduler control
|
|
initializer for the user scheduler.
|
|
|
|
- ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
|
|
the per-thread information of the user scheduler.
|
|
|
|
NOTES:
|
|
At this time, the mechanics and requirements for writing a new scheduler
|
|
are evolving and not fully documented. It is recommended that you look at
|
|
the existing Deterministic Priority Scheduler in
|
|
``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on
|
|
the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
|
|
for how these are defined for the Deterministic Priority Scheduler.
|
|
|
|
.. _ConfigurationSchedulersClustered:
|
|
|
|
Clustered Scheduler Configuration
|
|
=================================
|
|
|
|
Clustered scheduling helps to control the worst-case latencies in a
|
|
multi-processor system (SMP). The goal is to reduce the amount of shared state
|
|
in the system and thus prevention of lock contention. Modern multi-processor
|
|
systems tend to have several layers of data and instruction caches. With
|
|
clustered scheduling it is possible to honour the cache topology of a system
|
|
and thus avoid expensive cache synchronization traffic.
|
|
|
|
We have clustered scheduling in case the set of processors of a system is
|
|
partitioned into non-empty pairwise-disjoint subsets. These subsets are called
|
|
clusters. Clusters with a cardinality of one are partitions. Each cluster is
|
|
owned by exactly one scheduler instance.
|
|
|
|
A clustered scheduler configuration is optional. By default, up to 32
|
|
processors are managed by the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`. In
|
|
order to use clustered scheduling the application designer has to answer two
|
|
questions.
|
|
|
|
#. How is the set of processors partitioned into clusters?
|
|
|
|
#. Which scheduler algorithm is used for which cluster?
|
|
|
|
The schedulers are statically configured.
|
|
|
|
Configuration Step 1 - Scheduler Algorithms
|
|
-------------------------------------------
|
|
|
|
Firstly, the application must select which scheduling algorithms are available
|
|
with the following defines
|
|
|
|
- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
|
|
|
|
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
|
|
|
|
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
|
|
|
|
- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
|
|
|
|
This is necessary to calculate the per-thread overhead introduced by the
|
|
schedulers. After these definitions the configuration file must ``#include
|
|
<rtems/scheduler.h>`` to have access to scheduler-specific configuration
|
|
macros.
|
|
|
|
Configuration Step 2 - Schedulers
|
|
---------------------------------
|
|
|
|
Each scheduler needs a context to store state information at run-time. Use the
|
|
following macros to create scheduler contexts
|
|
|
|
- ``RTEMS_SCHEDULER_CONTEXT_EDF_SMP(name, max_cpu_count)``,
|
|
|
|
- ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP(name, prio_count)``,
|
|
|
|
- ``RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(name, prio_count)``, and
|
|
|
|
- ``RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP(name)``.
|
|
|
|
The ``name`` parameter is used as part of a designator for a global variable,
|
|
so the usual C/C++ designator rules apply. This ``name`` is not the scheduler
|
|
object name. Additional parameters are scheduler-specific.
|
|
|
|
.. _ConfigurationSchedulerTable:
|
|
|
|
Configuration Step 3 - Scheduler Table
|
|
--------------------------------------
|
|
|
|
The schedulers are registered in the system via the scheduler table.
|
|
To create the scheduler table define ``CONFIGURE_SCHEDULER_CONTROLS`` to a list
|
|
of the following scheduler control initializers
|
|
|
|
- ``RTEMS_SCHEDULER_CONTROL_EDF_SMP(name, obj_name)``,
|
|
|
|
- ``RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP(name, obj_name)``,
|
|
|
|
- ``RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP(name, obj_name)``, and
|
|
|
|
- ``RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP(name, obj_name)``.
|
|
|
|
The ``name`` parameter must correspond to the parameter defining the scheduler
|
|
context. The ``obj_name`` determines the scheduler object name and can be used
|
|
in :ref:`rtems_scheduler_ident() <rtems_scheduler_ident>` to get the scheduler
|
|
object identifier. The scheduler index is defined by the index of the
|
|
scheduler table. It is a configuration error to add a scheduler multiple times
|
|
to the scheduler table.
|
|
|
|
Configuration Step 4 - Processor to Scheduler Assignment
|
|
--------------------------------------------------------
|
|
|
|
The last step is to define which processor uses which scheduler. For this
|
|
purpose a scheduler assignment table must be defined. The entry count of this
|
|
table must be equal to the configured maximum processors
|
|
(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`). A
|
|
processor assignment to a scheduler can be optional or mandatory. The boot
|
|
processor must have a scheduler assigned. In case the system needs more
|
|
mandatory processors than available then a fatal run-time error will occur. To
|
|
specify the scheduler assignments define
|
|
``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` to a list of
|
|
|
|
- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
|
|
|
|
- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
|
|
|
|
macros. The ``scheduler_index`` parameter must
|
|
be a valid index into the scheduler table. The ``attr`` parameter defines the
|
|
scheduler assignment attributes. By default, a scheduler assignment to a
|
|
processor is optional. For the scheduler assignment attribute use one of the
|
|
mutually exclusive variants
|
|
|
|
- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
|
|
|
|
- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
|
|
|
|
- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
|
|
|
|
It is possible to add/remove processors to/from schedulers at run-time, see
|
|
:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
|
|
:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
|
|
|
|
Configuration Example
|
|
---------------------
|
|
|
|
The following example shows a scheduler configuration for a hypothetical
|
|
product using two chip variants. One variant has four processors which is used
|
|
for the normal product line and another provides eight processors for the
|
|
high-performance product line. The first processor performs hard-real time
|
|
control of actuators and sensors. The second processor is not used by RTEMS at
|
|
all and runs a Linux instance to provide a graphical user interface. The
|
|
additional processors are used for a worker thread pool to perform data
|
|
processing operations.
|
|
|
|
The processors managed by RTEMS use two Deterministic Priority SMP schedulers
|
|
capable of dealing with 256 priority levels. The scheduler with index zero has
|
|
the name ``"IO "``. The scheduler with index one has the name ``"WORK"``. The
|
|
scheduler assignments of the first, third and fourth processor are mandatory,
|
|
so the system must have at least four processors, otherwise a fatal run-time
|
|
error will occur during system startup. The processor assignments for the
|
|
fifth up to the eighth processor are optional so that the same application can
|
|
be used for the normal and high-performance product lines. The second
|
|
processor has no scheduler assigned and runs Linux. A hypervisor will ensure
|
|
that the two systems cannot interfere in an undesirable way.
|
|
|
|
.. code-block:: c
|
|
|
|
#define CONFIGURE_MAXIMUM_PROCESSORS 8
|
|
#define CONFIGURE_MAXIMUM_PRIORITY 255
|
|
|
|
/* Configuration Step 1 - Scheduler Algorithms */
|
|
#define CONFIGURE_SCHEDULER_PRIORITY_SMP
|
|
#include <rtems/scheduler.h>
|
|
|
|
/* Configuration Step 2 - Schedulers */
|
|
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
|
RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
|
|
|
/* Configuration Step 3 - Scheduler Table */
|
|
#define CONFIGURE_SCHEDULER_CONTROLS \\
|
|
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
|
|
io, \
|
|
rtems_build_name('I', 'O', ' ', ' ') \
|
|
), \
|
|
RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( \
|
|
work, \
|
|
rtems_build_name('W', 'O', 'R', 'K') \
|
|
)
|
|
|
|
/* Configuration Step 4 - Processor to Scheduler Assignment */
|
|
#define CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS \
|
|
RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
|
|
RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
|
|
RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
|
|
|
|
Configuration Errors
|
|
--------------------
|
|
|
|
In case one of the scheduler indices in ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS``
|
|
is invalid a link-time error will occur with an undefined reference to
|
|
``RTEMS_SCHEDULER_INVALID_INDEX``.
|
|
|
|
Some fatal errors may occur in case of scheduler configuration inconsistencies
|
|
or a lack of processors on the system. The fatal source is
|
|
``RTEMS_FATAL_SOURCE_SMP``.
|
|
|
|
- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
|
|
must have a scheduler assigned.
|
|
|
|
- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
|
|
processor beyond the range of physically or virtually available processors.
|
|
The processor demand must be reduced for this system.
|
|
|
|
- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
|
|
processor failed during system initialization. The system may not have this
|
|
processor at all or it could be a problem with a boot loader for example.
|
|
Check the ``CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS`` definition.
|
|
|
|
- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
|
|
to start multitasking on a processor with no scheduler assigned.
|
|
|
|
Device Driver Table
|
|
===================
|
|
|
|
This section defines the configuration parameters related to the automatic
|
|
generation of a Device Driver Table. As ``<rtems/confdefs.h>`` only is aware
|
|
of a small set of standard device drivers, the generated Device Driver Table is
|
|
suitable for simple applications with no custom device drivers.
|
|
|
|
Note that network device drivers are not configured in the Device Driver Table.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_DRIVERS
|
|
|
|
.. _CONFIGURE_MAXIMUM_DRIVERS:
|
|
|
|
CONFIGURE_MAXIMUM_DRIVERS
|
|
-------------------------
|
|
|
|
CONSTANT:
|
|
|
|
``CONFIGURE_MAXIMUM_DRIVERS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
This is computed by default, and is set to the number of device drivers
|
|
configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
|
|
configuration parameters.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
|
|
per node.
|
|
|
|
NOTES:
|
|
If the application will dynamically install device drivers, then this
|
|
configuration parameter must be larger than the number of statically
|
|
configured device drivers. Drivers configured using the
|
|
``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
|
|
statically installed.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
|
------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
|
|
application wishes to include the Console Device Driver.
|
|
|
|
NOTES:
|
|
This device driver is responsible for providing the :file:`/dev/console`
|
|
device file. This device is used to initialize the standard input, output,
|
|
and error file descriptors.
|
|
|
|
BSPs should be constructed in a manner that allows ``printk()`` to work
|
|
properly without the need for the console driver to be configured.
|
|
|
|
The
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
|
|
|
|
configuration options are mutually exclusive.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
|
|
-------------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`` is defined if the
|
|
application wishes to include the Simple Console Device Driver.
|
|
|
|
NOTES:
|
|
This device driver is responsible for providing the :file:`/dev/console`
|
|
device file. This device is used to initialize the standard input, output,
|
|
and error file descriptors.
|
|
|
|
This device driver reads via ``getchark()``.
|
|
|
|
This device driver writes via ``rtems_putc()``.
|
|
|
|
The Termios framework is not used. There is no support to change device
|
|
settings, e.g. baud, stop bits, parity, etc.
|
|
|
|
The
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
|
|
|
|
configuration options are mutually exclusive.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
|
|
------------------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`` is defined if
|
|
the application wishes to include the Simple Task Console Device Driver.
|
|
|
|
NOTES:
|
|
This device driver is responsible for providing the :file:`/dev/console`
|
|
device file. This device is used to initialize the standard input, output,
|
|
and error file descriptors.
|
|
|
|
This device driver reads via ``getchark()``.
|
|
|
|
This device driver writes into a write buffer. The count of characters
|
|
written into the write buffer is returned. It might be less than the
|
|
requested count, in case the write buffer is full. The write is
|
|
non-blocking and may be called from interrupt context. A dedicated task
|
|
reads from the write buffer and outputs the characters via
|
|
``rtems_putc()``. This task runs with the least important priority. The
|
|
write buffer size is 2047 characters and it is not configurable.
|
|
|
|
Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
|
|
write buffer.
|
|
|
|
The Termios framework is not used. There is no support to change device
|
|
settings, e.g. baud, stop bits, parity, etc.
|
|
|
|
The
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
|
|
|
|
* ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
|
|
|
|
configuration options are mutually exclusive.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
|
----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
|
|
wishes to include the Clock Device Driver.
|
|
|
|
NOTES:
|
|
This device driver is responsible for providing a regular interrupt which
|
|
invokes a clock tick directive.
|
|
|
|
If neither the Clock Driver not Benchmark Timer is enabled and the
|
|
configuration parameter
|
|
``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
|
|
compile time error will occur.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
|
|
----------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
|
|
wishes to include the Timer Driver. This device driver is used to
|
|
benchmark execution times by the RTEMS Timing Test Suites.
|
|
|
|
NOTES:
|
|
If neither the Clock Driver not Benchmark Timer is enabled and the
|
|
configuration parameter
|
|
``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
|
|
compile time error will occur.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
|
|
------------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
|
|
application does *NOT* want the Clock Device Driver and is *NOT* using the
|
|
Timer Driver. The inclusion or exclusion of the Clock Driver must be
|
|
explicit in user applications.
|
|
|
|
NOTES:
|
|
This configuration parameter is intended to prevent the common user error
|
|
of using the Hello World example as the baseline for an application and
|
|
leaving out a clock tick source.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
|
|
--------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
|
|
wishes to include the Real-Time Clock Driver.
|
|
|
|
NOTES:
|
|
Most BSPs do not include support for a real-time clock. This is because
|
|
many boards do not include the required hardware.
|
|
|
|
If this is defined and the BSP does not have this device driver, then the
|
|
user will get a link time error for an undefined symbol.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
|
|
-------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
|
|
application wishes to include the Watchdog Driver.
|
|
|
|
NOTES:
|
|
Most BSPs do not include support for a watchdog device driver. This is
|
|
because many boards do not include the required hardware.
|
|
|
|
If this is defined and the BSP does not have this device driver, then the
|
|
user will get a link time error for an undefined symbol.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
|
|
-----------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
|
|
application wishes to include the BSP's Frame Buffer Device Driver.
|
|
|
|
NOTES:
|
|
Most BSPs do not include support for a Frame Buffer Device Driver. This is
|
|
because many boards do not include the required hardware.
|
|
|
|
If this is defined and the BSP does not have this device driver, then the
|
|
user will get a link time error for an undefined symbol.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
|
|
---------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
|
|
wishes to include the Stub Device Driver.
|
|
|
|
NOTES:
|
|
This device driver simply provides entry points that return successful and
|
|
is primarily a test fixture. It is supported by all BSPs.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
|
|
|
|
.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
|
|
|
|
CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
|
|
------------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
|
|
|
|
DATA TYPE:
|
|
device driver entry structures
|
|
|
|
RANGE:
|
|
Undefined or set of device driver entry structures
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
|
|
application has device drivers it needs to include in the Device Driver
|
|
Table. This should be defined to the set of device driver entries that
|
|
will be placed in the table at the *FRONT* of the Device Driver Table and
|
|
initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
|
|
|
|
NOTES:
|
|
In some cases, it is used by System On Chip BSPs to support peripheral
|
|
buses beyond those normally found on the System On Chip. For example, this
|
|
is used by one RTEMS system which has implemented a SPARC/ERC32 based board
|
|
with VMEBus. The VMEBus Controller initialization is performed by a device
|
|
driver configured via this configuration parameter.
|
|
|
|
.. COMMENT: XXX Add example
|
|
|
|
.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
|
|
|
|
.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
|
|
|
|
CONFIGURE_APPLICATION_EXTRA_DRIVERS
|
|
-----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
|
|
|
|
DATA TYPE:
|
|
device driver entry structures
|
|
|
|
RANGE:
|
|
Undefined or set of device driver entry structures
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
|
|
device drivers it needs to include in the Device Driver Table. This should
|
|
be defined to the set of device driver entries that will be placed in the
|
|
table at the *END* of the Device Driver Table.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
|
|
.. index:: /dev/null
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
|
|
---------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
This configuration variable is specified to enable ``/dev/null`` device driver.
|
|
|
|
NOTES:
|
|
This device driver is supported by all BSPs.
|
|
|
|
.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
|
|
.. index:: /dev/zero
|
|
|
|
.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
|
|
|
|
CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
|
|
---------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
This configuration variable is specified to enable ``/dev/zero`` device driver.
|
|
|
|
NOTES:
|
|
This device driver is supported by all BSPs.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
|
|
|
|
.. _CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE:
|
|
|
|
CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
|
|
-------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default, indicating the ``<rtems/confdefs.h>`` is
|
|
providing the device driver table.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE`` is defined if the application
|
|
wishes to provide their own Device Driver Table.
|
|
|
|
The table must be an array of ``rtems_driver_address_table`` entries
|
|
named`` _IO_Driver_address_table``. The application must also provide a
|
|
const variable ``_IO_Number_of_drivers`` of type ``size_t`` indicating the
|
|
number of entries in the ``_IO_Driver_address_table``.
|
|
|
|
NOTES:
|
|
It is expected that there the application would only rarely need to do this.
|
|
|
|
Multiprocessing Configuration
|
|
=============================
|
|
|
|
This section defines the multiprocessing related system configuration
|
|
parameters supported by ``<rtems/confdefs.h>``. They are only used if the
|
|
Multiprocessing Support (distinct from the SMP support) is enabled at configure
|
|
time using the ``--enable-multiprocessing`` option.
|
|
|
|
Additionally, this class of Configuration Constants are only applicable if
|
|
``CONFIGURE_MP_APPLICATION`` is defined.
|
|
|
|
.. index:: CONFIGURE_MP_APPLICATION
|
|
|
|
.. _CONFIGURE_MP_APPLICATION:
|
|
|
|
CONFIGURE_MP_APPLICATION
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_APPLICATION``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
This configuration parameter must be defined to indicate that the
|
|
application intends to be part of a multiprocessing
|
|
configuration. Additional configuration parameters are assumed to be
|
|
provided.
|
|
|
|
NOTES:
|
|
This has no impact unless RTEMS was configured and built using the
|
|
``--enable-multiprocessing`` option.
|
|
|
|
.. index:: CONFIGURE_MP_NODE_NUMBER
|
|
|
|
.. _CONFIGURE_MP_NODE_NUMBER:
|
|
|
|
CONFIGURE_MP_NODE_NUMBER
|
|
------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_NODE_NUMBER``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is ``NODE_NUMBER``, which is assumed to be set by the
|
|
compilation environment.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
|
|
multiprocessor system.
|
|
|
|
NOTES:
|
|
In the RTEMS Multiprocessing Test Suite, the node number is derived from
|
|
the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
|
|
``NODE_NUMBER`` set to different values. The test programs behave
|
|
differently based upon their node number.
|
|
|
|
.. index:: CONFIGURE_MP_MAXIMUM_NODES
|
|
|
|
.. _CONFIGURE_MP_MAXIMUM_NODES:
|
|
|
|
CONFIGURE_MP_MAXIMUM_NODES
|
|
--------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_MAXIMUM_NODES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 2.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
|
|
multiprocessor system.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
|
|
|
|
.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
|
|
|
|
CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
|
|
-----------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 32.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
|
|
concurrently active global objects in a multiprocessor system.
|
|
|
|
NOTES:
|
|
This value corresponds to the total number of objects which can be created
|
|
with the ``RTEMS_GLOBAL`` attribute.
|
|
|
|
.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
|
|
|
|
.. _CONFIGURE_MP_MAXIMUM_PROXIES:
|
|
|
|
CONFIGURE_MP_MAXIMUM_PROXIES
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_MAXIMUM_PROXIES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 32.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
|
|
active thread/task proxies on this node in a multiprocessor system.
|
|
|
|
NOTES:
|
|
Since a proxy is used to represent a remote task/thread which is blocking
|
|
on this node. This configuration parameter reflects the maximum number of
|
|
remote tasks/threads which can be blocked on objects on this node.
|
|
|
|
.. COMMENT: XXX - add xref to proxy discussion in MP chapter
|
|
|
|
.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
|
|
|
|
.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
|
|
|
|
CONFIGURE_MP_MPCI_TABLE_POINTER
|
|
-------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MP_MPCI_TABLE_POINTER``
|
|
|
|
DATA TYPE:
|
|
pointer to ``rtems_mpci_table``
|
|
|
|
RANGE:
|
|
undefined or valid pointer
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
|
|
Configuration Table. The default value of this field is``&MPCI_table``.
|
|
|
|
NOTES:
|
|
RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
|
|
Multiprocessor System assuming the BSP provides the proper set of
|
|
supporting methods.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
|
|
|
|
.. _CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE:
|
|
|
|
CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
|
|
---------------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE`` is defined if the application
|
|
wishes to provide their own Multiprocessing Configuration Table. The
|
|
generated table is named ``Multiprocessing_configuration``.
|
|
|
|
NOTES:
|
|
This is a configuration parameter which is very unlikely to be used by an
|
|
application. If you find yourself wanting to use it in an application,
|
|
please reconsider and discuss this on the RTEMS Users mailing list.
|
|
|
|
Ada Tasks
|
|
=========
|
|
|
|
This section defines the system configuration parameters supported by
|
|
``<rtems/confdefs.h>`` related to configuring RTEMS to support a task using Ada
|
|
tasking with GNAT/RTEMS.
|
|
|
|
These configuration parameters are only available when RTEMS is built with the
|
|
``--enable-ada`` configure option and the application specifies
|
|
``CONFIGURE_GNAT_RTEMS``.
|
|
|
|
Additionally RTEMS includes an Ada language binding to the Classic API which
|
|
has a test suite. This test suite is enabled only when``--enable-tests`` and
|
|
``--enable-expada`` are specified on the configure command.
|
|
|
|
.. index:: CONFIGURE_GNAT_RTEMS
|
|
|
|
.. _CONFIGURE_GNAT_RTEMS:
|
|
|
|
CONFIGURE_GNAT_RTEMS
|
|
--------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_GNAT_RTEMS``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_GNAT_RTEMS`` is defined to inform RTEMS that the GNAT Ada
|
|
run-time is to be used by the application.
|
|
|
|
NOTES:
|
|
This configuration parameter is critical as it makes``<rtems/confdefs.h>``
|
|
configure the resources (POSIX API Threads, Mutexes, Condition Variables,
|
|
and Keys) used implicitly by the GNAT run-time.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
|
|
|
|
.. _CONFIGURE_MAXIMUM_ADA_TASKS:
|
|
|
|
CONFIGURE_MAXIMUM_ADA_TASKS
|
|
---------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_ADA_TASKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Undefined or positive.
|
|
|
|
DEFAULT VALUE:
|
|
If ``CONFIGURE_GNAT_RTEMS`` is defined, then the default value is 20,
|
|
otherwise the default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_ADA_TASKS`` is the number of Ada tasks that can be
|
|
concurrently active in the system.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
|
|
|
|
.. _CONFIGURE_MAXIMUM_FAKE_ADA_TASKS:
|
|
|
|
CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
|
|
--------------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 0.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_FAKE_ADA_TASKS`` is the number of *fake* Ada tasks that
|
|
can be concurrently active in the system. A *fake* Ada task is a non-Ada
|
|
task that makes calls back into Ada code and thus implicitly uses the Ada
|
|
run-time.
|
|
|
|
NOTES:
|
|
None.
|
|
|
|
PCI Library
|
|
===========
|
|
|
|
This section defines the system configuration parameters supported by
|
|
``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
|
|
|
|
The PCI Library startup behaviour can be configured in four different ways
|
|
depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
|
|
|
|
.. index:: PCI_LIB_AUTO
|
|
|
|
``PCI_LIB_AUTO``
|
|
Used to enable the PCI auto configuration software. PCI will be automatically
|
|
probed, PCI buses enumerated, all devices and bridges will be initialized
|
|
using Plug & Play software routines. The PCI device tree will be populated
|
|
based on the PCI devices found in the system, PCI devices will be configured
|
|
by allocating address region resources automatically in PCI space according
|
|
to the BSP or host bridge driver set up.
|
|
|
|
.. index:: PCI_LIB_READ
|
|
|
|
``PCI_LIB_READ``
|
|
Used to enable the PCI read configuration software. The current PCI
|
|
configuration is read to create the RAM representation (the PCI device tree)
|
|
of the PCI devices present. PCI devices are assumed to already have been
|
|
initialized and PCI buses enumerated, it is therefore required that a BIOS or
|
|
a boot loader has set up configuration space prior to booting into RTEMS.
|
|
|
|
.. index:: PCI_LIB_STATIC
|
|
|
|
``PCI_LIB_STATIC``
|
|
Used to enable the PCI static configuration software. The user provides a PCI
|
|
tree with information how all PCI devices are to be configured at compile
|
|
time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
|
|
library will not probe PCI for devices, instead it will assume that all
|
|
devices defined by the user are present, it will enumerate the PCI buses and
|
|
configure all PCI devices in static configuration accordingly. Since probe
|
|
and allocation software is not needed the startup is faster, has smaller
|
|
footprint and does not require dynamic memory allocation.
|
|
|
|
.. index:: PCI_LIB_PERIPHERAL
|
|
|
|
``PCI_LIB_PERIPHERAL``
|
|
Used to enable the PCI peripheral configuration. It is similar to
|
|
``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
|
|
devices since PCI peripherals are not allowed to access PCI configuration
|
|
space.
|
|
|
|
Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
|
|
defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
|
|
Plug & Play is not performed.
|
|
|
|
Go Tasks
|
|
========
|
|
|
|
.. index:: CONFIGURE_ENABLE_GO
|
|
|
|
.. _CONFIGURE_ENABLE_GO:
|
|
|
|
CONFIGURE_ENABLE_GO
|
|
-------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_ENABLE_GO``
|
|
|
|
DATA TYPE:
|
|
Boolean feature macro.
|
|
|
|
RANGE:
|
|
Defined or undefined.
|
|
|
|
DEFAULT VALUE:
|
|
This is not defined by default.
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_ENABLE_GO`` is defined to inform RTEMS that the Go run-time is
|
|
to be used by the application.
|
|
|
|
NOTES:
|
|
The Go language support is experimental
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_GOROUTINES
|
|
|
|
.. _CONFIGURE_MAXIMUM_GOROUTINES:
|
|
|
|
CONFIGURE_MAXIMUM_GOROUTINES
|
|
----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_GOROUTINES``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 400
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_GOROUTINES`` is defined to specify the maximum number
|
|
of Go routines.
|
|
|
|
NOTES:
|
|
The Go language support is experimental
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
|
|
|
|
.. _CONFIGURE_MAXIMUM_GO_CHANNELS:
|
|
|
|
CONFIGURE_MAXIMUM_GO_CHANNELS
|
|
-----------------------------
|
|
|
|
CONSTANT:
|
|
``CONFIGURE_MAXIMUM_GO_CHANNELS``
|
|
|
|
DATA TYPE:
|
|
Unsigned integer (``uint32_t``).
|
|
|
|
RANGE:
|
|
Zero or positive.
|
|
|
|
DEFAULT VALUE:
|
|
The default value is 500
|
|
|
|
DESCRIPTION:
|
|
``CONFIGURE_MAXIMUM_GO_CHANNELS`` is defined to specify the maximum number
|
|
of Go channels.
|
|
|
|
NOTES:
|
|
The Go language support is experimental
|
|
|
|
Obsolete Configuration Options
|
|
==============================
|
|
|
|
.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
|
|
|
|
CONFIGURE_BDBUF_BUFFER_COUNT
|
|
----------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
|
|
RTEMS 4.10.0.
|
|
|
|
.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
|
|
|
|
CONFIGURE_BDBUF_BUFFER_SIZE
|
|
---------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
|
|
RTEMS 4.10.0.
|
|
|
|
.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
|
|
|
|
CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
|
|
--------------------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
|
|
RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
|
|
|
|
CONFIGURE_HAS_OWN_BDBUF_TABLE
|
|
-----------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
|
|
RTEMS 4.10.0.
|
|
|
|
.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
|
|
|
|
CONFIGURE_NUMBER_OF_TERMIOS_PORTS
|
|
---------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_BARRIERS
|
|
--------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
|
|
-------------------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
|
|
-------------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
|
|
RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_MUTEXES
|
|
-------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_RWLOCKS
|
|
-------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
|
|
|
|
CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
|
|
---------------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_TERMIOS_DISABLED
|
|
|
|
CONFIGURE_TERMIOS_DISABLED
|
|
--------------------------
|
|
|
|
This configuration option is obsolete since RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_SMP_APPLICATION
|
|
|
|
CONFIGURE_SMP_APPLICATION
|
|
-------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
|
|
RTEMS 5.1.
|
|
|
|
.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
|
|
|
|
CONFIGURE_SMP_MAXIMUM_PROCESSORS
|
|
--------------------------------
|
|
|
|
This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
|
|
RTEMS 5.1. See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
|