RTEMS Documentation Project RTEMS Classic API Guide
5.2
  • 1. Preface
  • 2. Overview
    • 2.1. Introduction
    • 2.2. Real-time Application Systems
    • 2.3. Real-time Executive
    • 2.4. RTEMS Application Architecture
    • 2.5. RTEMS Internal Architecture
    • 2.6. User Customization and Extensibility
    • 2.7. Portability
    • 2.8. Memory Requirements
    • 2.9. Audience
    • 2.10. Conventions
    • 2.11. Manual Organization
  • 3. Key Concepts
    • 3.1. Introduction
    • 3.2. Objects
      • 3.2.1. Object Names
      • 3.2.2. Object IDs
        • 3.2.2.1. Object ID Format
      • 3.2.3. Object ID Description
    • 3.3. Communication and Synchronization
    • 3.4. Locking Protocols
      • 3.4.1. Priority Inversion
      • 3.4.2. Immediate Ceiling Priority Protocol (ICPP)
      • 3.4.3. Priority Inheritance Protocol
      • 3.4.4. Multiprocessor Resource Sharing Protocol (MrsP)
      • 3.4.5. O(m) Independence-Preserving Protocol (OMIP)
    • 3.5. Thread Queues
    • 3.6. Time
    • 3.7. Timer and Timeouts
    • 3.8. Memory Management
  • 4. RTEMS Data Types
    • 4.1. Introduction
    • 4.2. List of Data Types
  • 5. Scheduling Concepts
    • 5.1. Introduction
      • 5.1.1. Scheduling Algorithms
      • 5.1.2. Priority Scheduling
    • 5.2. Uniprocessor Schedulers
      • 5.2.1. Deterministic Priority Scheduler
      • 5.2.2. Simple Priority Scheduler
      • 5.2.3. Earliest Deadline First Scheduler
      • 5.2.4. Constant Bandwidth Server Scheduling (CBS)
    • 5.3. SMP Schedulers
      • 5.3.1. Earliest Deadline First SMP Scheduler
      • 5.3.2. Deterministic Priority SMP Scheduler
      • 5.3.3. Simple Priority SMP Scheduler
      • 5.3.4. Arbitrary Processor Affinity Priority SMP Scheduler
    • 5.4. Scheduling Modification Mechanisms
      • 5.4.1. Task Priority and Scheduling
      • 5.4.2. Preemption
      • 5.4.3. Timeslicing
      • 5.4.4. Manual Round-Robin
    • 5.5. Dispatching Tasks
    • 5.6. Task State Transitions
    • 5.7. Directives
      • 5.7.1. SCHEDULER_IDENT - Get ID of a scheduler
      • 5.7.2. SCHEDULER_IDENT_BY_PROCESSOR - Get ID of a scheduler by processor
      • 5.7.3. SCHEDULER_IDENT_BY_PROCESSOR_SET - Get ID of a scheduler by processor set
      • 5.7.4. SCHEDULER_GET_MAXIMUM_PRIORITY - Get maximum task priority of a scheduler
      • 5.7.5. SCHEDULER_MAP_PRIORITY_TO_POSIX - Map task priority to POSIX thread prority
      • 5.7.6. SCHEDULER_MAP_PRIORITY_FROM_POSIX - Map POSIX thread prority to task priority
      • 5.7.7. SCHEDULER_GET_PROCESSOR - Get current processor index
      • 5.7.8. SCHEDULER_GET_PROCESSOR_MAXIMUM - Get processor maximum
      • 5.7.9. SCHEDULER_GET_PROCESSOR_SET - Get processor set of a scheduler
      • 5.7.10. SCHEDULER_ADD_PROCESSOR - Add processor to a scheduler
      • 5.7.11. SCHEDULER_REMOVE_PROCESSOR - Remove processor from a scheduler
  • 6. Initialization Manager
    • 6.1. Introduction
    • 6.2. Background
      • 6.2.1. Initialization Tasks
      • 6.2.2. The Idle Task
      • 6.2.3. Initialization Manager Failure
    • 6.3. Operations
      • 6.3.1. Initializing RTEMS
      • 6.3.2. Global Construction
    • 6.4. Directives
      • 6.4.1. INITIALIZE_EXECUTIVE - Initialize RTEMS
  • 7. Task Manager
    • 7.1. Introduction
    • 7.2. Background
      • 7.2.1. Task Definition
      • 7.2.2. Task Control Block
      • 7.2.3. Task Memory
      • 7.2.4. Task Name
      • 7.2.5. Task States
      • 7.2.6. Task Priority
      • 7.2.7. Task Mode
      • 7.2.8. Accessing Task Arguments
      • 7.2.9. Floating Point Considerations
      • 7.2.10. Building a Task Attribute Set
      • 7.2.11. Building a Mode and Mask
    • 7.3. Operations
      • 7.3.1. Creating Tasks
      • 7.3.2. Obtaining Task IDs
      • 7.3.3. Starting and Restarting Tasks
      • 7.3.4. Suspending and Resuming Tasks
      • 7.3.5. Delaying the Currently Executing Task
      • 7.3.6. Changing Task Priority
      • 7.3.7. Changing Task Mode
      • 7.3.8. Task Deletion
      • 7.3.9. Setting Affinity to a Single Processor
      • 7.3.10. Transition Advice for Removed Notepads
      • 7.3.11. Transition Advice for Removed Task Variables
    • 7.4. Directives
      • 7.4.1. TASK_CREATE - Create a task
      • 7.4.2. TASK_IDENT - Get ID of a task
      • 7.4.3. TASK_SELF - Obtain ID of caller
      • 7.4.4. TASK_START - Start a task
      • 7.4.5. TASK_RESTART - Restart a task
      • 7.4.6. TASK_DELETE - Delete a task
      • 7.4.7. TASK_EXIT - Delete the calling task
      • 7.4.8. TASK_SUSPEND - Suspend a task
      • 7.4.9. TASK_RESUME - Resume a task
      • 7.4.10. TASK_IS_SUSPENDED - Determine if a task is Suspended
      • 7.4.11. TASK_SET_PRIORITY - Set task priority
      • 7.4.12. TASK_GET_PRIORITY - Get task priority
      • 7.4.13. TASK_MODE - Change the current task mode
      • 7.4.14. TASK_WAKE_AFTER - Wake up after interval
      • 7.4.15. TASK_WAKE_WHEN - Wake up when specified
      • 7.4.16. TASK_GET_SCHEDULER - Get scheduler of a task
      • 7.4.17. TASK_SET_SCHEDULER - Set scheduler of a task
      • 7.4.18. TASK_GET_AFFINITY - Get task processor affinity
      • 7.4.19. TASK_SET_AFFINITY - Set task processor affinity
      • 7.4.20. TASK_ITERATE - Iterate Over Tasks
    • 7.5. Deprecated Directives
      • 7.5.1. ITERATE_OVER_ALL_THREADS - Iterate Over Tasks
    • 7.6. Removed Directives
      • 7.6.1. TASK_GET_NOTE - Get task notepad entry
      • 7.6.2. TASK_SET_NOTE - Set task notepad entry
      • 7.6.3. TASK_VARIABLE_ADD - Associate per task variable
      • 7.6.4. TASK_VARIABLE_GET - Obtain value of a per task variable
      • 7.6.5. TASK_VARIABLE_DELETE - Remove per task variable
  • 8. Interrupt Manager
    • 8.1. Introduction
    • 8.2. Background
      • 8.2.1. Processing an Interrupt
      • 8.2.2. RTEMS Interrupt Levels
      • 8.2.3. Disabling of Interrupts by RTEMS
    • 8.3. Operations
      • 8.3.1. Establishing an ISR
      • 8.3.2. Directives Allowed from an ISR
    • 8.4. Directives
      • 8.4.1. INTERRUPT_CATCH - Establish an ISR
      • 8.4.2. INTERRUPT_DISABLE - Disable Interrupts
      • 8.4.3. INTERRUPT_ENABLE - Restore Interrupt Level
      • 8.4.4. INTERRUPT_FLASH - Flash Interrupts
      • 8.4.5. INTERRUPT_LOCAL_DISABLE - Disable Interrupts on Current Processor
      • 8.4.6. INTERRUPT_LOCAL_ENABLE - Restore Interrupt Level on Current Processor
      • 8.4.7. INTERRUPT_LOCK_INITIALIZE - Initialize an ISR Lock
      • 8.4.8. INTERRUPT_LOCK_ACQUIRE - Acquire an ISR Lock
      • 8.4.9. INTERRUPT_LOCK_RELEASE - Release an ISR Lock
      • 8.4.10. INTERRUPT_LOCK_ACQUIRE_ISR - Acquire an ISR Lock from ISR
      • 8.4.11. INTERRUPT_LOCK_RELEASE_ISR - Release an ISR Lock from ISR
      • 8.4.12. INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress
  • 9. Clock Manager
    • 9.1. Introduction
    • 9.2. Background
      • 9.2.1. Required Support
      • 9.2.2. Time and Date Data Structures
      • 9.2.3. Clock Tick and Timeslicing
      • 9.2.4. Delays
      • 9.2.5. Timeouts
    • 9.3. Operations
      • 9.3.1. Announcing a Tick
      • 9.3.2. Setting the Time
      • 9.3.3. Obtaining the Time
      • 9.3.4. Transition Advice for the Removed rtems_clock_get()
    • 9.4. Directives
      • 9.4.1. CLOCK_SET - Set date and time
      • 9.4.2. CLOCK_GET_TOD - Get date and time in TOD format
      • 9.4.3. CLOCK_GET_TOD_TIMEVAL - Get date and time in timeval format
      • 9.4.4. CLOCK_GET_SECONDS_SINCE_EPOCH - Get seconds since epoch
      • 9.4.5. CLOCK_GET_TICKS_PER_SECOND - Get ticks per second
      • 9.4.6. CLOCK_GET_TICKS_SINCE_BOOT - Get current ticks counter value
      • 9.4.7. CLOCK_TICK_LATER - Get tick value in the future
      • 9.4.8. CLOCK_TICK_LATER_USEC - Get tick value in the future in microseconds
      • 9.4.9. CLOCK_TICK_BEFORE - Is tick value is before a point in time
      • 9.4.10. CLOCK_GET_UPTIME - Get the time since boot
      • 9.4.11. CLOCK_GET_UPTIME_TIMEVAL - Get the time since boot in timeval format
      • 9.4.12. CLOCK_GET_UPTIME_SECONDS - Get the seconds since boot
      • 9.4.13. CLOCK_GET_UPTIME_NANOSECONDS - Get the nanoseconds since boot
    • 9.5. Removed Directives
      • 9.5.1. CLOCK_GET - Get date and time information
  • 10. Timer Manager
    • 10.1. Introduction
    • 10.2. Background
      • 10.2.1. Required Support
      • 10.2.2. Timers
      • 10.2.3. Timer Server
      • 10.2.4. Timer Service Routines
    • 10.3. Operations
      • 10.3.1. Creating a Timer
      • 10.3.2. Obtaining Timer IDs
      • 10.3.3. Initiating an Interval Timer
      • 10.3.4. Initiating a Time of Day Timer
      • 10.3.5. Canceling a Timer
      • 10.3.6. Resetting a Timer
      • 10.3.7. Initiating the Timer Server
      • 10.3.8. Deleting a Timer
    • 10.4. Directives
      • 10.4.1. TIMER_CREATE - Create a timer
      • 10.4.2. TIMER_IDENT - Get ID of a timer
      • 10.4.3. TIMER_CANCEL - Cancel a timer
      • 10.4.4. TIMER_DELETE - Delete a timer
      • 10.4.5. TIMER_FIRE_AFTER - Fire timer after interval
      • 10.4.6. TIMER_FIRE_WHEN - Fire timer when specified
      • 10.4.7. TIMER_INITIATE_SERVER - Initiate server for task-based timers
      • 10.4.8. TIMER_SERVER_FIRE_AFTER - Fire task-based timer after interval
      • 10.4.9. TIMER_SERVER_FIRE_WHEN - Fire task-based timer when specified
      • 10.4.10. TIMER_RESET - Reset an interval timer
  • 11. Rate Monotonic Manager
    • 11.1. Introduction
    • 11.2. Background
      • 11.2.1. Rate Monotonic Manager Required Support
      • 11.2.2. Period Statistics
      • 11.2.3. Periodicity Definitions
      • 11.2.4. Rate Monotonic Scheduling Algorithm
      • 11.2.5. Schedulability Analysis
        • 11.2.5.1. Assumptions
        • 11.2.5.2. Processor Utilization Rule
        • 11.2.5.3. Processor Utilization Rule Example
        • 11.2.5.4. First Deadline Rule
        • 11.2.5.5. First Deadline Rule Example
        • 11.2.5.6. Relaxation of Assumptions
    • 11.3. Operations
      • 11.3.1. Creating a Rate Monotonic Period
      • 11.3.2. Manipulating a Period
      • 11.3.3. Obtaining the Status of a Period
      • 11.3.4. Canceling a Period
      • 11.3.5. Deleting a Rate Monotonic Period
      • 11.3.6. Examples
      • 11.3.7. Simple Periodic Task
      • 11.3.8. Task with Multiple Periods
    • 11.4. Directives
      • 11.4.1. RATE_MONOTONIC_CREATE - Create a rate monotonic period
      • 11.4.2. RATE_MONOTONIC_IDENT - Get ID of a period
      • 11.4.3. RATE_MONOTONIC_CANCEL - Cancel a period
      • 11.4.4. RATE_MONOTONIC_DELETE - Delete a rate monotonic period
      • 11.4.5. RATE_MONOTONIC_PERIOD - Conclude current/Start next period
      • 11.4.6. RATE_MONOTONIC_GET_STATUS - Obtain status from a period
      • 11.4.7. RATE_MONOTONIC_GET_STATISTICS - Obtain statistics from a period
      • 11.4.8. RATE_MONOTONIC_RESET_STATISTICS - Reset statistics for a period
      • 11.4.9. RATE_MONOTONIC_RESET_ALL_STATISTICS - Reset statistics for all periods
      • 11.4.10. RATE_MONOTONIC_REPORT_STATISTICS - Print period statistics report
  • 12. Semaphore Manager
    • 12.1. Introduction
    • 12.2. Background
      • 12.2.1. Nested Resource Access
      • 12.2.2. Priority Inheritance
      • 12.2.3. Priority Ceiling
      • 12.2.4. Multiprocessor Resource Sharing Protocol
      • 12.2.5. Building a Semaphore Attribute Set
      • 12.2.6. Building a SEMAPHORE_OBTAIN Option Set
    • 12.3. Operations
      • 12.3.1. Creating a Semaphore
      • 12.3.2. Obtaining Semaphore IDs
      • 12.3.3. Acquiring a Semaphore
      • 12.3.4. Releasing a Semaphore
      • 12.3.5. Deleting a Semaphore
    • 12.4. Directives
      • 12.4.1. SEMAPHORE_CREATE - Create a semaphore
      • 12.4.2. SEMAPHORE_IDENT - Get ID of a semaphore
      • 12.4.3. SEMAPHORE_DELETE - Delete a semaphore
      • 12.4.4. SEMAPHORE_OBTAIN - Acquire a semaphore
      • 12.4.5. SEMAPHORE_RELEASE - Release a semaphore
      • 12.4.6. SEMAPHORE_FLUSH - Unblock all tasks waiting on a semaphore
      • 12.4.7. SEMAPHORE_SET_PRIORITY - Set priority by scheduler for a semaphore
  • 13. Barrier Manager
    • 13.1. Introduction
    • 13.2. Background
      • 13.2.1. Automatic Versus Manual Barriers
      • 13.2.2. Building a Barrier Attribute Set
    • 13.3. Operations
      • 13.3.1. Creating a Barrier
      • 13.3.2. Obtaining Barrier IDs
      • 13.3.3. Waiting at a Barrier
      • 13.3.4. Releasing a Barrier
      • 13.3.5. Deleting a Barrier
    • 13.4. Directives
      • 13.4.1. BARRIER_CREATE - Create a barrier
      • 13.4.2. BARRIER_IDENT - Get ID of a barrier
      • 13.4.3. BARRIER_DELETE - Delete a barrier
      • 13.4.4. BARRIER_WAIT - Wait at a barrier
      • 13.4.5. BARRIER_RELEASE - Release a barrier
  • 14. Message Manager
    • 14.1. Introduction
    • 14.2. Background
      • 14.2.1. Messages
      • 14.2.2. Message Queues
      • 14.2.3. Building a Message Queue Attribute Set
      • 14.2.4. Building a MESSAGE_QUEUE_RECEIVE Option Set
    • 14.3. Operations
      • 14.3.1. Creating a Message Queue
      • 14.3.2. Obtaining Message Queue IDs
      • 14.3.3. Receiving a Message
      • 14.3.4. Sending a Message
      • 14.3.5. Broadcasting a Message
      • 14.3.6. Deleting a Message Queue
    • 14.4. Directives
      • 14.4.1. MESSAGE_QUEUE_CREATE - Create a queue
      • 14.4.2. MESSAGE_QUEUE_IDENT - Get ID of a queue
      • 14.4.3. MESSAGE_QUEUE_DELETE - Delete a queue
      • 14.4.4. MESSAGE_QUEUE_SEND - Put message at rear of a queue
      • 14.4.5. MESSAGE_QUEUE_URGENT - Put message at front of a queue
      • 14.4.6. MESSAGE_QUEUE_BROADCAST - Broadcast N messages to a queue
      • 14.4.7. MESSAGE_QUEUE_RECEIVE - Receive message from a queue
      • 14.4.8. MESSAGE_QUEUE_GET_NUMBER_PENDING - Get number of messages pending on a queue
      • 14.4.9. MESSAGE_QUEUE_FLUSH - Flush all messages on a queue
  • 15. Event Manager
    • 15.1. Introduction
    • 15.2. Background
      • 15.2.1. Event Sets
      • 15.2.2. Building an Event Set or Condition
      • 15.2.3. Building an EVENT_RECEIVE Option Set
    • 15.3. Operations
      • 15.3.1. Sending an Event Set
      • 15.3.2. Receiving an Event Set
      • 15.3.3. Determining the Pending Event Set
      • 15.3.4. Receiving all Pending Events
    • 15.4. Directives
      • 15.4.1. EVENT_SEND - Send event set to a task
      • 15.4.2. EVENT_RECEIVE - Receive event condition
  • 16. Signal Manager
    • 16.1. Introduction
    • 16.2. Background
      • 16.2.1. Signal Manager Definitions
      • 16.2.2. A Comparison of ASRs and ISRs
      • 16.2.3. Building a Signal Set
      • 16.2.4. Building an ASR Mode
    • 16.3. Operations
      • 16.3.1. Establishing an ASR
      • 16.3.2. Sending a Signal Set
      • 16.3.3. Processing an ASR
    • 16.4. Directives
      • 16.4.1. SIGNAL_CATCH - Establish an ASR
      • 16.4.2. SIGNAL_SEND - Send signal set to a task
  • 17. Partition Manager
    • 17.1. Introduction
    • 17.2. Background
      • 17.2.1. Partition Manager Definitions
      • 17.2.2. Building a Partition Attribute Set
    • 17.3. Operations
      • 17.3.1. Creating a Partition
      • 17.3.2. Obtaining Partition IDs
      • 17.3.3. Acquiring a Buffer
      • 17.3.4. Releasing a Buffer
      • 17.3.5. Deleting a Partition
    • 17.4. Directives
      • 17.4.1. PARTITION_CREATE - Create a partition
      • 17.4.2. PARTITION_IDENT - Get ID of a partition
      • 17.4.3. PARTITION_DELETE - Delete a partition
      • 17.4.4. PARTITION_GET_BUFFER - Get buffer from a partition
      • 17.4.5. PARTITION_RETURN_BUFFER - Return buffer to a partition
  • 18. Region Manager
    • 18.1. Introduction
    • 18.2. Background
      • 18.2.1. Region Manager Definitions
      • 18.2.2. Building an Attribute Set
      • 18.2.3. Building an Option Set
    • 18.3. Operations
      • 18.3.1. Creating a Region
      • 18.3.2. Obtaining Region IDs
      • 18.3.3. Adding Memory to a Region
      • 18.3.4. Acquiring a Segment
      • 18.3.5. Releasing a Segment
      • 18.3.6. Obtaining the Size of a Segment
      • 18.3.7. Changing the Size of a Segment
      • 18.3.8. Deleting a Region
    • 18.4. Directives
      • 18.4.1. REGION_CREATE - Create a region
      • 18.4.2. REGION_IDENT - Get ID of a region
      • 18.4.3. REGION_DELETE - Delete a region
      • 18.4.4. REGION_EXTEND - Add memory to a region
      • 18.4.5. REGION_GET_SEGMENT - Get segment from a region
      • 18.4.6. REGION_RETURN_SEGMENT - Return segment to a region
      • 18.4.7. REGION_GET_SEGMENT_SIZE - Obtain size of a segment
      • 18.4.8. REGION_RESIZE_SEGMENT - Change size of a segment
      • 18.4.9. REGION_GET_INFORMATION - Get region information
      • 18.4.10. REGION_GET_FREE_INFORMATION - Get region free information
  • 19. Dual-Ported Memory Manager
    • 19.1. Introduction
    • 19.2. Background
    • 19.3. Operations
      • 19.3.1. Creating a Port
      • 19.3.2. Obtaining Port IDs
      • 19.3.3. Converting an Address
      • 19.3.4. Deleting a DPMA Port
    • 19.4. Directives
      • 19.4.1. PORT_CREATE - Create a port
      • 19.4.2. PORT_IDENT - Get ID of a port
      • 19.4.3. PORT_DELETE - Delete a port
      • 19.4.4. PORT_EXTERNAL_TO_INTERNAL - Convert external to internal address
      • 19.4.5. PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address
  • 20. I/O Manager
    • 20.1. Introduction
    • 20.2. Background
      • 20.2.1. Device Driver Table
      • 20.2.2. Major and Minor Device Numbers
      • 20.2.3. Device Names
      • 20.2.4. Device Driver Environment
      • 20.2.5. Runtime Driver Registration
      • 20.2.6. Device Driver Interface
      • 20.2.7. Device Driver Initialization
    • 20.3. Operations
      • 20.3.1. Register and Lookup Name
      • 20.3.2. Accessing an Device Driver
    • 20.4. Directives
      • 20.4.1. IO_REGISTER_DRIVER - Register a device driver
      • 20.4.2. IO_UNREGISTER_DRIVER - Unregister a device driver
      • 20.4.3. IO_INITIALIZE - Initialize a device driver
      • 20.4.4. IO_REGISTER_NAME - Register a device
      • 20.4.5. IO_LOOKUP_NAME - Lookup a device
      • 20.4.6. IO_OPEN - Open a device
      • 20.4.7. IO_CLOSE - Close a device
      • 20.4.8. IO_READ - Read from a device
      • 20.4.9. IO_WRITE - Write to a device
      • 20.4.10. IO_CONTROL - Special device services
  • 21. Fatal Error Manager
    • 21.1. Introduction
    • 21.2. Background
      • 21.2.1. Overview
      • 21.2.2. Fatal Sources
      • 21.2.3. Internal Error Codes
    • 21.3. Operations
      • 21.3.1. Announcing a Fatal Error
    • 21.4. Directives
      • 21.4.1. FATAL - Invoke the fatal error handler
      • 21.4.2. PANIC - Print a message and invoke the fatal error handler
      • 21.4.3. SHUTDOWN_EXECUTIVE - Shutdown RTEMS
      • 21.4.4. EXCEPTION_FRAME_PRINT - Prints the exception frame
      • 21.4.5. FATAL_SOURCE_TEXT - Returns a text for a fatal source
      • 21.4.6. INTERNAL_ERROR_TEXT - Returns a text for an internal error code
      • 21.4.7. FATAL_ERROR_OCCURRED - Invoke the fatal error handler (deprecated)
  • 22. Board Support Packages
    • 22.1. Introduction
    • 22.2. Reset and Initialization
      • 22.2.1. Interrupt Stack Requirements
      • 22.2.2. Processors with a Separate Interrupt Stack
      • 22.2.3. Processors Without a Separate Interrupt Stack
    • 22.3. Device Drivers
      • 22.3.1. Clock Tick Device Driver
    • 22.4. User Extensions
    • 22.5. Multiprocessor Communications Interface (MPCI)
      • 22.5.1. Tightly-Coupled Systems
      • 22.5.2. Loosely-Coupled Systems
      • 22.5.3. Systems with Mixed Coupling
      • 22.5.4. Heterogeneous Systems
  • 23. User Extensions Manager
    • 23.1. Introduction
    • 23.2. Background
      • 23.2.1. Extension Sets
      • 23.2.2. TCB Extension Area
      • 23.2.3. Order of Invocation
      • 23.2.4. Thread Create Extension
      • 23.2.5. Thread Start Extension
      • 23.2.6. Thread Restart Extension
      • 23.2.7. Thread Switch Extension
      • 23.2.8. Thread Begin Extension
      • 23.2.9. Thread Exitted Extension
      • 23.2.10. Thread Termination Extension
      • 23.2.11. Thread Delete Extension
      • 23.2.12. Fatal Error Extension
    • 23.3. Directives
      • 23.3.1. EXTENSION_CREATE - Create a extension set
      • 23.3.2. EXTENSION_IDENT - Get ID of a extension set
      • 23.3.3. EXTENSION_DELETE - Delete a extension set
  • 24. Configuring a System
    • 24.1. Introduction
    • 24.2. Default Value Selection Philosophy
    • 24.3. Sizing the RTEMS Workspace
    • 24.4. Potential Issues with RTEMS Workspace Size Estimation
    • 24.5. Configuration Example
    • 24.6. Unlimited Objects
      • 24.6.1. Unlimited Objects by Class
      • 24.6.2. Unlimited Objects by Default
    • 24.7. General System Configuration
      • 24.7.1. CONFIGURE_DIRTY_MEMORY
      • 24.7.2. CONFIGURE_DISABLE_NEWLIB_REENTRANCY
      • 24.7.3. CONFIGURE_EXECUTIVE_RAM_SIZE
      • 24.7.4. CONFIGURE_EXTRA_TASK_STACKS
      • 24.7.5. CONFIGURE_INITIAL_EXTENSIONS
      • 24.7.6. CONFIGURE_INTERRUPT_STACK_SIZE
      • 24.7.7. CONFIGURE_MALLOC_DIRTY
      • 24.7.8. CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
      • 24.7.9. CONFIGURE_MAXIMUM_PROCESSORS
      • 24.7.10. CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
      • 24.7.11. CONFIGURE_MEMORY_OVERHEAD
      • 24.7.12. CONFIGURE_MESSAGE_BUFFER_MEMORY
      • 24.7.13. CONFIGURE_MICROSECONDS_PER_TICK
      • 24.7.14. CONFIGURE_MINIMUM_TASK_STACK_SIZE
      • 24.7.15. CONFIGURE_STACK_CHECKER_ENABLED
      • 24.7.16. CONFIGURE_TICKS_PER_TIMESLICE
      • 24.7.17. CONFIGURE_UNIFIED_WORK_AREAS
      • 24.7.18. CONFIGURE_UNLIMITED_ALLOCATION_SIZE
      • 24.7.19. CONFIGURE_UNLIMITED_OBJECTS
      • 24.7.20. CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
      • 24.7.21. CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
    • 24.8. Device Driver Configuration
      • 24.8.1. CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
      • 24.8.2. CONFIGURE_APPLICATION_EXTRA_DRIVERS
      • 24.8.3. CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
      • 24.8.4. CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
      • 24.8.5. CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
      • 24.8.6. CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
      • 24.8.7. CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
      • 24.8.8. CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
      • 24.8.9. CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
      • 24.8.10. CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
      • 24.8.11. CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
      • 24.8.12. CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
      • 24.8.13. CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
      • 24.8.14. CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
      • 24.8.15. CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
      • 24.8.16. CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
      • 24.8.17. CONFIGURE_ATA_DRIVER_TASK_PRIORITY
      • 24.8.18. CONFIGURE_MAXIMUM_DRIVERS
    • 24.9. Classic API Configuration
      • 24.9.1. CONFIGURE_MAXIMUM_BARRIERS
      • 24.9.2. CONFIGURE_MAXIMUM_MESSAGE_QUEUES
      • 24.9.3. CONFIGURE_MAXIMUM_PARTITIONS
      • 24.9.4. CONFIGURE_MAXIMUM_PERIODS
      • 24.9.5. CONFIGURE_MAXIMUM_PORTS
      • 24.9.6. CONFIGURE_MAXIMUM_REGIONS
      • 24.9.7. CONFIGURE_MAXIMUM_SEMAPHORES
      • 24.9.8. CONFIGURE_MAXIMUM_TASKS
      • 24.9.9. CONFIGURE_MAXIMUM_TIMERS
      • 24.9.10. CONFIGURE_MAXIMUM_USER_EXTENSIONS
    • 24.10. Classic API Initialization Task Configuration
      • 24.10.1. CONFIGURE_INIT_TASK_ARGUMENTS
      • 24.10.2. CONFIGURE_INIT_TASK_ATTRIBUTES
      • 24.10.3. CONFIGURE_INIT_TASK_ENTRY_POINT
      • 24.10.4. CONFIGURE_INIT_TASK_INITIAL_MODES
      • 24.10.5. CONFIGURE_INIT_TASK_NAME
      • 24.10.6. CONFIGURE_INIT_TASK_PRIORITY
      • 24.10.7. CONFIGURE_INIT_TASK_STACK_SIZE
      • 24.10.8. CONFIGURE_RTEMS_INIT_TASKS_TABLE
    • 24.11. POSIX API Configuration
      • 24.11.1. CONFIGURE_MAXIMUM_POSIX_KEYS
      • 24.11.2. CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
      • 24.11.3. CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
      • 24.11.4. CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
      • 24.11.5. CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
      • 24.11.6. CONFIGURE_MAXIMUM_POSIX_SHMS
      • 24.11.7. CONFIGURE_MAXIMUM_POSIX_THREADS
      • 24.11.8. CONFIGURE_MAXIMUM_POSIX_TIMERS
      • 24.11.9. CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
    • 24.12. POSIX Initialization Thread Configuration
      • 24.12.1. CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
      • 24.12.2. CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
      • 24.12.3. CONFIGURE_POSIX_INIT_THREAD_TABLE
    • 24.13. Event Recording Configuration
      • 24.13.1. CONFIGURE_RECORD_EXTENSIONS_ENABLED
      • 24.13.2. CONFIGURE_RECORD_FATAL_DUMP_BASE64
      • 24.13.3. CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
      • 24.13.4. CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
    • 24.14. Filesystem Configuration
      • 24.14.1. CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
      • 24.14.2. CONFIGURE_FILESYSTEM_ALL
      • 24.14.3. CONFIGURE_FILESYSTEM_DOSFS
      • 24.14.4. CONFIGURE_FILESYSTEM_FTPFS
      • 24.14.5. CONFIGURE_FILESYSTEM_IMFS
      • 24.14.6. CONFIGURE_FILESYSTEM_JFFS2
      • 24.14.7. CONFIGURE_FILESYSTEM_NFS
      • 24.14.8. CONFIGURE_FILESYSTEM_RFS
      • 24.14.9. CONFIGURE_FILESYSTEM_TFTPFS
      • 24.14.10. CONFIGURE_IMFS_DISABLE_CHMOD
      • 24.14.11. CONFIGURE_IMFS_DISABLE_CHOWN
      • 24.14.12. CONFIGURE_IMFS_DISABLE_LINK
      • 24.14.13. CONFIGURE_IMFS_DISABLE_MKNOD
      • 24.14.14. CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
      • 24.14.15. CONFIGURE_IMFS_DISABLE_MKNOD_FILE
      • 24.14.16. CONFIGURE_IMFS_DISABLE_MOUNT
      • 24.14.17. CONFIGURE_IMFS_DISABLE_READDIR
      • 24.14.18. CONFIGURE_IMFS_DISABLE_READLINK
      • 24.14.19. CONFIGURE_IMFS_DISABLE_RENAME
      • 24.14.20. CONFIGURE_IMFS_DISABLE_RMNOD
      • 24.14.21. CONFIGURE_IMFS_DISABLE_SYMLINK
      • 24.14.22. CONFIGURE_IMFS_DISABLE_UNMOUNT
      • 24.14.23. CONFIGURE_IMFS_DISABLE_UTIME
      • 24.14.24. CONFIGURE_IMFS_ENABLE_MKFIFO
      • 24.14.25. CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
      • 24.14.26. CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
      • 24.14.27. CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
    • 24.15. Block Device Cache Configuration
      • 24.15.1. CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
      • 24.15.2. CONFIGURE_BDBUF_BUFFER_MAX_SIZE
      • 24.15.3. CONFIGURE_BDBUF_BUFFER_MIN_SIZE
      • 24.15.4. CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
      • 24.15.5. CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
      • 24.15.6. CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
      • 24.15.7. CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
      • 24.15.8. CONFIGURE_BDBUF_TASK_STACK_SIZE
      • 24.15.9. CONFIGURE_SWAPOUT_BLOCK_HOLD
      • 24.15.10. CONFIGURE_SWAPOUT_SWAP_PERIOD
      • 24.15.11. CONFIGURE_SWAPOUT_TASK_PRIORITY
      • 24.15.12. CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
      • 24.15.13. CONFIGURE_SWAPOUT_WORKER_TASKS
    • 24.16. Task Stack Allocator Configuration
      • 24.16.1. CONFIGURE_TASK_STACK_ALLOCATOR
      • 24.16.2. CONFIGURE_TASK_STACK_ALLOCATOR_INIT
      • 24.16.3. CONFIGURE_TASK_STACK_DEALLOCATOR
      • 24.16.4. CONFIGURE_TASK_STACK_FROM_ALLOCATOR
      • 24.16.5. CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
      • 24.16.6. CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE
    • 24.17. Idle Task Configuration
      • 24.17.1. CONFIGURE_IDLE_TASK_BODY
      • 24.17.2. CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
      • 24.17.3. CONFIGURE_IDLE_TASK_STACK_SIZE
    • 24.18. General Scheduler Configuration
      • 24.18.1. CONFIGURE_CBS_MAXIMUM_SERVERS
      • 24.18.2. CONFIGURE_MAXIMUM_PRIORITY
      • 24.18.3. CONFIGURE_SCHEDULER_ASSIGNMENTS
      • 24.18.4. CONFIGURE_SCHEDULER_CBS
      • 24.18.5. CONFIGURE_SCHEDULER_EDF
      • 24.18.6. CONFIGURE_SCHEDULER_EDF_SMP
      • 24.18.7. CONFIGURE_SCHEDULER_NAME
      • 24.18.8. CONFIGURE_SCHEDULER_PRIORITY
      • 24.18.9. CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
      • 24.18.10. CONFIGURE_SCHEDULER_PRIORITY_SMP
      • 24.18.11. CONFIGURE_SCHEDULER_SIMPLE
      • 24.18.12. CONFIGURE_SCHEDULER_SIMPLE_SMP
      • 24.18.13. CONFIGURE_SCHEDULER_STRONG_APA
      • 24.18.14. CONFIGURE_SCHEDULER_USER
    • 24.19. Clustered Scheduler Configuration
      • 24.19.1. Configuration Step 1 - Scheduler Algorithms
      • 24.19.2. Configuration Step 2 - Schedulers
      • 24.19.3. Configuration Step 3 - Scheduler Table
      • 24.19.4. Configuration Step 4 - Processor to Scheduler Assignment
      • 24.19.5. Configuration Example
      • 24.19.6. Configuration Errors
    • 24.20. BSP Related Configuration Options
      • 24.20.1. BSP_IDLE_TASK_BODY
      • 24.20.2. BSP_IDLE_TASK_STACK_SIZE
      • 24.20.3. BSP_INITIAL_EXTENSION
      • 24.20.4. BSP_INTERRUPT_STACK_SIZE
      • 24.20.5. CONFIGURE_BSP_PREREQUISITE_DRIVERS
      • 24.20.6. CONFIGURE_DISABLE_BSP_SETTINGS
      • 24.20.7. CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
    • 24.21. Multiprocessing Configuration
      • 24.21.1. CONFIGURE_MP_APPLICATION
      • 24.21.2. CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
      • 24.21.3. CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
      • 24.21.4. CONFIGURE_MP_MAXIMUM_NODES
      • 24.21.5. CONFIGURE_MP_MAXIMUM_PROXIES
      • 24.21.6. CONFIGURE_MP_MPCI_TABLE_POINTER
      • 24.21.7. CONFIGURE_MP_NODE_NUMBER
    • 24.22. PCI Library Configuration
    • 24.23. Ada Configuration
    • 24.24. Obsolete Configuration Options
      • 24.24.1. CONFIGURE_BDBUF_BUFFER_COUNT
      • 24.24.2. CONFIGURE_BDBUF_BUFFER_SIZE
      • 24.24.3. CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
      • 24.24.4. CONFIGURE_ENABLE_GO
      • 24.24.5. CONFIGURE_GNAT_RTEMS
      • 24.24.6. CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
      • 24.24.7. CONFIGURE_HAS_OWN_BDBUF_TABLE
      • 24.24.8. CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
      • 24.24.9. CONFIGURE_HAS_OWN_INIT_TASK_TABLE
      • 24.24.10. CONFIGURE_HAS_OWN_MOUNT_TABLE
      • 24.24.11. CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
      • 24.24.12. CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
      • 24.24.13. CONFIGURE_MAXIMUM_ADA_TASKS
      • 24.24.14. CONFIGURE_MAXIMUM_DEVICES
      • 24.24.15. CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
      • 24.24.16. CONFIGURE_MAXIMUM_GO_CHANNELS
      • 24.24.17. CONFIGURE_MAXIMUM_GOROUTINES
      • 24.24.18. CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
      • 24.24.19. CONFIGURE_NUMBER_OF_TERMIOS_PORTS
      • 24.24.20. CONFIGURE_MAXIMUM_POSIX_BARRIERS
      • 24.24.21. CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
      • 24.24.22. CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
      • 24.24.23. CONFIGURE_MAXIMUM_POSIX_MUTEXES
      • 24.24.24. CONFIGURE_MAXIMUM_POSIX_RWLOCKS
      • 24.24.25. CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
      • 24.24.26. CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
      • 24.24.27. CONFIGURE_SMP_APPLICATION
      • 24.24.28. CONFIGURE_SMP_MAXIMUM_PROCESSORS
      • 24.24.29. CONFIGURE_TERMIOS_DISABLED
  • 25. Self-Contained Objects
    • 25.1. Introduction
    • 25.2. RTEMS Thread API
    • 25.3. Mutual Exclusion
      • 25.3.1. Static mutex initialization
      • 25.3.2. Run-time mutex initialization
      • 25.3.3. Lock the mutex
      • 25.3.4. Unlock the mutex
      • 25.3.5. Set mutex name
      • 25.3.6. Get mutex name
      • 25.3.7. Mutex destruction
    • 25.4. Condition Variables
      • 25.4.1. Static condition variable initialization
      • 25.4.2. Run-time condition variable initialization
      • 25.4.3. Wait for condition signal
      • 25.4.4. Signals a condition change
      • 25.4.5. Broadcasts a condition change
      • 25.4.6. Set condition variable name
      • 25.4.7. Get condition variable name
      • 25.4.8. Condition variable destruction
    • 25.5. Counting Semaphores
      • 25.5.1. Static counting semaphore initialization
      • 25.5.2. Run-time counting semaphore initialization
      • 25.5.3. Wait for a counting semaphore
      • 25.5.4. Post a counting semaphore
      • 25.5.5. Set counting semaphore name
      • 25.5.6. Get counting semaphore name
      • 25.5.7. Counting semaphore destruction
    • 25.6. Binary Semaphores
      • 25.6.1. Static binary semaphore initialization
      • 25.6.2. Run-time binary semaphore initialization
      • 25.6.3. Wait for a binary semaphore
      • 25.6.4. Wait for a binary semaphore with timeout in ticks
      • 25.6.5. Tries to wait for a binary semaphore
      • 25.6.6. Post a binary semaphore
      • 25.6.7. Set binary semaphore name
      • 25.6.8. Get binary semaphore name
      • 25.6.9. Binary semaphore destruction
    • 25.7. Threads
  • 26. Multiprocessing Manager
    • 26.1. Introduction
    • 26.2. Background
      • 26.2.1. Nodes
      • 26.2.2. Global Objects
      • 26.2.3. Global Object Table
      • 26.2.4. Remote Operations
      • 26.2.5. Proxies
      • 26.2.6. Multiprocessor Configuration Table
    • 26.3. Multiprocessor Communications Interface Layer
      • 26.3.1. INITIALIZATION
      • 26.3.2. GET_PACKET
      • 26.3.3. RETURN_PACKET
      • 26.3.4. RECEIVE_PACKET
      • 26.3.5. SEND_PACKET
      • 26.3.6. Supporting Heterogeneous Environments
    • 26.4. Operations
      • 26.4.1. Announcing a Packet
    • 26.5. Directives
      • 26.5.1. MULTIPROCESSING_ANNOUNCE - Announce the arrival of a packet
  • 27. Symmetric Multiprocessing (SMP)
    • 27.1. Introduction
    • 27.2. Background
      • 27.2.1. Application Configuration
      • 27.2.2. Examples
      • 27.2.3. Uniprocessor versus SMP Parallelism
      • 27.2.4. Task Affinity
      • 27.2.5. Task Migration
      • 27.2.6. Clustered Scheduling
      • 27.2.7. OpenMP
      • 27.2.8. Atomic Operations
    • 27.3. Application Issues
      • 27.3.1. Task variables
      • 27.3.2. Highest Priority Thread Never Walks Alone
      • 27.3.3. Disabling of Thread Preemption
      • 27.3.4. Disabling of Interrupts
      • 27.3.5. Interrupt Service Routines Execute in Parallel With Threads
      • 27.3.6. Timers Do Not Stop Immediately
      • 27.3.7. False Sharing of Cache Lines Due to Objects Table
    • 27.4. Implementation Details
      • 27.4.1. Low-Level Synchronization
      • 27.4.2. Internal Locking
      • 27.4.3. Profiling
      • 27.4.4. Scheduler Helping Protocol
      • 27.4.5. Thread Dispatch Details
      • 27.4.6. Per-Processor Data
      • 27.4.7. Thread Pinning
  • 28. PCI Library
    • 28.1. Introduction
    • 28.2. Background
      • 28.2.1. Software Components
      • 28.2.2. PCI Configuration
        • 28.2.2.1. RTEMS Configuration selection
        • 28.2.2.2. Auto Configuration
        • 28.2.2.3. Read Configuration
        • 28.2.2.4. Static Configuration
        • 28.2.2.5. Peripheral Configuration
      • 28.2.3. PCI Access
        • 28.2.3.1. Configuration space
        • 28.2.3.2. I/O space
        • 28.2.3.3. Registers over Memory space
        • 28.2.3.4. Access functions
        • 28.2.3.5. PCI address translation
      • 28.2.4. PCI Interrupt
      • 28.2.5. PCI Shell command
  • 29. Stack Bounds Checker
    • 29.1. Introduction
    • 29.2. Background
      • 29.2.1. Task Stack
      • 29.2.2. Execution
    • 29.3. Operations
      • 29.3.1. Initializing the Stack Bounds Checker
      • 29.3.2. Checking for Blown Task Stack
      • 29.3.3. Reporting Task Stack Usage
      • 29.3.4. When a Task Overflows the Stack
    • 29.4. Routines
      • 29.4.1. STACK_CHECKER_IS_BLOWN - Has Current Task Blown Its Stack
      • 29.4.2. STACK_CHECKER_REPORT_USAGE - Report Task Stack Usage
  • 30. CPU Usage Statistics
    • 30.1. Introduction
    • 30.2. Background
    • 30.3. Operations
      • 30.3.1. Report CPU Usage Statistics
      • 30.3.2. Reset CPU Usage Statistics
    • 30.4. Directives
      • 30.4.1. cpu_usage_report - Report CPU Usage Statistics
      • 30.4.2. cpu_usage_reset - Reset CPU Usage Statistics
  • 31. Object Services
    • 31.1. Introduction
    • 31.2. Background
      • 31.2.1. APIs
      • 31.2.2. Object Classes
      • 31.2.3. Object Names
    • 31.3. Operations
      • 31.3.1. Decomposing and Recomposing an Object Id
      • 31.3.2. Printing an Object Id
    • 31.4. Directives
      • 31.4.1. BUILD_NAME - Build object name from characters
      • 31.4.2. OBJECT_GET_CLASSIC_NAME - Lookup name from id
      • 31.4.3. OBJECT_GET_NAME - Obtain object name as string
      • 31.4.4. OBJECT_SET_NAME - Set object name
      • 31.4.5. OBJECT_ID_GET_API - Obtain API from Id
      • 31.4.6. OBJECT_ID_GET_CLASS - Obtain Class from Id
      • 31.4.7. OBJECT_ID_GET_NODE - Obtain Node from Id
      • 31.4.8. OBJECT_ID_GET_INDEX - Obtain Index from Id
      • 31.4.9. BUILD_ID - Build Object Id From Components
      • 31.4.10. OBJECT_ID_API_MINIMUM - Obtain Minimum API Value
      • 31.4.11. OBJECT_ID_API_MAXIMUM - Obtain Maximum API Value
      • 31.4.12. OBJECT_API_MINIMUM_CLASS - Obtain Minimum Class Value
      • 31.4.13. OBJECT_API_MAXIMUM_CLASS - Obtain Maximum Class Value
      • 31.4.14. OBJECT_ID_API_MINIMUM_CLASS - Obtain Minimum Class Value for an API
      • 31.4.15. OBJECT_ID_API_MAXIMUM_CLASS - Obtain Maximum Class Value for an API
      • 31.4.16. OBJECT_GET_API_NAME - Obtain API Name
      • 31.4.17. OBJECT_GET_API_CLASS_NAME - Obtain Class Name
      • 31.4.18. OBJECT_GET_CLASS_INFORMATION - Obtain Class Information
      • 31.4.19. OBJECT_GET_LOCAL_NODE - Obtain Local Node
  • 32. Chains
    • 32.1. Introduction
    • 32.2. Background
      • 32.2.1. Nodes
      • 32.2.2. Controls
    • 32.3. Operations
      • 32.3.1. Multi-threading
      • 32.3.2. Creating a Chain
      • 32.3.3. Iterating a Chain
    • 32.4. Directives
      • 32.4.1. Initialize Chain With Nodes
      • 32.4.2. Initialize Empty
      • 32.4.3. Is Null Node ?
      • 32.4.4. Head
      • 32.4.5. Tail
      • 32.4.6. Are Two Nodes Equal ?
      • 32.4.7. Is the Chain Empty
      • 32.4.8. Is this the First Node on the Chain ?
      • 32.4.9. Is this the Last Node on the Chain ?
      • 32.4.10. Does this Chain have only One Node ?
      • 32.4.11. Returns the node count of the chain (unprotected)
      • 32.4.12. Is this Node the Chain Head ?
      • 32.4.13. Is this Node the Chain Tail ?
      • 32.4.14. Extract a Node
      • 32.4.15. Extract a Node (unprotected)
      • 32.4.16. Get the First Node
      • 32.4.17. Get the First Node (unprotected)
      • 32.4.18. Insert a Node
      • 32.4.19. Insert a Node (unprotected)
      • 32.4.20. Append a Node
      • 32.4.21. Append a Node (unprotected)
      • 32.4.22. Prepend a Node
      • 32.4.23. Prepend a Node (unprotected)
  • 33. Red-Black Trees
    • 33.1. Introduction
    • 33.2. Background
      • 33.2.1. Nodes
      • 33.2.2. Controls
    • 33.3. Operations
    • 33.4. Directives
      • 33.4.1. Documentation for the Red-Black Tree Directives
  • 34. Timespec Helpers
    • 34.1. Introduction
    • 34.2. Background
      • 34.2.1. Time Storage Conventions
    • 34.3. Operations
      • 34.3.1. Set and Obtain Timespec Value
      • 34.3.2. Timespec Math
      • 34.3.3. Comparing struct timespec Instances
      • 34.3.4. Conversions and Validity Check
    • 34.4. Directives
      • 34.4.1. TIMESPEC_SET - Set struct timespec Instance
      • 34.4.2. TIMESPEC_ZERO - Zero struct timespec Instance
      • 34.4.3. TIMESPEC_IS_VALID - Check validity of a struct timespec instance
      • 34.4.4. TIMESPEC_ADD_TO - Add Two struct timespec Instances
      • 34.4.5. TIMESPEC_SUBTRACT - Subtract Two struct timespec Instances
      • 34.4.6. TIMESPEC_DIVIDE - Divide Two struct timespec Instances
      • 34.4.7. TIMESPEC_DIVIDE_BY_INTEGER - Divide a struct timespec Instance by an Integer
      • 34.4.8. TIMESPEC_LESS_THAN - Less than operator
      • 34.4.9. TIMESPEC_GREATER_THAN - Greater than operator
      • 34.4.10. TIMESPEC_EQUAL_TO - Check equality of timespecs
      • 34.4.11. TIMESPEC_GET_SECONDS - Get Seconds Portion of struct timespec Instance
      • 34.4.12. TIMESPEC_GET_NANOSECONDS - Get Nanoseconds Portion of the struct timespec Instance
      • 34.4.13. TIMESPEC_TO_TICKS - Convert struct timespec Instance to Ticks
      • 34.4.14. TIMESPEC_FROM_TICKS - Convert Ticks to struct timespec Representation
  • 35. Constant Bandwidth Server Scheduler API
    • 35.1. Introduction
    • 35.2. Background
      • 35.2.1. Constant Bandwidth Server Definitions
      • 35.2.2. Handling Periodic Tasks
      • 35.2.3. Registering a Callback Function
      • 35.2.4. Limitations
    • 35.3. Operations
      • 35.3.1. Setting up a server
      • 35.3.2. Attaching Task to a Server
      • 35.3.3. Detaching Task from a Server
      • 35.3.4. Examples
    • 35.4. Directives
      • 35.4.1. CBS_INITIALIZE - Initialize the CBS library
      • 35.4.2. CBS_CLEANUP - Cleanup the CBS library
      • 35.4.3. CBS_CREATE_SERVER - Create a new bandwidth server
      • 35.4.4. CBS_ATTACH_THREAD - Attach a thread to server
      • 35.4.5. CBS_DETACH_THREAD - Detach a thread from server
      • 35.4.6. CBS_DESTROY_SERVER - Destroy a bandwidth server
      • 35.4.7. CBS_GET_SERVER_ID - Get an ID of a server
      • 35.4.8. CBS_GET_PARAMETERS - Get scheduling parameters of a server
      • 35.4.9. CBS_SET_PARAMETERS - Set scheduling parameters
      • 35.4.10. CBS_GET_EXECUTION_TIME - Get elapsed execution time
      • 35.4.11. CBS_GET_REMAINING_BUDGET - Get remaining execution time
      • 35.4.12. CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time
  • 36. Ada Support
    • 36.1. Introduction
    • 36.2. Ada Programming Language Support
    • 36.3. Classic API Ada Bindings
  • 37. Linker Sets
    • 37.1. Introduction
    • 37.2. Background
    • 37.3. Directives
      • 37.3.1. RTEMS_LINKER_SET_BEGIN - Designator of the linker set begin marker
      • 37.3.2. RTEMS_LINKER_SET_END - Designator of the linker set end marker
      • 37.3.3. RTEMS_LINKER_SET_SIZE - The linker set size in characters
      • 37.3.4. RTEMS_LINKER_SET_ITEM_COUNT - The linker set item count
      • 37.3.5. RTEMS_LINKER_SET_IS_EMPTY - Is the linker set empty?
      • 37.3.6. RTEMS_LINKER_SET_FOREACH - Iterate through the linker set items
      • 37.3.7. RTEMS_LINKER_ROSET_DECLARE - Declares a read-only linker set
      • 37.3.8. RTEMS_LINKER_ROSET - Defines a read-only linker set
      • 37.3.9. RTEMS_LINKER_ROSET_ITEM_DECLARE - Declares a read-only linker set item
      • 37.3.10. RTEMS_LINKER_ROSET_ITEM_ORDERED_DECLARE - Declares an ordered read-only linker set item
      • 37.3.11. RTEMS_LINKER_ROSET_ITEM_REFERENCE - References a read-only linker set item
      • 37.3.12. RTEMS_LINKER_ROSET_ITEM - Defines a read-only linker set item
      • 37.3.13. RTEMS_LINKER_ROSET_ITEM_ORDERED - Defines an ordered read-only linker set item
      • 37.3.14. RTEMS_LINKER_ROSET_CONTENT - Marks a declaration as a read-only linker set content
      • 37.3.15. RTEMS_LINKER_RWSET_DECLARE - Declares a read-write linker set
      • 37.3.16. RTEMS_LINKER_RWSET - Defines a read-write linker set
      • 37.3.17. RTEMS_LINKER_RWSET_ITEM_DECLARE - Declares a read-write linker set item
      • 37.3.18. RTEMS_LINKER_RWSET_ITEM_ORDERED_DECLARE - Declares an ordered read-write linker set item
      • 37.3.19. RTEMS_LINKER_RWSET_ITEM_REFERENCE - References a read-write linker set item
      • 37.3.20. RTEMS_LINKER_RWSET_ITEM - Defines a read-write linker set item
      • 37.3.21. RTEMS_LINKER_RWSET_ITEM_ORDERED - Defines an ordered read-write linker set item
      • 37.3.22. RTEMS_LINKER_RWSET_CONTENT - Marks a declaration as a read-write linker set content
  • 38. Directive Status Codes
    • 38.1. Introduction
    • 38.2. Directives
      • 38.2.1. STATUS_TEXT - Returns the enumeration name for a status code
  • 39. Example Application
  • 40. Glossary
  • 41. References
