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.20. FACE Technical Standard Related Configuration

26.20. FACE Technical Standard Related Configuration¶

This section describes configuration options related to adapting RTEMS behavior to be aligned with the FACE Technical Standard. The FACE Technical Standard is a product of the FACE Consortium which operates under the Open Group. The FACE Consortium was founded by avionics organizations to improve the portability of cockpit software across various platforms. It addresses technical and business concerns.

Most important from an RTEMS perspective, the FACE Technical Standard defines four POSIX profiles: Security, Safety Base, Safety Extended, and the General Purpose Profile. Each has an increasingly larger subset of POSIX APIs. In the Security and Safety profiles, ARINC 653 is required. It is optional in the General Purpose Profile.

The RTEMS Project has been tracking alignment with the FACE POSIX profiles and they are included in the “RTEMS POSIX 1003.1 Compliance Guide.”

26.20.1. CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR¶

CONSTANT:

CONFIGURE_POSIX_TIMERS_FACE_BEHAVIOR

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, then POSIX timers may not be created to use the CLOCK_REALTIME. Per POSIX, this is allowed behavior but per the FACE Technical Standard, it is not. Using POSIX timers based on CLOCK_REALTIME (e.g., time of day) is unsafe for real-time safety systems as setting CLOCK_REALTIME will perturb any active timers.

If this option is not defined, POSIX timers may be created to use the CLOCK_REALTIME in compliance with the POSIX specification.

Next Previous

© Copyright 1988, 2023 RTEMS Project and contributors

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