source: rtems/doc/user/conf.t @ b2cf295f

4.115
Last change on this file since b2cf295f was b2cf295f, checked in by Joel Sherrill <joel.sherrill@…>, on 04/09/13 at 16:56:11

user/conf.t: Address User Feedback from Stephen Tether

Stephen Tether <tether@…> posted to the users list:

http://www.rtems.org/pipermail/rtems-users/2013-April/011273.html

I tried to make the requested changes.

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