RTEMS Documentation Project
RTEMS Classic API Guide
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
4.2.1. BSP_output_char_function_type
4.2.2. BSP_polling_getchar_function_type
4.2.3. Timer_Classes
4.2.4. rtems_api_configuration_table
4.2.5. rtems_asr
4.2.6. rtems_asr_entry
4.2.7. rtems_assert_context
4.2.8. rtems_attribute
4.2.9. rtems_device_driver
4.2.10. rtems_device_driver_entry
4.2.11. rtems_device_major_number
4.2.12. rtems_device_minor_number
4.2.13. rtems_driver_address_table
4.2.14. rtems_event_set
4.2.15. rtems_exception_frame
4.2.16. rtems_extensions_table
4.2.17. rtems_fatal_code
4.2.18. rtems_fatal_extension
4.2.19. rtems_fatal_source
4.2.20. rtems_id
4.2.21. rtems_initialization_tasks_table
4.2.22. rtems_interrupt_attributes
4.2.23. rtems_interrupt_entry
4.2.24. rtems_interrupt_handler
4.2.25. rtems_interrupt_level
4.2.26. rtems_interrupt_lock
4.2.27. rtems_interrupt_lock_context
4.2.28. rtems_interrupt_per_handler_routine
4.2.29. rtems_interrupt_server_action
4.2.30. rtems_interrupt_server_config
4.2.31. rtems_interrupt_server_control
4.2.32. rtems_interrupt_server_entry
4.2.33. rtems_interrupt_server_request
4.2.34. rtems_interrupt_signal_variant
4.2.35. rtems_interval
4.2.36. rtems_isr
4.2.37. rtems_isr_entry
4.2.38. rtems_message_queue_config
4.2.39. rtems_mode
4.2.40. rtems_mp_packet_classes
4.2.41. rtems_mpci_entry
4.2.42. rtems_mpci_get_packet_entry
4.2.43. rtems_mpci_initialization_entry
4.2.44. rtems_mpci_receive_packet_entry
4.2.45. rtems_mpci_return_packet_entry
4.2.46. rtems_mpci_send_packet_entry
4.2.47. rtems_mpci_table
4.2.48. rtems_multiprocessing_table
4.2.49. rtems_name
4.2.50. rtems_object_api_class_information
4.2.51. rtems_option
4.2.52. rtems_packet_prefix
4.2.53. rtems_rate_monotonic_period_states
4.2.54. rtems_rate_monotonic_period_statistics
4.2.55. rtems_rate_monotonic_period_status
4.2.56. rtems_regulator_attributes
4.2.57. rtems_regulator_deliverer
4.2.58. rtems_regulator_statistics
4.2.59. rtems_signal_set
4.2.60. rtems_stack_allocate_hook
4.2.61. rtems_stack_allocate_init_hook
4.2.62. rtems_stack_free_hook
4.2.63. rtems_status_code
4.2.64. rtems_task
4.2.65. rtems_task_argument
4.2.66. rtems_task_begin_extension
4.2.67. rtems_task_config
4.2.68. rtems_task_create_extension
4.2.69. rtems_task_delete_extension
4.2.70. rtems_task_entry
4.2.71. rtems_task_exitted_extension
4.2.72. rtems_task_priority
4.2.73. rtems_task_restart_extension
4.2.74. rtems_task_start_extension
4.2.75. rtems_task_switch_extension
4.2.76. rtems_task_terminate_extension
4.2.77. rtems_task_visitor
4.2.78. rtems_tcb
4.2.79. rtems_time_of_day
4.2.80. rtems_timer_information
4.2.81. rtems_timer_service_routine
4.2.82. rtems_timer_service_routine_entry
4.2.83. rtems_vector_number
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_priority()
8.4.34. rtems_interrupt_set_priority()
8.4.35. rtems_interrupt_get_affinity()
8.4.36. rtems_interrupt_set_affinity()
8.4.37. rtems_interrupt_get_attributes()
8.4.38. rtems_interrupt_handler_iterate()
8.4.39. rtems_interrupt_server_initialize()
8.4.40. rtems_interrupt_server_create()
8.4.41. rtems_interrupt_server_handler_install()
8.4.42. rtems_interrupt_server_handler_remove()
8.4.43. rtems_interrupt_server_set_affinity()
8.4.44. rtems_interrupt_server_delete()
8.4.45. rtems_interrupt_server_suspend()
8.4.46. rtems_interrupt_server_resume()
8.4.47. rtems_interrupt_server_move()
8.4.48. rtems_interrupt_server_handler_iterate()
8.4.49. rtems_interrupt_server_entry_initialize()
8.4.50. rtems_interrupt_server_action_prepend()
8.4.51. rtems_interrupt_server_entry_destroy()
8.4.52. rtems_interrupt_server_entry_submit()
8.4.53. rtems_interrupt_server_entry_move()
8.4.54. rtems_interrupt_server_request_initialize()
8.4.55. rtems_interrupt_server_request_set_vector()
8.4.56. rtems_interrupt_server_request_destroy()
8.4.57. 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. System Termination Procedure
23.2.3. Fatal Sources
23.2.4. 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_INIT
26.7.7. CONFIGURE_INITIAL_EXTENSIONS
26.7.8. CONFIGURE_INTERRUPT_STACK_SIZE
26.7.9. CONFIGURE_MALLOC_DIRTY
26.7.10. CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
26.7.11. CONFIGURE_MAXIMUM_PROCESSORS
26.7.12. CONFIGURE_MAXIMUM_THREAD_LOCAL_STORAGE_SIZE
26.7.13. CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
26.7.14. CONFIGURE_MEMORY_OVERHEAD
26.7.15. CONFIGURE_MESSAGE_BUFFER_MEMORY
26.7.16. CONFIGURE_MICROSECONDS_PER_TICK
26.7.17. CONFIGURE_MINIMUM_TASK_STACK_SIZE
26.7.18. CONFIGURE_STACK_CHECKER_ENABLED
26.7.19. CONFIGURE_TICKS_PER_TIMESLICE
26.7.20. CONFIGURE_UNIFIED_WORK_AREAS
26.7.21. CONFIGURE_UNLIMITED_ALLOCATION_SIZE
26.7.22. CONFIGURE_UNLIMITED_OBJECTS
26.7.23. CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
26.7.24. 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_JFFS2_DELAYED_WRITE_TASK_PRIORITY
26.14.27. CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
26.14.28. 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. Multiprocessing Configuration
26.21.1. CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
26.21.2. CONFIGURE_MP_APPLICATION
26.21.3. CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
26.21.4. CONFIGURE_MP_MAXIMUM_NODES
26.21.5. CONFIGURE_MP_MAXIMUM_PROXIES
26.21.6. CONFIGURE_MP_MPCI_TABLE_POINTER
26.21.7. CONFIGURE_MP_NODE_NUMBER
26.22. PCI Library Configuration
26.23. Ada Configuration
26.24. Directives
26.24.1. rtems_get_build_label()
26.24.2. rtems_get_copyright_notice()
26.24.3. rtems_get_target_hash()
26.24.4. rtems_get_version_string()
26.24.5. rtems_configuration_get_do_zero_of_workspace()
26.24.6. rtems_configuration_get_idle_task_stack_size()
26.24.7. rtems_configuration_get_idle_task()
26.24.8. rtems_configuration_get_interrupt_stack_size()
26.24.9. rtems_configuration_get_maximum_barriers()
26.24.10. rtems_configuration_get_maximum_extensions()
26.24.11. rtems_configuration_get_maximum_message_queues()
26.24.12. rtems_configuration_get_maximum_partitions()
26.24.13. rtems_configuration_get_maximum_periods()
26.24.14. rtems_configuration_get_maximum_ports()
26.24.15. rtems_configuration_get_maximum_processors()
26.24.16. rtems_configuration_get_maximum_regions()
26.24.17. rtems_configuration_get_maximum_semaphores()
26.24.18. rtems_configuration_get_maximum_tasks()
26.24.19. rtems_configuration_get_maximum_timers()
26.24.20. rtems_configuration_get_microseconds_per_tick()
26.24.21. rtems_configuration_get_milliseconds_per_tick()
26.24.22. rtems_configuration_get_nanoseconds_per_tick()
26.24.23. rtems_configuration_get_number_of_initial_extensions()
26.24.24. rtems_configuration_get_stack_allocate_for_idle_hook()
26.24.25. rtems_configuration_get_stack_allocate_hook()
26.24.26. rtems_configuration_get_stack_allocate_init_hook()
26.24.27. rtems_configuration_get_stack_allocator_avoids_work_space()
26.24.28. rtems_configuration_get_stack_free_hook()
26.24.29. rtems_configuration_get_stack_space_size()
26.24.30. rtems_configuration_get_ticks_per_timeslice()
26.24.31. rtems_configuration_get_unified_work_area()
26.24.32. rtems_configuration_get_user_extension_table()
26.24.33. rtems_configuration_get_user_multiprocessing_table()
26.24.34. rtems_configuration_get_work_space_size()
26.24.35. rtems_configuration_get_rtems_api_configuration()
26.24.36. rtems_resource_is_unlimited()
26.24.37. rtems_resource_maximum_per_allocation()
26.24.38. rtems_resource_unlimited()
26.25. Obsolete Configuration Options
26.25.1. CONFIGURE_BDBUF_BUFFER_COUNT
26.25.2. CONFIGURE_BDBUF_BUFFER_SIZE
26.25.3. CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
26.25.4. CONFIGURE_ENABLE_GO
26.25.5. CONFIGURE_GNAT_RTEMS
26.25.6. CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
26.25.7. CONFIGURE_HAS_OWN_BDBUF_TABLE
26.25.8. CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
26.25.9. CONFIGURE_HAS_OWN_INIT_TASK_TABLE
26.25.10. CONFIGURE_HAS_OWN_MOUNT_TABLE
26.25.11. CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
26.25.12. CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
26.25.13. CONFIGURE_MAXIMUM_ADA_TASKS
26.25.14. CONFIGURE_MAXIMUM_DEVICES
26.25.15. CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
26.25.16. CONFIGURE_MAXIMUM_GO_CHANNELS
26.25.17. CONFIGURE_MAXIMUM_GOROUTINES
26.25.18. CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
26.25.19. CONFIGURE_NUMBER_OF_TERMIOS_PORTS
26.25.20. CONFIGURE_MAXIMUM_POSIX_BARRIERS
26.25.21. CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
26.25.22. CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
26.25.23. CONFIGURE_MAXIMUM_POSIX_MUTEXES
26.25.24. CONFIGURE_MAXIMUM_POSIX_RWLOCKS
26.25.25. CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
26.25.26. CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
26.25.27. CONFIGURE_SMP_APPLICATION
26.25.28. CONFIGURE_SMP_MAXIMUM_PROCESSORS
26.25.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. Wait for a counting semaphore with timeout in ticks
27.5.5. Tries to wait for a counting semaphore
27.5.6. Post a counting semaphore
27.5.7. Set counting semaphore name
27.5.8. Get counting semaphore name
27.5.9. 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. Regulator Manager
28.1. Introduction
28.2. Background
28.2.1. Regulator Buffering
28.2.2. Message Delivery Rate
28.3. Operations
28.3.1. Application Sourcing Data
28.3.2. Delivery Function
28.4. Directives
28.4.1. rtems_regulator_create()
28.4.2. rtems_regulator_delete()
28.4.3. rtems_regulator_obtain_buffer()
28.4.4. rtems_regulator_release_buffer()
28.4.5. rtems_regulator_send()
28.4.6. rtems_regulator_get_statistics()
29. Multiprocessing Manager
29.1. Introduction
29.2. Background
29.2.1. Nodes
29.2.2. Global Objects
29.2.3. Global Object Table
29.2.4. Remote Operations
29.2.5. Proxies
29.2.6. Multiprocessor Configuration Table
29.3. Multiprocessor Communications Interface Layer
29.3.1. INITIALIZATION
29.3.2. GET_PACKET
29.3.3. RETURN_PACKET
29.3.4. RECEIVE_PACKET
29.3.5. SEND_PACKET
29.3.6. Supporting Heterogeneous Environments
29.4. Operations
29.4.1. Announcing a Packet
29.5. Directives
29.5.1. rtems_multiprocessing_announce()
30. Symmetric Multiprocessing (SMP)
30.1. Introduction
30.2. Background
30.2.1. Application Configuration
30.2.2. Examples
30.2.3. Uniprocessor versus SMP Parallelism
30.2.4. Task Affinity
30.2.5. Task Migration
30.2.6. Clustered Scheduling
30.2.7. OpenMP
30.2.8. Atomic Operations
30.3. Application Issues
30.3.1. Task variables
30.3.2. Highest Priority Thread Never Walks Alone
30.3.3. Disabling of Thread Preemption
30.3.4. Disabling of Interrupts
30.3.5. Interrupt Service Routines Execute in Parallel With Threads
30.3.6. Timers Do Not Stop Immediately
30.3.7. False Sharing of Cache Lines Due to Objects Table
30.4. Implementation Details
30.4.1. Low-Level Synchronization
30.4.2. Internal Locking
30.4.3. Profiling
30.4.4. Scheduler Helping Protocol
30.4.5. Thread Dispatch Details
30.4.6. Per-Processor Data
30.4.7. Thread Pinning
31. PCI Library
31.1. Introduction
31.2. Background
31.2.1. Software Components
31.2.2. PCI Configuration
31.2.2.1. RTEMS Configuration selection
31.2.2.2. Auto Configuration
31.2.2.3. Read Configuration
31.2.2.4. Static Configuration
31.2.2.5. Peripheral Configuration
31.2.3. PCI Access
31.2.3.1. Configuration space
31.2.3.2. I/O space
31.2.3.3. Registers over Memory space
31.2.3.4. Access functions
31.2.3.5. PCI address translation
31.2.4. PCI Interrupt
31.2.5. PCI Shell command
32. Stack Bounds Checker
32.1. Introduction
32.2. Background
32.2.1. Task Stack
32.2.2. Execution
32.3. Operations
32.3.1. Initializing the Stack Bounds Checker
32.3.2. Checking for Blown Task Stack
32.3.3. Reporting Task Stack Usage
32.3.4. When a Task Overflows the Stack
32.4. Routines
32.4.1. STACK_CHECKER_IS_BLOWN - Has Current Task Blown Its Stack
32.4.2. STACK_CHECKER_REPORT_USAGE - Report Task Stack Usage
33. CPU Usage Statistics
33.1. Introduction
33.2. Background
33.3. Operations
33.3.1. Report CPU Usage Statistics
33.3.2. Reset CPU Usage Statistics
33.4. Directives
33.4.1. cpu_usage_report - Report CPU Usage Statistics
33.4.2. cpu_usage_reset - Reset CPU Usage Statistics
34. Object Services
34.1. Introduction
34.2. Background
34.2.1. APIs
34.2.2. Object Classes
34.2.3. Object Names
34.3. Operations
34.3.1. Decomposing and Recomposing an Object Id
34.3.2. Printing an Object Id
34.4. Directives
34.4.1. rtems_build_id()
34.4.2. rtems_build_name()
34.4.3. rtems_object_get_classic_name()
34.4.4. rtems_object_get_name()
34.4.5. rtems_object_set_name()
34.4.6. rtems_object_id_get_api()
34.4.7. rtems_object_id_get_class()
34.4.8. rtems_object_id_get_node()
34.4.9. rtems_object_id_get_index()
34.4.10. rtems_object_id_api_minimum()
34.4.11. rtems_object_id_api_maximum()
34.4.12. rtems_object_api_minimum_class()
34.4.13. rtems_object_api_maximum_class()
34.4.14. rtems_object_get_api_name()
34.4.15. rtems_object_get_api_class_name()
34.4.16. rtems_object_get_class_information()
34.4.17. rtems_object_get_local_node()
34.4.18. RTEMS_OBJECT_ID_INITIAL()
35. Chains
35.1. Introduction
35.2. Background
35.2.1. Nodes
35.2.2. Controls
35.3. Operations
35.3.1. Multi-threading
35.3.2. Creating a Chain
35.3.3. Iterating a Chain
35.4. Directives
35.4.1. Initialize Chain With Nodes
35.4.2. Initialize Empty
35.4.3. Is Null Node ?
35.4.4. Head
35.4.5. Tail
35.4.6. Are Two Nodes Equal ?
35.4.7. Is the Chain Empty
35.4.8. Is this the First Node on the Chain ?
35.4.9. Is this the Last Node on the Chain ?
35.4.10. Does this Chain have only One Node ?
35.4.11. Returns the node count of the chain (unprotected)
35.4.12. Is this Node the Chain Head ?
35.4.13. Is this Node the Chain Tail ?
35.4.14. Extract a Node
35.4.15. Extract a Node (unprotected)
35.4.16. Get the First Node
35.4.17. Get the First Node (unprotected)
35.4.18. Insert a Node
35.4.19. Insert a Node (unprotected)
35.4.20. Append a Node
35.4.21. Append a Node (unprotected)
35.4.22. Prepend a Node
35.4.23. Prepend a Node (unprotected)
36. Red-Black Trees
36.1. Introduction
36.2. Background
36.2.1. Nodes
36.2.2. Controls
36.3. Operations
36.4. Directives
36.4.1. Documentation for the Red-Black Tree Directives
37. Timespec Helpers
37.1. Introduction
37.2. Background
37.2.1. Time Storage Conventions
37.3. Operations
37.3.1. Set and Obtain Timespec Value
37.3.2. Timespec Math
37.3.3. Comparing struct timespec Instances
37.3.4. Conversions and Validity Check
37.4. Directives
37.4.1. TIMESPEC_SET - Set struct timespec Instance
37.4.2. TIMESPEC_ZERO - Zero struct timespec Instance
37.4.3. TIMESPEC_IS_VALID - Check validity of a struct timespec instance
37.4.4. TIMESPEC_ADD_TO - Add Two struct timespec Instances
37.4.5. TIMESPEC_SUBTRACT - Subtract Two struct timespec Instances
37.4.6. TIMESPEC_DIVIDE - Divide Two struct timespec Instances
37.4.7. TIMESPEC_DIVIDE_BY_INTEGER - Divide a struct timespec Instance by an Integer
37.4.8. TIMESPEC_LESS_THAN - Less than operator
37.4.9. TIMESPEC_GREATER_THAN - Greater than operator
37.4.10. TIMESPEC_EQUAL_TO - Check equality of timespecs
37.4.11. TIMESPEC_GET_SECONDS - Get Seconds Portion of struct timespec Instance
37.4.12. TIMESPEC_GET_NANOSECONDS - Get Nanoseconds Portion of the struct timespec Instance
37.4.13. TIMESPEC_TO_TICKS - Convert struct timespec Instance to Ticks
37.4.14. TIMESPEC_FROM_TICKS - Convert Ticks to struct timespec Representation
38. Constant Bandwidth Server Scheduler API
38.1. Introduction
38.2. Background
38.2.1. Constant Bandwidth Server Definitions
38.2.2. Handling Periodic Tasks
38.2.3. Registering a Callback Function
38.2.4. Limitations
38.3. Operations
38.3.1. Setting up a server
38.3.2. Attaching Task to a Server
38.3.3. Detaching Task from a Server
38.3.4. Examples
38.4. Directives
38.4.1. CBS_INITIALIZE - Initialize the CBS library
38.4.2. CBS_CLEANUP - Cleanup the CBS library
38.4.3. CBS_CREATE_SERVER - Create a new bandwidth server
38.4.4. CBS_ATTACH_THREAD - Attach a thread to server
38.4.5. CBS_DETACH_THREAD - Detach a thread from server
38.4.6. CBS_DESTROY_SERVER - Destroy a bandwidth server
38.4.7. CBS_GET_SERVER_ID - Get an ID of a server
38.4.8. CBS_GET_PARAMETERS - Get scheduling parameters of a server
38.4.9. CBS_SET_PARAMETERS - Set scheduling parameters
38.4.10. CBS_GET_EXECUTION_TIME - Get elapsed execution time
38.4.11. CBS_GET_REMAINING_BUDGET - Get remaining execution time
38.4.12. CBS_GET_APPROVED_BUDGET - Get scheduler approved execution time
39. Ada Support
39.1. Introduction
39.2. Ada Programming Language Support
39.3. Classic API Ada Bindings
40. Linker Sets
40.1. Introduction
40.2. Background
40.3. Directives
40.3.1. RTEMS_LINKER_SET_BEGIN - Designator of the linker set begin marker
40.3.2. RTEMS_LINKER_SET_END - Designator of the linker set end marker
40.3.3. RTEMS_LINKER_SET_SIZE - The linker set size in characters
40.3.4. RTEMS_LINKER_SET_ITEM_COUNT - The linker set item count
40.3.5. RTEMS_LINKER_SET_IS_EMPTY - Is the linker set empty?
40.3.6. RTEMS_LINKER_SET_FOREACH - Iterate through the linker set items
40.3.7. RTEMS_LINKER_ROSET_DECLARE - Declares a read-only linker set
40.3.8. RTEMS_LINKER_ROSET - Defines a read-only linker set
40.3.9. RTEMS_LINKER_ROSET_ITEM_DECLARE - Declares a read-only linker set item
40.3.10. RTEMS_LINKER_ROSET_ITEM_ORDERED_DECLARE - Declares an ordered read-only linker set item
40.3.11. RTEMS_LINKER_ROSET_ITEM_REFERENCE - References a read-only linker set item
40.3.12. RTEMS_LINKER_ROSET_ITEM - Defines a read-only linker set item
40.3.13. RTEMS_LINKER_ROSET_ITEM_ORDERED - Defines an ordered read-only linker set item
40.3.14. RTEMS_LINKER_ROSET_CONTENT - Marks a declaration as a read-only linker set content
40.3.15. RTEMS_LINKER_RWSET_DECLARE - Declares a read-write linker set
40.3.16. RTEMS_LINKER_RWSET - Defines a read-write linker set
40.3.17. RTEMS_LINKER_RWSET_ITEM_DECLARE - Declares a read-write linker set item
40.3.18. RTEMS_LINKER_RWSET_ITEM_ORDERED_DECLARE - Declares an ordered read-write linker set item
40.3.19. RTEMS_LINKER_RWSET_ITEM_REFERENCE - References a read-write linker set item
40.3.20. RTEMS_LINKER_RWSET_ITEM - Defines a read-write linker set item
40.3.21. RTEMS_LINKER_RWSET_ITEM_ORDERED - Defines an ordered read-write linker set item
40.3.22. RTEMS_LINKER_RWSET_CONTENT - Marks a declaration as a read-write linker set content
41. Directive Status Codes
41.1. Introduction
41.2. Directives
41.2.1. STATUS_TEXT - Returns the enumeration name for a status code
42. Example Application
43. Glossary
44. 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()