Index
RTEMS Classic API Guide
  • »
  • 24. Configuring a System »
  • 24.20. BSP Related Configuration Options

24.20. BSP Related Configuration Options¶

This section describes configuration options related to the BSP. Some configuration options may have a BSP-specific setting which is defined by <bsp.h>. The BSP-specific settings can be disabled by the CONFIGURE_DISABLE_BSP_SETTINGS configuration option.

24.20.1. BSP_IDLE_TASK_BODY¶

CONSTANT:

BSP_IDLE_TASK_BODY

OPTION TYPE:

This configuration option is an initializer define.

DEFAULT VALUE:

The default value is BSP-specific.

VALUE CONSTRAINTS:

The value of this configuration option shall be defined to a valid function pointer of the type void *( *idle_body )( uintptr_t ).

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then the value of this configuration option defines the default value of CONFIGURE_IDLE_TASK_BODY.

NOTES:

As it has knowledge of the specific CPU model, system controller logic, and peripheral buses, a BSP-specific IDLE task may be capable of turning components off to save power during extended periods of no task activity.

24.20.2. BSP_IDLE_TASK_STACK_SIZE¶

CONSTANT:

BSP_IDLE_TASK_STACK_SIZE

OPTION TYPE:

This configuration option is an integer define.

DEFAULT VALUE:

