RTEMS Documentation Project RTEMS Classic API Guide
6.68a44b2
  • 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.3. Local and Global Scope
        • 3.2.3.1. Object ID Format
      • 3.2.4. 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.2. Background
      • 5.2.1. Scheduling Algorithms
      • 5.2.2. Priority Scheduling
      • 5.2.3. Scheduling Modification Mechanisms
        • 5.2.3.1. Task Priority and Scheduling
        • 5.2.3.2. Preemption
        • 5.2.3.3. Timeslicing
        • 5.2.3.4. Manual Round-Robin
      • 5.2.4. Dispatching Tasks
      • 5.2.5. Task State Transitions
    • 5.3. Uniprocessor Schedulers
      • 5.3.1. Deterministic Priority Scheduler
      • 5.3.2. Simple Priority Scheduler
      • 5.3.3. Earliest Deadline First Scheduler
      • 5.3.4. Constant Bandwidth Server Scheduling (CBS)
    • 5.4. SMP Schedulers
      • 5.4.1. Earliest Deadline First SMP Scheduler
      • 5.4.2. Deterministic Priority SMP Scheduler
      • 5.4.3. Simple Priority SMP Scheduler
      • 5.4.4. Arbitrary Processor Affinity Priority SMP Scheduler
    • 5.5. Directives
      • 5.5.1. rtems_scheduler_ident()
      • 5.5.2. rtems_scheduler_ident_by_processor()
      • 5.5.3. rtems_scheduler_ident_by_processor_set()
      • 5.5.4. rtems_scheduler_get_maximum_priority()
      • 5.5.5. rtems_scheduler_map_priority_to_posix()
      • 5.5.6. rtems_scheduler_map_priority_from_posix()
      • 5.5.7. rtems_scheduler_get_processor()
      • 5.5.8. rtems_scheduler_get_processor_maximum()
      • 5.5.9. rtems_scheduler_get_processor_set()
      • 5.5.10. rtems_scheduler_add_processor()
      • 5.5.11. rtems_scheduler_remove_processor()
  • 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. rtems_initialize_executive()
  • 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. Task Life States
      • 7.2.9. Accessing Task Arguments
      • 7.2.10. Floating Point Considerations
      • 7.2.11. Building a Task Attribute Set
      • 7.2.12. 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. rtems_task_create()
      • 7.4.2. rtems_task_construct()
      • 7.4.3. rtems_task_ident()
      • 7.4.4. rtems_task_self()
      • 7.4.5. rtems_task_start()
      • 7.4.6. rtems_task_restart()
      • 7.4.7. rtems_task_delete()
      • 7.4.8. rtems_task_exit()
      • 7.4.9. rtems_task_suspend()
      • 7.4.10. rtems_task_resume()
      • 7.4.11. rtems_task_is_suspended()
      • 7.4.12. rtems_task_set_priority()
      • 7.4.13. rtems_task_get_priority()
      • 7.4.14. rtems_task_mode()
      • 7.4.15. rtems_task_wake_after()
      • 7.4.16. rtems_task_wake_when()
      • 7.4.17. rtems_task_get_scheduler()
      • 7.4.18. rtems_task_set_scheduler()
      • 7.4.19. rtems_task_get_affinity()
      • 7.4.20. rtems_task_set_affinity()
      • 7.4.21. rtems_task_iterate()
      • 7.4.22. RTEMS_TASK_STORAGE_SIZE()
    • 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. rtems_interrupt_catch()
      • 8.4.2. rtems_interrupt_disable()
      • 8.4.3. rtems_interrupt_enable()
      • 8.4.4. rtems_interrupt_flash()
      • 8.4.5. rtems_interrupt_local_disable()
      • 8.4.6. rtems_interrupt_local_enable()
      • 8.4.7. rtems_interrupt_is_in_progress()
      • 8.4.8. rtems_interrupt_lock_initialize()
      • 8.4.9. rtems_interrupt_lock_destroy()
      • 8.4.10. rtems_interrupt_lock_acquire()
      • 8.4.11. rtems_interrupt_lock_release()
      • 8.4.12. rtems_interrupt_lock_acquire_isr()
      • 8.4.13. rtems_interrupt_lock_release_isr()
      • 8.4.14. rtems_interrupt_lock_interrupt_disable()
      • 8.4.15. RTEMS_INTERRUPT_LOCK_DECLARE()
      • 8.4.16. RTEMS_INTERRUPT_LOCK_DEFINE()
      • 8.4.17. RTEMS_INTERRUPT_LOCK_INITIALIZER()
      • 8.4.18. RTEMS_INTERRUPT_LOCK_MEMBER()
      • 8.4.19. RTEMS_INTERRUPT_LOCK_REFERENCE()
      • 8.4.20. RTEMS_INTERRUPT_ENTRY_INITIALIZER()
      • 8.4.21. rtems_interrupt_entry_initialize()
      • 8.4.22. rtems_interrupt_entry_install()
      • 8.4.23. rtems_interrupt_entry_remove()
      • 8.4.24. rtems_interrupt_handler_install()
      • 8.4.25. rtems_interrupt_handler_remove()
      • 8.4.26. rtems_interrupt_vector_is_enabled()
      • 8.4.27. rtems_interrupt_vector_enable()
      • 8.4.28. rtems_interrupt_vector_disable()
      • 8.4.29. rtems_interrupt_is_pending()
      • 8.4.30. rtems_interrupt_raise()
      • 8.4.31. rtems_interrupt_raise_on()
      • 8.4.32. rtems_interrupt_clear()
      • 8.4.33. rtems_interrupt_get_affinity()
      • 8.4.34. rtems_interrupt_set_affinity()
      • 8.4.35. rtems_interrupt_get_attributes()
      • 8.4.36. rtems_interrupt_handler_iterate()
      • 8.4.37. rtems_interrupt_server_initialize()
      • 8.4.38. rtems_interrupt_server_create()
      • 8.4.39. rtems_interrupt_server_handler_install()
      • 8.4.40. rtems_interrupt_server_handler_remove()
      • 8.4.41. rtems_interrupt_server_set_affinity()
      • 8.4.42. rtems_interrupt_server_delete()
      • 8.4.43. rtems_interrupt_server_suspend()
      • 8.4.44. rtems_interrupt_server_resume()
      • 8.4.45. rtems_interrupt_server_move()
      • 8.4.46. rtems_interrupt_server_handler_iterate()
      • 8.4.47. rtems_interrupt_server_entry_initialize()
      • 8.4.48. rtems_interrupt_server_action_prepend()
      • 8.4.49. rtems_interrupt_server_entry_destroy()
      • 8.4.50. rtems_interrupt_server_entry_submit()
      • 8.4.51. rtems_interrupt_server_entry_move()
      • 8.4.52. rtems_interrupt_server_request_initialize()
      • 8.4.53. rtems_interrupt_server_request_set_vector()
      • 8.4.54. rtems_interrupt_server_request_destroy()
      • 8.4.55. rtems_interrupt_server_request_submit()
  • 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. rtems_clock_set()
      • 9.4.2. rtems_clock_get_tod()
      • 9.4.3. rtems_clock_get_tod_timeval()
      • 9.4.4. rtems_clock_get_realtime()
      • 9.4.5. rtems_clock_get_realtime_bintime()
      • 9.4.6. rtems_clock_get_realtime_timeval()
      • 9.4.7. rtems_clock_get_realtime_coarse()
      • 9.4.8. rtems_clock_get_realtime_coarse_bintime()
      • 9.4.9. rtems_clock_get_realtime_coarse_timeval()
      • 9.4.10. rtems_clock_get_monotonic()
      • 9.4.11. rtems_clock_get_monotonic_bintime()
      • 9.4.12. rtems_clock_get_monotonic_sbintime()
      • 9.4.13. rtems_clock_get_monotonic_timeval()
      • 9.4.14. rtems_clock_get_monotonic_coarse()
      • 9.4.15. rtems_clock_get_monotonic_coarse_bintime()
      • 9.4.16. rtems_clock_get_monotonic_coarse_timeval()
      • 9.4.17. rtems_clock_get_boot_time()
      • 9.4.18. rtems_clock_get_boot_time_bintime()
      • 9.4.19. rtems_clock_get_boot_time_timeval()
      • 9.4.20. rtems_clock_get_seconds_since_epoch()
      • 9.4.21. rtems_clock_get_ticks_per_second()
      • 9.4.22. rtems_clock_get_ticks_since_boot()
      • 9.4.23. rtems_clock_get_uptime()
      • 9.4.24. rtems_clock_get_uptime_timeval()
      • 9.4.25. rtems_clock_get_uptime_seconds()
      • 9.4.26. rtems_clock_get_uptime_nanoseconds()
      • 9.4.27. rtems_clock_tick_later()
      • 9.4.28. rtems_clock_tick_later_usec()
      • 9.4.29. rtems_clock_tick_before()
    • 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. rtems_timer_create()
      • 10.4.2. rtems_timer_ident()
      • 10.4.3. rtems_timer_cancel()
      • 10.4.4. rtems_timer_delete()
      • 10.4.5. rtems_timer_fire_after()
      • 10.4.6. rtems_timer_fire_when()
      • 10.4.7. rtems_timer_initiate_server()
      • 10.4.8. rtems_timer_server_fire_after()
      • 10.4.9. rtems_timer_server_fire_when()
      • 10.4.10. rtems_timer_reset()
      • 10.4.11. rtems_timer_get_information()
  • 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. rtems_rate_monotonic_create()
      • 11.4.2. rtems_rate_monotonic_ident()
      • 11.4.3. rtems_rate_monotonic_cancel()
      • 11.4.4. rtems_rate_monotonic_delete()
      • 11.4.5. rtems_rate_monotonic_period()
      • 11.4.6. rtems_rate_monotonic_get_status()
      • 11.4.7. rtems_rate_monotonic_get_statistics()
      • 11.4.8. rtems_rate_monotonic_reset_statistics()
      • 11.4.9. rtems_rate_monotonic_reset_all_statistics()
      • 11.4.10. rtems_rate_monotonic_report_statistics()
      • 11.4.11. rtems_rate_monotonic_report_statistics_with_plugin()
  • 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. rtems_semaphore_create()
      • 12.4.2. rtems_semaphore_ident()
      • 12.4.3. rtems_semaphore_delete()
      • 12.4.4. rtems_semaphore_obtain()
      • 12.4.5. rtems_semaphore_release()
      • 12.4.6. rtems_semaphore_flush()
      • 12.4.7. rtems_semaphore_set_priority()
  • 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. Directives
      • 13.3.1. rtems_barrier_create()
      • 13.3.2. rtems_barrier_ident()
      • 13.3.3. rtems_barrier_delete()
      • 13.3.4. rtems_barrier_wait()
      • 13.3.5. rtems_barrier_release()
  • 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. rtems_message_queue_create()
      • 14.4.2. rtems_message_queue_construct()
      • 14.4.3. rtems_message_queue_ident()
      • 14.4.4. rtems_message_queue_delete()
      • 14.4.5. rtems_message_queue_send()
      • 14.4.6. rtems_message_queue_urgent()
      • 14.4.7. rtems_message_queue_broadcast()
      • 14.4.8. rtems_message_queue_receive()
      • 14.4.9. rtems_message_queue_get_number_pending()
      • 14.4.10. rtems_message_queue_flush()
      • 14.4.11. RTEMS_MESSAGE_QUEUE_BUFFER()
  • 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. rtems_event_send()
      • 15.4.2. rtems_event_receive()
  • 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. rtems_signal_catch()
      • 16.4.2. rtems_signal_send()
  • 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. rtems_partition_create()
      • 17.4.2. rtems_partition_ident()
      • 17.4.3. rtems_partition_delete()
      • 17.4.4. rtems_partition_get_buffer()
      • 17.4.5. rtems_partition_return_buffer()
  • 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. rtems_region_create()
      • 18.4.2. rtems_region_ident()
      • 18.4.3. rtems_region_delete()
      • 18.4.4. rtems_region_extend()
      • 18.4.5. rtems_region_get_segment()
      • 18.4.6. rtems_region_return_segment()
      • 18.4.7. rtems_region_resize_segment()
      • 18.4.8. rtems_region_get_information()
      • 18.4.9. rtems_region_get_free_information()
      • 18.4.10. rtems_region_get_segment_size()
  • 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. rtems_port_create()
      • 19.4.2. rtems_port_ident()
      • 19.4.3. rtems_port_delete()
      • 19.4.4. rtems_port_external_to_internal()
      • 19.4.5. rtems_port_internal_to_external()
  • 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. rtems_io_register_driver()
      • 20.4.2. rtems_io_unregister_driver()
      • 20.4.3. rtems_io_initialize()
      • 20.4.4. rtems_io_register_name()
      • 20.4.5. rtems_io_open()
      • 20.4.6. rtems_io_close()
      • 20.4.7. rtems_io_read()
      • 20.4.8. rtems_io_write()
      • 20.4.9. rtems_io_control()
  • 21. Kernel Character I/O Support
    • 21.1. Introduction
    • 21.2. Directives
      • 21.2.1. rtems_putc()
      • 21.2.2. rtems_put_char()
      • 21.2.3. putk()
      • 21.2.4. printk()
      • 21.2.5. vprintk()
      • 21.2.6. rtems_printk_printer()
      • 21.2.7. getchark()
  • 22. Cache Manager
    • 22.1. Introduction
    • 22.2. Directives
      • 22.2.1. rtems_cache_flush_multiple_data_lines()
      • 22.2.2. rtems_cache_invalidate_multiple_data_lines()
      • 22.2.3. rtems_cache_invalidate_multiple_instruction_lines()
      • 22.2.4. rtems_cache_instruction_sync_after_code_change()
      • 22.2.5. rtems_cache_get_maximal_line_size()
      • 22.2.6. rtems_cache_get_data_line_size()
      • 22.2.7. rtems_cache_get_instruction_line_size()
      • 22.2.8. rtems_cache_get_data_cache_size()
      • 22.2.9. rtems_cache_get_instruction_cache_size()
      • 22.2.10. rtems_cache_flush_entire_data()
      • 22.2.11. rtems_cache_invalidate_entire_data()
      • 22.2.12. rtems_cache_invalidate_entire_instruction()
      • 22.2.13. rtems_cache_enable_data()
      • 22.2.14. rtems_cache_disable_data()
      • 22.2.15. rtems_cache_enable_instruction()
      • 22.2.16. rtems_cache_disable_instruction()
      • 22.2.17. rtems_cache_aligned_malloc()
  • 23. Fatal Error Manager
    • 23.1. Introduction
    • 23.2. Background
      • 23.2.1. Overview
      • 23.2.2. Fatal Sources
      • 23.2.3. Internal Error Codes
    • 23.3. Operations
      • 23.3.1. Announcing a Fatal Error
    • 23.4. Directives
      • 23.4.1. rtems_fatal()
      • 23.4.2. rtems_panic()
      • 23.4.3. rtems_shutdown_executive()
      • 23.4.4. rtems_exception_frame_print()
      • 23.4.5. rtems_fatal_source_text()
      • 23.4.6. rtems_internal_error_text()
      • 23.4.7. rtems_fatal_error_occurred()
  • 24. Board Support Packages
    • 24.1. Introduction
    • 24.2. Reset and Initialization
      • 24.2.1. Interrupt Stack Requirements
      • 24.2.2. Processors with a Separate Interrupt Stack
      • 24.2.3. Processors Without a Separate Interrupt Stack
    • 24.3. Device Drivers
      • 24.3.1. Clock Tick Device Driver
    • 24.4. User Extensions
    • 24.5. Multiprocessor Communications Interface (MPCI)
      • 24.5.1. Tightly-Coupled Systems
      • 24.5.2. Loosely-Coupled Systems
      • 24.5.3. Systems with Mixed Coupling
      • 24.5.4. Heterogeneous Systems
  • 25. User Extensions Manager
    • 25.1. Introduction
    • 25.2. Background
      • 25.2.1. Extension Sets
      • 25.2.2. TCB Extension Area
      • 25.2.3. Order of Invocation
      • 25.2.4. Thread Create Extension
      • 25.2.5. Thread Start Extension
      • 25.2.6. Thread Restart Extension
      • 25.2.7. Thread Switch Extension
      • 25.2.8. Thread Begin Extension
      • 25.2.9. Thread Exitted Extension
      • 25.2.10. Thread Termination Extension
      • 25.2.11. Thread Delete Extension
      • 25.2.12. Fatal Error Extension
    • 25.3. Directives
      • 25.3.1. rtems_extension_create()
      • 25.3.2. rtems_extension_delete()
      • 25.3.3. rtems_extension_ident()
  • 26. Configuring a System
    • 26.1. Introduction
    • 26.2. Default Value Selection Philosophy
    • 26.3. Sizing the RTEMS Workspace
    • 26.4. Potential Issues with RTEMS Workspace Size Estimation
    • 26.5. Configuration Example
    • 26.6. Unlimited Objects
      • 26.6.1. Unlimited Objects by Class
      • 26.6.2. Unlimited Objects by Default
    • 26.7. General System Configuration
      • 26.7.1. CONFIGURE_DIRTY_MEMORY
      • 26.7.2. CONFIGURE_DISABLE_BSP_SETTINGS
      • 26.7.3. CONFIGURE_DISABLE_NEWLIB_REENTRANCY
      • 26.7.4. CONFIGURE_EXECUTIVE_RAM_SIZE
      • 26.7.5. CONFIGURE_EXTRA_TASK_STACKS
      • 26.7.6. CONFIGURE_INITIAL_EXTENSIONS
      • 26.7.7. CONFIGURE_INTERRUPT_STACK_SIZE
      • 26.7.8. CONFIGURE_MALLOC_DIRTY
      • 26.7.9. CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
      • 26.7.10. CONFIGURE_MAXIMUM_PROCESSORS
      • 26.7.11. CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
      • 26.7.12. CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
      • 26.7.13. CONFIGURE_MEMORY_OVERHEAD
      • 26.7.14. CONFIGURE_MESSAGE_BUFFER_MEMORY
      • 26.7.15. CONFIGURE_MICROSECONDS_PER_TICK
      • 26.7.16. CONFIGURE_MINIMUM_TASK_STACK_SIZE
      • 26.7.17. CONFIGURE_STACK_CHECKER_ENABLED
      • 26.7.18. CONFIGURE_TICKS_PER_TIMESLICE
      • 26.7.19. CONFIGURE_UNIFIED_WORK_AREAS
      • 26.7.20. CONFIGURE_UNLIMITED_ALLOCATION_SIZE
      • 26.7.21. CONFIGURE_UNLIMITED_OBJECTS
      • 26.7.22. CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
      • 26.7.23. CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
    • 26.8. Device Driver Configuration
      • 26.8.1. CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
      • 26.8.2. CONFIGURE_APPLICATION_EXTRA_DRIVERS
      • 26.8.3. CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
      • 26.8.4. CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
      • 26.8.5. CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
      • 26.8.6. CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
      • 26.8.7. CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
      • 26.8.8. CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
      • 26.8.9. CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
      • 26.8.10. CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
      • 26.8.11. CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
      • 26.8.12. CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
      • 26.8.13. CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
      • 26.8.14. CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
      • 26.8.15. CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
      • 26.8.16. CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
      • 26.8.17. CONFIGURE_ATA_DRIVER_TASK_PRIORITY
      • 26.8.18. CONFIGURE_EXCEPTION_TO_SIGNAL_MAPPING
      • 26.8.19. CONFIGURE_MAXIMUM_DRIVERS
    • 26.9. Classic API Configuration
      • 26.9.1. CONFIGURE_MAXIMUM_BARRIERS
      • 26.9.2. CONFIGURE_MAXIMUM_MESSAGE_QUEUES
      • 26.9.3. CONFIGURE_MAXIMUM_PARTITIONS
      • 26.9.4. CONFIGURE_MAXIMUM_PERIODS
      • 26.9.5. CONFIGURE_MAXIMUM_PORTS
      • 26.9.6. CONFIGURE_MAXIMUM_REGIONS
      • 26.9.7. CONFIGURE_MAXIMUM_SEMAPHORES
      • 26.9.8. CONFIGURE_MAXIMUM_TASKS
      • 26.9.9. CONFIGURE_MAXIMUM_TIMERS
      • 26.9.10. CONFIGURE_MAXIMUM_USER_EXTENSIONS
      • 26.9.11. CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
    • 26.10. Classic API Initialization Task Configuration
      • 26.10.1. CONFIGURE_INIT_TASK_ARGUMENTS
      • 26.10.2. CONFIGURE_INIT_TASK_ATTRIBUTES
      • 26.10.3. CONFIGURE_INIT_TASK_CONSTRUCT_STORAGE_SIZE
      • 26.10.4. CONFIGURE_INIT_TASK_ENTRY_POINT
      • 26.10.5. CONFIGURE_INIT_TASK_INITIAL_MODES
      • 26.10.6. CONFIGURE_INIT_TASK_NAME
      • 26.10.7. CONFIGURE_INIT_TASK_PRIORITY
      • 26.10.8. CONFIGURE_INIT_TASK_STACK_SIZE
      • 26.10.9. CONFIGURE_RTEMS_INIT_TASKS_TABLE
    • 26.11. POSIX API Configuration
      • 26.11.1. CONFIGURE_MAXIMUM_POSIX_KEYS
      • 26.11.2. CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
      • 26.11.3. CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
      • 26.11.4. CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
      • 26.11.5. CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
      • 26.11.6. CONFIGURE_MAXIMUM_POSIX_SHMS
      • 26.11.7. CONFIGURE_MAXIMUM_POSIX_THREADS
      • 26.11.8. CONFIGURE_MAXIMUM_POSIX_TIMERS
      • 26.11.9. CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
    • 26.12. POSIX Initialization Thread Configuration
      • 26.12.1. CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
      • 26.12.2. CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
      • 26.12.3. CONFIGURE_POSIX_INIT_THREAD_TABLE
    • 26.13. Event Recording Configuration
      • 26.13.1. CONFIGURE_RECORD_EXTENSIONS_ENABLED
      • 26.13.2. CONFIGURE_RECORD_FATAL_DUMP_BASE64
      • 26.13.3. CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
      • 26.13.4. CONFIGURE_RECORD_INTERRUPTS_ENABLED
      • 26.13.5. CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
    • 26.14. Filesystem Configuration
      • 26.14.1. CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
      • 26.14.2. CONFIGURE_FILESYSTEM_ALL
      • 26.14.3. CONFIGURE_FILESYSTEM_DOSFS
      • 26.14.4. CONFIGURE_FILESYSTEM_FTPFS
      • 26.14.5. CONFIGURE_FILESYSTEM_IMFS
      • 26.14.6. CONFIGURE_FILESYSTEM_JFFS2
      • 26.14.7. CONFIGURE_FILESYSTEM_NFS
      • 26.14.8. CONFIGURE_FILESYSTEM_RFS
      • 26.14.9. CONFIGURE_FILESYSTEM_TFTPFS
      • 26.14.10. CONFIGURE_IMFS_DISABLE_CHMOD
      • 26.14.11. CONFIGURE_IMFS_DISABLE_CHOWN
      • 26.14.12. CONFIGURE_IMFS_DISABLE_LINK
      • 26.14.13. CONFIGURE_IMFS_DISABLE_MKNOD
      • 26.14.14. CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
      • 26.14.15. CONFIGURE_IMFS_DISABLE_MKNOD_FILE
      • 26.14.16. CONFIGURE_IMFS_DISABLE_MOUNT
      • 26.14.17. CONFIGURE_IMFS_DISABLE_READDIR
      • 26.14.18. CONFIGURE_IMFS_DISABLE_READLINK
      • 26.14.19. CONFIGURE_IMFS_DISABLE_RENAME
      • 26.14.20. CONFIGURE_IMFS_DISABLE_RMNOD
      • 26.14.21. CONFIGURE_IMFS_DISABLE_SYMLINK
      • 26.14.22. CONFIGURE_IMFS_DISABLE_UNMOUNT
      • 26.14.23. CONFIGURE_IMFS_DISABLE_UTIME
      • 26.14.24. CONFIGURE_IMFS_ENABLE_MKFIFO
      • 26.14.25. CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
      • 26.14.26. CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
      • 26.14.27. CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
    • 26.15. Block Device Cache Configuration
      • 26.15.1. CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
      • 26.15.2. CONFIGURE_BDBUF_BUFFER_MAX_SIZE
      • 26.15.3. CONFIGURE_BDBUF_BUFFER_MIN_SIZE
      • 26.15.4. CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
      • 26.15.5. CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
      • 26.15.6. CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
      • 26.15.7. CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
      • 26.15.8. CONFIGURE_BDBUF_TASK_STACK_SIZE
      • 26.15.9. CONFIGURE_SWAPOUT_BLOCK_HOLD
      • 26.15.10. CONFIGURE_SWAPOUT_SWAP_PERIOD
      • 26.15.11. CONFIGURE_SWAPOUT_TASK_PRIORITY
      • 26.15.12. CONFIGURE_SWAPOUT_WORKER_TASKS
      • 26.15.13. CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
    • 26.16. Task Stack Allocator Configuration
      • 26.16.1. CONFIGURE_TASK_STACK_ALLOCATOR
      • 26.16.2. CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
      • 26.16.3. CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE
      • 26.16.4. CONFIGURE_TASK_STACK_ALLOCATOR_INIT
      • 26.16.5. CONFIGURE_TASK_STACK_DEALLOCATOR
      • 26.16.6. CONFIGURE_TASK_STACK_FROM_ALLOCATOR
    • 26.17. Idle Task Configuration
      • 26.17.1. CONFIGURE_IDLE_TASK_BODY
      • 26.17.2. CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
      • 26.17.3. CONFIGURE_IDLE_TASK_STACK_SIZE
      • 26.17.4. CONFIGURE_IDLE_TASK_STORAGE_SIZE
    • 26.18. General Scheduler Configuration
      • 26.18.1. CONFIGURE_CBS_MAXIMUM_SERVERS
      • 26.18.2. CONFIGURE_MAXIMUM_PRIORITY
      • 26.18.3. CONFIGURE_SCHEDULER_ASSIGNMENTS
      • 26.18.4. CONFIGURE_SCHEDULER_CBS
      • 26.18.5. CONFIGURE_SCHEDULER_EDF
      • 26.18.6. CONFIGURE_SCHEDULER_EDF_SMP
      • 26.18.7. CONFIGURE_SCHEDULER_NAME
      • 26.18.8. CONFIGURE_SCHEDULER_PRIORITY
      • 26.18.9. CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
      • 26.18.10. CONFIGURE_SCHEDULER_PRIORITY_SMP
      • 26.18.11. CONFIGURE_SCHEDULER_SIMPLE
      • 26.18.12. CONFIGURE_SCHEDULER_SIMPLE_SMP
      • 26.18.13. CONFIGURE_SCHEDULER_STRONG_APA
      • 26.18.14. CONFIGURE_SCHEDULER_TABLE_ENTRIES
      • 26.18.15. CONFIGURE_SCHEDULER_USER
    • 26.19. Clustered Scheduler Configuration
      • 26.19.1. Configuration Step 1 - Scheduler Algorithms
      • 26.19.2. Configuration Step 2 - Schedulers
      • 26.19.3. Configuration Step 3 - Scheduler Table
      • 26.19.4. Configuration Step 4 - Processor to Scheduler Assignment
      • 26.19.5. Configuration Example
      • 26.19.6. Configuration Errors
    • 26.20. FACE Technical Standard Related Configuration
      • 26.20.1. CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR
    • 26.21. BSP Related Configuration Options
      • 26.21.1. BSP_IDLE_TASK_BODY
      • 26.21.2. BSP_IDLE_TASK_STACK_SIZE
      • 26.21.3. BSP_INITIAL_EXTENSION
      • 26.21.4. BSP_INTERRUPT_STACK_SIZE
      • 26.21.5. CONFIGURE_BSP_PREREQUISITE_DRIVERS
      • 26.21.6. CONFIGURE_DISABLE_BSP_SETTINGS
      • 26.21.7. CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
    • 26.22. Multiprocessing Configuration
      • 26.22.1. CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
      • 26.22.2. CONFIGURE_MP_APPLICATION
      • 26.22.3. CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
      • 26.22.4. CONFIGURE_MP_MAXIMUM_NODES
      • 26.22.5. CONFIGURE_MP_MAXIMUM_PROXIES
      • 26.22.6. CONFIGURE_MP_MPCI_TABLE_POINTER
      • 26.22.7. CONFIGURE_MP_NODE_NUMBER
    • 26.23. PCI Library Configuration
    • 26.24. Ada Configuration
    • 26.25. Directives
      • 26.25.1. rtems_get_build_label()
      • 26.25.2. rtems_get_copyright_notice()
      • 26.25.3. rtems_get_target_hash()
      • 26.25.4. rtems_get_version_string()
      • 26.25.5. rtems_configuration_get_do_zero_of_workspace()
      • 26.25.6. rtems_configuration_get_idle_task_stack_size()
      • 26.25.7. rtems_configuration_get_idle_task()
      • 26.25.8. rtems_configuration_get_interrupt_stack_size()
      • 26.25.9. rtems_configuration_get_maximum_barriers()
      • 26.25.10. rtems_configuration_get_maximum_extensions()
      • 26.25.11. rtems_configuration_get_maximum_message_queues()
      • 26.25.12. rtems_configuration_get_maximum_partitions()
      • 26.25.13. rtems_configuration_get_maximum_periods()
      • 26.25.14. rtems_configuration_get_maximum_ports()
      • 26.25.15. rtems_configuration_get_maximum_processors()
      • 26.25.16. rtems_configuration_get_maximum_regions()
      • 26.25.17. rtems_configuration_get_maximum_semaphores()
      • 26.25.18. rtems_configuration_get_maximum_tasks()
      • 26.25.19. rtems_configuration_get_maximum_timers()
      • 26.25.20. rtems_configuration_get_microseconds_per_tick()
      • 26.25.21. rtems_configuration_get_milliseconds_per_tick()
      • 26.25.22. rtems_configuration_get_nanoseconds_per_tick()
      • 26.25.23. rtems_configuration_get_number_of_initial_extensions()
      • 26.25.24. rtems_configuration_get_stack_allocate_for_idle_hook()
      • 26.25.25. rtems_configuration_get_stack_allocate_hook()
      • 26.25.26. rtems_configuration_get_stack_allocate_init_hook()
      • 26.25.27. rtems_configuration_get_stack_allocator_avoids_work_space()
      • 26.25.28. rtems_configuration_get_stack_free_hook()
      • 26.25.29. rtems_configuration_get_stack_space_size()
      • 26.25.30. rtems_configuration_get_ticks_per_timeslice()
      • 26.25.31. rtems_configuration_get_unified_work_area()
      • 26.25.32. rtems_configuration_get_user_extension_table()
      • 26.25.33. rtems_configuration_get_user_multiprocessing_table()
      • 26.25.34. rtems_configuration_get_work_space_size()
      • 26.25.35. rtems_configuration_get_rtems_api_configuration()
      • 26.25.36. rtems_resource_is_unlimited()
      • 26.25.37. rtems_resource_maximum_per_allocation()
      • 26.25.38. rtems_resource_unlimited()
    • 26.26. Obsolete Configuration Options
      • 26.26.1. CONFIGURE_BDBUF_BUFFER_COUNT
      • 26.26.2. CONFIGURE_BDBUF_BUFFER_SIZE
      • 26.26.3. CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
      • 26.26.4. CONFIGURE_ENABLE_GO
      • 26.26.5. CONFIGURE_GNAT_RTEMS
      • 26.26.6. CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
      • 26.26.7. CONFIGURE_HAS_OWN_BDBUF_TABLE
      • 26.26.8. CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
      • 26.26.9. CONFIGURE_HAS_OWN_INIT_TASK_TABLE
      • 26.26.10. CONFIGURE_HAS_OWN_MOUNT_TABLE
      • 26.26.11. CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
      • 26.26.12. CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
      • 26.26.13. CONFIGURE_MAXIMUM_ADA_TASKS
      • 26.26.14. CONFIGURE_MAXIMUM_DEVICES
      • 26.26.15. CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
      • 26.26.16. CONFIGURE_MAXIMUM_GO_CHANNELS
      • 26.26.17. CONFIGURE_MAXIMUM_GOROUTINES
      • 26.26.18. CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
      • 26.26.19. CONFIGURE_NUMBER_OF_TERMIOS_PORTS
      • 26.26.20. CONFIGURE_MAXIMUM_POSIX_BARRIERS
      • 26.26.21. CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
      • 26.26.22. CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
      • 26.26.23. CONFIGURE_MAXIMUM_POSIX_MUTEXES
      • 26.26.24. CONFIGURE_MAXIMUM_POSIX_RWLOCKS
      • 26.26.25. CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
      • 26.26.26. CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
      • 26.26.27. CONFIGURE_SMP_APPLICATION
      • 26.26.28. CONFIGURE_SMP_MAXIMUM_PROCESSORS
      • 26.26.29. CONFIGURE_TERMIOS_DISABLED
  • 27. Self-Contained Objects
    • 27.1. Introduction
    • 27.2. RTEMS Thread API
    • 27.3. Mutual Exclusion
      • 27.3.1. Static mutex initialization
      • 27.3.2. Run-time mutex initialization
      • 27.3.3. Lock the mutex
      • 27.3.4. Try to lock the mutex
      • 27.3.5. Unlock the mutex
      • 27.3.6. Set mutex name
      • 27.3.7. Get mutex name
      • 27.3.8. Mutex destruction
    • 27.4. Condition Variables
      • 27.4.1. Static condition variable initialization
      • 27.4.2. Run-time condition variable initialization
      • 27.4.3. Wait for condition signal
      • 27.4.4. Signals a condition change
      • 27.4.5. Broadcasts a condition change
      • 27.4.6. Set condition variable name
      • 27.4.7. Get condition variable name
      • 27.4.8. Condition variable destruction
    • 27.5. Counting Semaphores
      • 27.5.1. Static counting semaphore initialization
      • 27.5.2. Run-time counting semaphore initialization
      • 27.5.3. Wait for a counting semaphore
      • 27.5.4. Post a counting semaphore
      • 27.5.5. Set counting semaphore name
      • 27.5.6. Get counting semaphore name
      • 27.5.7. Counting semaphore destruction
    • 27.6. Binary Semaphores
      • 27.6.1. Static binary semaphore initialization
      • 27.6.2. Run-time binary semaphore initialization
      • 27.6.3. Wait for a binary semaphore
      • 27.6.4. Wait for a binary semaphore with timeout in ticks
      • 27.6.5. Tries to wait for a binary semaphore
      • 27.6.6. Post a binary semaphore
      • 27.6.7. Set binary semaphore name
      • 27.6.8. Get binary semaphore name
      • 27.6.9. Binary semaphore destruction
    • 27.7. Threads
  • 28. Multiprocessing Manager
    • 28.1. Introduction
    • 28.2. Background
      • 28.2.1. Nodes
      • 28.2.2. Global Objects
      • 28.2.3. Global Object Table
      • 28.2.4. Remote Operations
      • 28.2.5. Proxies
      • 28.2.6. Multiprocessor Configuration Table
    • 28.3. Multiprocessor Communications Interface Layer
      • 28.3.1. INITIALIZATION
      • 28.3.2. GET_PACKET
      • 28.3.3. RETURN_PACKET
      • 28.3.4. RECEIVE_PACKET
      • 28.3.5. SEND_PACKET
      • 28.3.6. Supporting Heterogeneous Environments
    • 28.4. Operations
      • 28.4.1. Announcing a Packet
    • 28.5. Directives
      • 28.5.1. rtems_multiprocessing_announce()
  • 29. Symmetric Multiprocessing (SMP)
    • 29.1. Introduction
    • 29.2. Background
      • 29.2.1. Application Configuration
      • 29.2.2. Examples
      • 29.2.3. Uniprocessor versus SMP Parallelism
      • 29.2.4. Task Affinity
      • 29.2.5. Task Migration
      • 29.2.6. Clustered Scheduling
      • 29.2.7. OpenMP
      • 29.2.8. Atomic Operations
    • 29.3. Application Issues
      • 29.3.1. Task variables
      • 29.3.2. Highest Priority Thread Never Walks Alone
      • 29.3.3. Disabling of Thread Preemption
      • 29.3.4. Disabling of Interrupts
      • 29.3.5. Interrupt Service Routines Execute in Parallel With Threads
      • 29.3.6. Timers Do Not Stop Immediately
      • 29.3.7. False Sharing of Cache Lines Due to Objects Table
    • 29.4. Implementation Details
      • 29.4.1. Low-Level Synchronization
      • 29.4.2. Internal Locking
      • 29.4.3. Profiling
      • 29.4.4. Scheduler Helping Protocol
      • 29.4.5. Thread Dispatch Details
      • 29.4.6. Per-Processor Data
      • 29.4.7. Thread Pinning
  • 30. PCI Library
    • 30.1. Introduction
    • 30.2. Background
      • 30.2.1. Software Components
      • 30.2.2. PCI Configuration
        • 30.2.2.1. RTEMS Configuration selection
        • 30.2.2.2. Auto Configuration
        • 30.2.2.3. Read Configuration
        • 30.2.2.4. Static Configuration
        • 30.2.2.5. Peripheral Configuration
      • 30.2.3. PCI Access
        • 30.2.3.1. Configuration space
        • 30.2.3.2. I/O space
        • 30.2.3.3. Registers over Memory space
        • 30.2.3.4. Access functions
        • 30.2.3.5. PCI address translation
      • 30.2.4. PCI Interrupt
      • 30.2.5. PCI Shell command
  • 31. Stack Bounds Checker
    • 31.1. Introduction
    • 31.2. Background
      • 31.2.1. Task Stack
      • 31.2.2. Execution
    • 31.3. Operations
      • 31.3.1. Initializing the Stack Bounds Checker
      • 31.3.2. Checking for Blown Task Stack
      • 31.3.3. Reporting Task Stack Usage
      • 31.3.4. When a Task Overflows the Stack
    • 31.4. Routines
      • 31.4.1. STACK_CHECKER_IS_BLOWN - Has Current Task Blown Its Stack
      • 31.4.2. STACK_CHECKER_REPORT_USAGE - Report Task Stack Usage
  • 32. CPU Usage Statistics
    • 32.1. Introduction
    • 32.2. Background
    • 32.3. Operations
      • 32.3.1. Report CPU Usage Statistics
      • 32.3.2. Reset CPU Usage Statistics
    • 32.4. Directives
      • 32.4.1. cpu_usage_report - Report CPU Usage Statistics
      • 32.4.2. cpu_usage_reset - Reset CPU Usage Statistics
  • 33. Object Services
    • 33.1. Introduction
    • 33.2. Background
      • 33.2.1. APIs
      • 33.2.2. Object Classes
      • 33.2.3. Object Names
    • 33.3. Operations
      • 33.3.1. Decomposing and Recomposing an Object Id
      • 33.3.2. Printing an Object Id
    • 33.4. Directives
      • 33.4.1. rtems_build_id()
      • 33.4.2. rtems_build_name()
      • 33.4.3. rtems_object_get_classic_name()
      • 33.4.4. rtems_object_get_name()
      • 33.4.5. rtems_object_set_name()
      • 33.4.6. rtems_object_id_get_api()
      • 33.4.7. rtems_object_id_get_class()
      • 33.4.8. rtems_object_id_get_node()
      • 33.4.9. rtems_object_id_get_index()
      • 33.4.10. rtems_object_id_api_minimum()
      • 33.4.11. rtems_object_id_api_maximum()
      • 33.4.12. rtems_object_api_minimum_class()
      • 33.4.13. rtems_object_api_maximum_class()
      • 33.4.14. rtems_object_get_api_name()
      • 33.4.15. rtems_object_get_api_class_name()
      • 33.4.16. rtems_object_get_class_information()
      • 33.4.17. rtems_object_get_local_node()
      • 33.4.18. RTEMS_OBJECT_ID_INITIAL()
  • 34. Chains
    • 34.1. Introduction
    • 34.2. Background
      • 34.2.1. Nodes
      • 34.2.2. Controls
    • 34.3. Operations
      • 34.3.1. Multi-threading
      • 34.3.2. Creating a Chain
      • 34.3.3. Iterating a Chain
    • 34.4. Directives
      • 34.4.1. Initialize Chain With Nodes
      • 34.4.2. Initialize Empty
      • 34.4.3. Is Null Node ?
      • 34.4.4. Head
      • 34.4.5. Tail
      • 34.4.6. Are Two Nodes Equal ?
      • 34.4.7. Is the Chain Empty
      • 34.4.8. Is this the First Node on the Chain ?
      • 34.4.9. Is this the Last Node on the Chain ?
      • 34.4.10. Does this Chain have only One Node ?
      • 34.4.11. Returns the node count of the chain (unprotected)
      • 34.4.12. Is this Node the Chain Head ?
      • 34.4.13. Is this Node the Chain Tail ?
      • 34.4.14. Extract a Node
      • 34.4.15. Extract a Node (unprotected)
      • 34.4.16. Get the First Node
      • 34.4.17. Get the First Node (unprotected)
      • 34.4.18. Insert a Node
      • 34.4.19. Insert a Node (unprotected)
      • 34.4.20. Append a Node
      • 34.4.21. Append a Node (unprotected)
      • 34.4.22. Prepend a Node
      • 34.4.23. Prepend a Node (unprotected)
  • 35. Red-Black Trees
    • 35.1. Introduction
    • 35.2. Background
      • 35.2.1. Nodes
      • 35.2.2. Controls
    • 35.3. Operations
    • 35.4. Directives
      • 35.4.1. Documentation for the Red-Black Tree Directives
  • 36. Timespec Helpers
    • 36.1. Introduction
    • 36.2. Background
      • 36.2.1. Time Storage Conventions
    • 36.3. Operations
      • 36.3.1. Set and Obtain Timespec Value
      • 36.3.2. Timespec Math
      • 36.3.3. Comparing struct timespec Instances
      • 36.3.4. Conversions and Validity Check
    • 36.4. Directives
      • 36.4.1. TIMESPEC_SET - Set struct timespec Instance
      • 36.4.2. TIMESPEC_ZERO - Zero struct timespec Instance
      • 36.4.3. TIMESPEC_IS_VALID - Check validity of a struct timespec instance
      • 36.4.4. TIMESPEC_ADD_TO - Add Two struct timespec Instances
      • 36.4.5. TIMESPEC_SUBTRACT - Subtract Two struct timespec Instances
      • 36.4.6. TIMESPEC_DIVIDE - Divide Two struct timespec Instances
      • 36.4.7. TIMESPEC_DIVIDE_BY_INTEGER - Divide a struct timespec Instance by an Integer
      • 36.4.8. TIMESPEC_LESS_THAN - Less than operator
      • 36.4.9. TIMESPEC_GREATER_THAN - Greater than operator
      • 36.4.10. TIMESPEC_EQUAL_TO - Check equality of timespecs
      • 36.4.11. TIMESPEC_GET_SECONDS - Get Seconds Portion of struct timespec Instance
      • 36.4.12. TIMESPEC_GET_NANOSECONDS - Get Nanoseconds Portion of the struct timespec Instance
      • 36.4.13. TIMESPEC_TO_TICKS - Convert struct timespec Instance to Ticks
      • 36.4.14. TIMESPEC_FROM_TICKS - Convert Ticks to struct timespec Representation
  • 37. Constant Bandwidth Server Scheduler API
    • 37.1. Introduction
    • 37.2. Background
      • 37.2.1. Constant Bandwidth Server Definitions
      • 37.2.2. Handling Periodic Tasks
      • 37.2.3. Registering a Callback Function
      • 37.2.4. Limitations
    • 37.3. Operations
      • 37.3.1. Setting up a server
      • 37.3.2. Attaching Task to a Server
      • 37.3.3. Detaching Task from a Server
      • 37.3.4. Examples
    • 37.4. Directives
      • 37.4.1. CBS_INITIALIZE - Initialize the CBS library
      • 37.4.2. CBS_CLEANUP - Cleanup the CBS library
      • 37.4.3. CBS_CREATE_SERVER - Create a new bandwidth server
      • 37.4.4. CBS_ATTACH_THREAD - Attach a thread to server
      • 37.4.5. CBS_DETACH_THREAD - Detach a thread from server
      • 37.4.6. CBS_DESTROY_SERVER - Destroy a bandwidth server
      • 37.4.7. CBS_GET_SERVER_ID - Get an ID of a server
      • 37.4.8. CBS_GET_PARAMETERS - Get scheduling parameters of a server
      • 37.4.9. CBS_SET_PARAMETERS - Set scheduling parameters
      • 37.4.10. CBS_GET_EXECUTION_TIME - Get elapsed execution time
      • 37.4.11. CBS_GET_REMAINING_BUDGET - Get remaining execution time
      • 37.4.12. CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time
  • 38. Ada Support
    • 38.1. Introduction
    • 38.2. Ada Programming Language Support
    • 38.3. Classic API Ada Bindings
  • 39. Linker Sets
    • 39.1. Introduction
    • 39.2. Background
    • 39.3. Directives
      • 39.3.1. RTEMS_LINKER_SET_BEGIN - Designator of the linker set begin marker
      • 39.3.2. RTEMS_LINKER_SET_END - Designator of the linker set end marker
      • 39.3.3. RTEMS_LINKER_SET_SIZE - The linker set size in characters
      • 39.3.4. RTEMS_LINKER_SET_ITEM_COUNT - The linker set item count
      • 39.3.5. RTEMS_LINKER_SET_IS_EMPTY - Is the linker set empty?
      • 39.3.6. RTEMS_LINKER_SET_FOREACH - Iterate through the linker set items
      • 39.3.7. RTEMS_LINKER_ROSET_DECLARE - Declares a read-only linker set
      • 39.3.8. RTEMS_LINKER_ROSET - Defines a read-only linker set
      • 39.3.9. RTEMS_LINKER_ROSET_ITEM_DECLARE - Declares a read-only linker set item
      • 39.3.10. RTEMS_LINKER_ROSET_ITEM_ORDERED_DECLARE - Declares an ordered read-only linker set item
      • 39.3.11. RTEMS_LINKER_ROSET_ITEM_REFERENCE - References a read-only linker set item
      • 39.3.12. RTEMS_LINKER_ROSET_ITEM - Defines a read-only linker set item
      • 39.3.13. RTEMS_LINKER_ROSET_ITEM_ORDERED - Defines an ordered read-only linker set item
      • 39.3.14. RTEMS_LINKER_ROSET_CONTENT - Marks a declaration as a read-only linker set content
      • 39.3.15. RTEMS_LINKER_RWSET_DECLARE - Declares a read-write linker set
      • 39.3.16. RTEMS_LINKER_RWSET - Defines a read-write linker set
      • 39.3.17. RTEMS_LINKER_RWSET_ITEM_DECLARE - Declares a read-write linker set item
      • 39.3.18. RTEMS_LINKER_RWSET_ITEM_ORDERED_DECLARE - Declares an ordered read-write linker set item
      • 39.3.19. RTEMS_LINKER_RWSET_ITEM_REFERENCE - References a read-write linker set item
      • 39.3.20. RTEMS_LINKER_RWSET_ITEM - Defines a read-write linker set item
      • 39.3.21. RTEMS_LINKER_RWSET_ITEM_ORDERED - Defines an ordered read-write linker set item
      • 39.3.22. RTEMS_LINKER_RWSET_CONTENT - Marks a declaration as a read-write linker set content
  • 40. Directive Status Codes
    • 40.1. Introduction
    • 40.2. Directives
      • 40.2.1. STATUS_TEXT - Returns the enumeration name for a status code
  • 41. Example Application
  • 42. Glossary
  • 43. References
Index
RTEMS Classic API Guide
  • »
  • 26. Configuring a System »
  • 26.21. BSP Related Configuration Options

26.21. 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.

26.21.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.

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.

CONSTRAINTS:

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

26.21.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.

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_STACK_SIZE.

CONSTRAINTS:

The following constraints apply to this configuration option:

  • The value of the configuration option shall be greater than or equal to a BSP-specific and application-specific minimum value.

  • The value of the configuration option 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.

26.21.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.

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.

CONSTRAINTS:

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

26.21.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.

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.

CONSTRAINTS:

The following constraints apply to this configuration option:

  • The value of the configuration option shall be greater than or equal to a BSP-specific and application-specific minimum value.

  • The value of the configuration option 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.

  • The value of the configuration option shall be aligned according to CPU_INTERRUPT_STACK_ALIGNMENT.

26.21.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.

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 add BSP-provided prerequisite drivers to the Device Driver Table.

NOTES:

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

CONSTRAINTS:

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

26.21.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

26.21.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, 2023 RTEMS Project and contributors

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