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
  • »
  • 12. Semaphore Manager

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()
Next Previous

© Copyright 1988, 2023 RTEMS Project and contributors

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