The default value is BSP-specific.

VALUE CONSTRAINTS:

The value of this configuration option shall satisfy all of the following constraints:

  • It shall be greater than or equal to a BSP-specific and application-specific minimum value.

  • It shall be small enough so that the IDLE task stack area calculation carried out by <rtems/confdefs.h> does not overflow an integer of type size_t.

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then the value of this configuration option defines the default value of CONFIGURE_IDLE_TASK_SIZE.

NOTES:

None.

24.20.3. BSP_INITIAL_EXTENSION¶

CONSTANT:

BSP_INITIAL_EXTENSION

OPTION TYPE:

This configuration option is an initializer define.

DEFAULT VALUE:

The default value is BSP-specific.

VALUE CONSTRAINTS:

The value of this configuration option shall be a list of initializers for structures of type rtems_extensions_table.

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then the value of this configuration option is used to initialize the table of initial user extensions.

NOTES:

The value of this configuration option is placed after the entries of all other initial user extensions.

24.20.4. BSP_INTERRUPT_STACK_SIZE¶

CONSTANT:

BSP_INTERRUPT_STACK_SIZE

OPTION TYPE:

This configuration option is an integer define.

DEFAULT VALUE:

The default value is BSP-specific.

VALUE CONSTRAINTS:

The value of this configuration option shall satisfy all of the following constraints:

  • It shall be greater than or equal to a BSP-specific and application-specific minimum value.

  • It shall be small enough so that the interrupt stack area calculation carried out by <rtems/confdefs.h> does not overflow an integer of type size_t.

  • It shall be aligned according to CPU_INTERRUPT_STACK_ALIGNMENT.

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then the value of this configuration option defines the default value of CONFIGURE_INTERRUPT_STACK_SIZE.

NOTES:

None.

24.20.5. CONFIGURE_BSP_PREREQUISITE_DRIVERS¶

CONSTANT:

CONFIGURE_BSP_PREREQUISITE_DRIVERS

OPTION TYPE:

This configuration option is an initializer define.

DEFAULT VALUE:

The default value is BSP-specific.

VALUE CONSTRAINTS:

The value of this configuration option shall be a list of initializers for structures of type rtems_extensions_table.

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then the value of this configuration option is used to initialize the table of initial user extensions.

NOTES:

The value of this configuration option is placed before the entries of all other initial user extensions (including CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS).

24.20.6. CONFIGURE_DISABLE_BSP_SETTINGS¶

CONSTANT:

CONFIGURE_DISABLE_BSP_SETTINGS

OPTION TYPE:

This configuration option is a boolean feature define.

DEFAULT CONFIGURATION:

If this configuration option is undefined, then the described feature is not enabled.

DESCRIPTION:

In case this configuration option is defined, then the following BSP related configuration options are undefined:

  • BSP_IDLE_TASK_BODY

  • BSP_IDLE_TASK_STACK_SIZE

  • BSP_INITIAL_EXTENSION

  • BSP_INTERRUPT_STACK_SIZE

  • CONFIGURE_BSP_PREREQUISITE_DRIVERS

  • CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK

NOTES:

None.

24.20.7. CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK¶

CONSTANT:

CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK

OPTION TYPE:

This configuration option is a boolean feature define.

DEFAULT CONFIGURATION:

If this configuration option is undefined, then the described feature is not enabled.

DESCRIPTION:

If

  • this configuration option is defined by the BSP

  • and CONFIGURE_DISABLE_BSP_SETTINGS is undefined,

then not all memory is made available to the C Program Heap immediately at system initialization time. When malloc() or other standard memory allocation functions are unable to allocate memory, they will call the BSP supplied sbrk() function to obtain more memory.

NOTES:

This option should not be defined by the application. Only the BSP knows how it allocates memory to the C Program Heap.

Next Previous

© Copyright 1988, 2022 RTEMS Project and contributors

Built with Sphinx using a theme provided by Read the Docs.