static bool test_body( void *arg ) { rtems_status_code sc; (void) arg; sc = rtems_rate_monotonic_cancel( Period ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); sc = rtems_rate_monotonic_period( Period, 1 ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); sc = rtems_rate_monotonic_period( Period, 1 ); rtems_test_assert( sc == RTEMS_SUCCESSFUL || sc == RTEMS_TIMEOUT ); return case_hit; }
rtems_task Task_1( rtems_task_argument argument ) { rtems_name name RTEMS_GCC_NOWARN_UNUSED; uint32_t index RTEMS_GCC_NOWARN_UNUSED; rtems_id id RTEMS_GCC_NOWARN_UNUSED; rtems_task_priority in_priority RTEMS_GCC_NOWARN_UNUSED; rtems_task_priority out_priority RTEMS_GCC_NOWARN_UNUSED; rtems_mode in_mode RTEMS_GCC_NOWARN_UNUSED; rtems_mode mask RTEMS_GCC_NOWARN_UNUSED; rtems_mode out_mode RTEMS_GCC_NOWARN_UNUSED; rtems_time_of_day time RTEMS_GCC_NOWARN_UNUSED; rtems_interval timeout RTEMS_GCC_NOWARN_UNUSED; rtems_signal_set signals RTEMS_GCC_NOWARN_UNUSED; void *address_1 RTEMS_GCC_NOWARN_UNUSED; rtems_event_set events RTEMS_GCC_NOWARN_UNUSED; long buffer[ 4 ] RTEMS_GCC_NOWARN_UNUSED; uint32_t count RTEMS_GCC_NOWARN_UNUSED; rtems_device_major_number major RTEMS_GCC_NOWARN_UNUSED; rtems_device_minor_number minor RTEMS_GCC_NOWARN_UNUSED; uint32_t io_result RTEMS_GCC_NOWARN_UNUSED; uint32_t error RTEMS_GCC_NOWARN_UNUSED; rtems_clock_get_options options RTEMS_GCC_NOWARN_UNUSED; name = rtems_build_name( 'N', 'A', 'M', 'E' ); in_priority = 250; in_mode = RTEMS_NO_PREEMPT; mask = RTEMS_PREEMPT_MASK; timeout = 100; signals = RTEMS_SIGNAL_1 | RTEMS_SIGNAL_3; major = 10; minor = 0; error = 100; options = 0; /* rtems_shutdown_executive */ benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_shutdown_executive( error ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_shutdown_executive", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_create( name, in_priority, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_ident( name, RTEMS_SEARCH_ALL_NODES, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_start */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_start( id, Task_1, 0 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_start", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_restart */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_restart( id, 0 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_restart", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_suspend */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_suspend( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_suspend", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_resume */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_resume( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_resume", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_set_priority */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_set_priority( id, in_priority, &out_priority ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_set_priority", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_mode */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_mode( in_mode, mask, &out_mode ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_mode", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_wake_when */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_wake_when( time ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_wake_when", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_task_wake_after */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_task_wake_after( timeout ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_task_wake_after", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_interrupt_catch */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_interrupt_catch( Isr_handler, 5, address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_interrupt_catch", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_clock_get */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_clock_get( options, time ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_clock_get", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_clock_set */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_clock_set( time ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_clock_set", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_clock_tick */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_clock_tick(); end_time = benchmark_timer_read(); put_time( "overhead: rtems_clock_tick", end_time, OPERATION_COUNT, overhead, 0 ); rtems_test_pause(); /* rtems_timer_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_create( name, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_ident( name, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_fire_after */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_fire_after( id, timeout, Timer_handler, NULL ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_fire_after", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_fire_when */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_fire_when( id, time, Timer_handler, NULL ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_fire_when", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_reset */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_reset( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_reset", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_timer_cancel */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_timer_cancel( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_timer_cancel", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_semaphore_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_semaphore_create( name, 128, RTEMS_DEFAULT_ATTRIBUTES, RTEMS_NO_PRIORITY, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_semaphore_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_semaphore_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_semaphore_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_semaphore_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_semaphore_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_semaphore_ident( name, RTEMS_SEARCH_ALL_NODES, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_semaphore_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_semaphore_obtain */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_semaphore_obtain( id, RTEMS_DEFAULT_OPTIONS, timeout ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_semaphore_obtain", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_semaphore_release */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_semaphore_release( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_semaphore_release", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_create( name, 128, RTEMS_DEFAULT_ATTRIBUTES, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_ident( name, RTEMS_SEARCH_ALL_NODES, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_send */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_send( id, (long (*)[4])buffer ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_send", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_urgent */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_urgent( id, (long (*)[4])buffer ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_urgent", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_broadcast */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_broadcast( id, (long (*)[4])buffer, &count ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_broadcast", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_receive */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_receive( id, (long (*)[4])buffer, RTEMS_DEFAULT_OPTIONS, timeout ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_receive", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_message_queue_flush */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_message_queue_flush( id, &count ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_message_queue_flush", end_time, OPERATION_COUNT, overhead, 0 ); rtems_test_pause(); /* rtems_event_send */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_event_send( id, events ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_event_send", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_event_receive */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, timeout, &events ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_event_receive", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_signal_catch */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_signal_catch( Asr_handler, RTEMS_DEFAULT_MODES ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_signal_catch", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_signal_send */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_signal_send( id, signals ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_signal_send", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_partition_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_partition_create( name, Memory_area, 2048, 128, RTEMS_DEFAULT_ATTRIBUTES, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_partition_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_partition_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_partition_ident( name, RTEMS_SEARCH_ALL_NODES, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_partition_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_partition_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_partition_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_partition_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_partition_get_buffer */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_partition_get_buffer( id, address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_partition_get_buffer", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_partition_return_buffer */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_partition_return_buffer( id, address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_partition_return_buffer", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_region_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_region_create( name, Memory_area, 2048, 128, RTEMS_DEFAULT_ATTRIBUTES, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_region_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_region_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_region_ident( name, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_region_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_region_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_region_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_region_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_region_get_segment */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_region_get_segment( id, 243, RTEMS_DEFAULT_OPTIONS, timeout, &address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_region_get_segment", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_region_return_segment */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_region_return_segment( id, address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_region_return_segment", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_port_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_port_create( name, Internal_port_area, External_port_area, 0xff, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_port_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_port_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_port_ident( name, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_port_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_port_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_port_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_port_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_port_external_to_internal */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_port_external_to_internal( id, &External_port_area[ 7 ], address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_port_external_to_internal", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_port_internal_to_external */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_port_internal_to_external( id, &Internal_port_area[ 7 ], address_1 ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_port_internal_to_external", end_time, OPERATION_COUNT, overhead, 0 ); rtems_test_pause(); /* rtems_io_initialize */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_initialize( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_initialize", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_io_open */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_open( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_open", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_io_close */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_close( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_close", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_io_read */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_read( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_read", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_io_write */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_write( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_write", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_io_control */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_io_control( major, minor, address_1, &io_result ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_io_control", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_fatal_error_occurred */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_fatal_error_occurred( error ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_fatal_error_occurred", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_rate_monotonic_create */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_rate_monotonic_create( name, &id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_rate_monotonic_create", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_rate_monotonic_ident */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_rate_monotonic_ident( name, id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_rate_monotonic_ident", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_rate_monotonic_delete */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_rate_monotonic_delete( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_rate_monotonic_delete", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_rate_monotonic_cancel */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_rate_monotonic_cancel( id ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_rate_monotonic_cancel", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_rate_monotonic_period */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_rate_monotonic_period( id, timeout ); end_time = benchmark_timer_read(); put_time( "overhead: rtems_rate_monotonic_period", end_time, OPERATION_COUNT, overhead, 0 ); /* rtems_multiprocessing_announce */ benchmark_timer_initialize(); for ( index = 1 ; index <= OPERATION_COUNT ; index ++ ) (void) rtems_multiprocessing_announce(); end_time = benchmark_timer_read(); put_time( "overhead: rtems_multiprocessing_announce", end_time, OPERATION_COUNT, overhead, 0 ); TEST_END(); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument argument ) { rtems_id id; uint32_t index; rtems_status_code status; Print_Warning(); puts( "\n\n*** TIME TEST 29 ***" ); Period_name = rtems_build_name( 'P', 'R', 'D', ' ' ); benchmark_timer_initialize(); (void) rtems_rate_monotonic_create( Period_name, &id ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_create", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_CREATE ); benchmark_timer_initialize(); (void) rtems_rate_monotonic_period( id, 10 ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_period: initiate period -- returns to caller", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD ); benchmark_timer_initialize(); (void) rtems_rate_monotonic_period( id, RTEMS_PERIOD_STATUS ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_period: obtain status", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD ); benchmark_timer_initialize(); (void) rtems_rate_monotonic_cancel( id ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_cancel", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL ); benchmark_timer_initialize(); (void) rtems_rate_monotonic_delete( id ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_delete: inactive", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_DELETE ); status = rtems_rate_monotonic_create( Period_name, &id ); directive_failed( status, "rtems_rate_monotonic_create" ); status = rtems_rate_monotonic_period( id, 10 ); directive_failed( status, "rtems_rate_monotonic_period" ); benchmark_timer_initialize(); rtems_rate_monotonic_delete( id ); end_time = benchmark_timer_read(); put_time( "rtems_rate_monotonic_delete: active", end_time, 1, 0, CALLING_OVERHEAD_RATE_MONOTONIC_DELETE ); #define LOOP_TASK_PRIORITY ((RTEMS_MAXIMUM_PRIORITY / 2u) + 1u) for ( index=1 ; index <= OPERATION_COUNT ; index++ ) { status = rtems_task_create( rtems_build_name( 'T', 'E', 'S', 'T' ), LOOP_TASK_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); directive_failed( status, "rtems_task_create LOOP" ); status = rtems_task_start( id, Tasks, 0 ); directive_failed( status, "rtems_task_start LOOP" ); } #define MIDDLE_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 2u) status = rtems_task_create( rtems_build_name( 'L', 'O', 'W', ' ' ), MIDDLE_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); directive_failed( status, "rtems_task_create LOW" ); status = rtems_task_start( id, Low_task, 0 ); directive_failed( status, "rtems_task_start LOW" ); Task_count = 0; status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Init( rtems_task_argument argument ) { rtems_id period_id; rtems_name period_name; rtems_rate_monotonic_period_status period_status; rtems_status_code status; rtems_rate_monotonic_period_statistics statistics; int i; period_name = rtems_build_name('P','E','R','1'); puts( "\n\n*** TEST 69 ***" ); /* create period */ status = rtems_rate_monotonic_create( period_name, &period_id ); directive_failed( status, "rate_monotonic_create" ); /* * Check get_status on an inactive period. */ puts( "rtems_rate_monotonic_get_status - verify values of an inactive period" ); status = rtems_rate_monotonic_get_status( period_id, &period_status ); directive_failed( status, "rate_monotonic_get_status" ); /* Check status values. */ rtems_test_assert( period_status.owner == rtems_task_self() ); rtems_test_assert( period_status.state == RATE_MONOTONIC_INACTIVE ); #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__ rtems_test_assert( period_status.since_last_period.tv_sec == 0 ); rtems_test_assert( period_status.since_last_period.tv_nsec == 0 ); rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 ); rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 ); #else rtems_test_assert( period_status.since_last_period == 0 ); rtems_test_assert( period_status.executed_since_last_period == 0 ); #endif /* * Check get_status error cases. */ puts( "rtems_rate_monotonic_get_status - check RTEMS_NOT_DEFINED" ); /* Do some work to get a non-zero cpu usage */ rtems_test_spin_for_ticks( 10 ); status = rtems_rate_monotonic_period( period_id, 100 ); directive_failed( status, "rate_monotonic_period" ); /* Do some more work */ rtems_test_spin_for_ticks( 10 ); /* Reset the cpu usage statistics. */ rtems_cpu_usage_reset(); /* Status should be undefined. */ status = rtems_rate_monotonic_get_status( period_id, &period_status ); fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_rate_monotonic_get_status after cpu usage reset" ); /* Clean up. */ status = rtems_rate_monotonic_cancel( period_id ); directive_failed( status, "rate_monotonic_cancel" ); /* * Check normal get_status results. */ puts( "rtems_rate_monotonic_get_status - verify values of an active period" ); rtems_test_spin_until_next_tick(); status = rtems_rate_monotonic_period( period_id, 100 ); directive_failed( status, "rate_monotonic_period" ); /* Do some work */ rtems_test_spin_for_ticks( 10 ); /* Block a little */ status = rtems_task_wake_after( 50 ); /* Check the status */ status = rtems_rate_monotonic_get_status( period_id, &period_status ); directive_failed( status, "rate_monotonic_get_status" ); /* Check status values. */ #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__ /* Note: POSIX mandates struct timespec->tv_nsec to be a "long" */ printf( "wall time should be ~600000000 is %ld\n", period_status.since_last_period.tv_nsec ); printf( "cpu time should be ~100000000 is %ld\n", period_status.executed_since_last_period.tv_nsec ); rtems_test_assert( period_status.since_last_period.tv_sec == 0 ); rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 ); rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 ); rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 ); rtems_test_assert( period_status.executed_since_last_period.tv_nsec >= 100000000 ); rtems_test_assert( period_status.executed_since_last_period.tv_nsec <= 110000000 ); #else printf( "wall time should be ~60 is %" PRId32 "\n", (int) period_status.since_last_period ); printf( "cpu time should be ~10 is %" PRId32 "\n", (int) period_status.executed_since_last_period ); rtems_test_assert( period_status.since_last_period >= 60 ); rtems_test_assert( period_status.since_last_period <= 61 ); rtems_test_assert( period_status.executed_since_last_period >= 10 ); rtems_test_assert( period_status.executed_since_last_period <= 12 ); #endif /* ensure the missed periods are properly accounted for */ puts( "rtems_rate_monotonic_cancel - OK" ); status = rtems_rate_monotonic_cancel( period_id ); directive_failed( status, "rate_monotonic_cancel" ); puts( "Testing statistics on missed periods" ); rtems_test_spin_until_next_tick(); status = rtems_rate_monotonic_period( period_id, 50 ); directive_failed( status, "rate_monotonic_period above loop" ); for ( i=1 ; i <= 3 ; i++ ) { status = rtems_task_wake_after( 100 ); directive_failed( status, "rtems_task_wake_after(100)" ); rtems_test_spin_until_next_tick(); status = rtems_rate_monotonic_period( period_id, 50 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_rate_monotonic_period 2-n" ); status = rtems_rate_monotonic_get_statistics( period_id, &statistics ); directive_failed( status, "rate_monotonic_get_statistics" ); if ( statistics.missed_count != i ) { printf( "Expected %d got %" PRIu32 " for missed_count\n", i, statistics.missed_count ); } rtems_test_assert( statistics.missed_count == i ); } puts( "*** END OF TEST 69 ***" ); rtems_test_exit(0); }
void Screen10() { rtems_rate_monotonic_period_status period_status; rtems_status_code status; /* * Check create error cases. */ status = rtems_rate_monotonic_create( Period_name[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_rate_monotonic_create with NULL param" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_INVALID_ADDRESS" ); status = rtems_rate_monotonic_create( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_rate_monotonic_create with illegal name" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_INVALID_NAME" ); status = rtems_rate_monotonic_create( Period_name[ 1 ], &Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_create successful" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_create( Period_name[ 1 ], &Junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_rate_monotonic_create of too many" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_TOO_MANY" ); /* * Check ident error cases. */ status = rtems_rate_monotonic_ident( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_rate_monotonic_ident with illegal name" ); puts( "TA1 - rtems_rate_monotonic_ident - RTEMS_INVALID_NAME" ); /* * Check period error cases. */ status = rtems_rate_monotonic_period( 100, 5 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_period with illegal id" ); puts( "TA1 - rtems_rate_monotonic_period - RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_period( rtems_build_id( 1, 1, 1, 256 ), 5 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_period with illegal id" ); puts( "TA1 - rtems_rate_monotonic_period - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], RTEMS_PERIOD_STATUS ); fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_rate_monotonic_period status not defined" ); puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_NOT_DEFINED" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 100 ); directive_failed( status, "rtems_rate_monotonic_period successful" ); puts( "TA1 - rtems_rate_monotonic_period - 100 ticks - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], RTEMS_PERIOD_STATUS ); directive_failed( status, "rtems_rate_monotonic_period status" ); puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_SUCCESSFUL" ); while ( FOREVER ) { status = rtems_rate_monotonic_period(Period_id[ 1 ], RTEMS_PERIOD_STATUS); if ( status == RTEMS_TIMEOUT ) break; directive_failed( status, "rtems_rate_monotonic_period waiting for timeout" ); rtems_task_wake_after( 1 ); } puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_TIMEOUT" ); /* * Check get_statistics error cases. */ status = rtems_rate_monotonic_get_statistics( Period_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_rate_monotonic_get_statistics with NULL param" ); puts( "TA1 - rtems_rate_monotonic_get_statistics - RTEMS_INVALID_ADDRESS" ); /* * Check get_status error cases. */ status = rtems_rate_monotonic_get_status( Period_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_rate_monotonic_get_status with NULL param" ); puts( "TA1 - rtems_rate_monotonic_get_status - RTEMS_INVALID_ADDRESS" ); status = rtems_rate_monotonic_get_status( 100, &period_status ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_get_status with illegal id" ); puts( "TA1 - rtems_rate_monotonic_get_status - RTEMS_INVALID_ID" ); /* * Check cancel error cases. */ status = rtems_rate_monotonic_cancel( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_cancel with illegal id" ); puts( "TA1 - rtems_rate_monotonic_cancel - RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_cancel( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_cancel will illegal id" ); puts( "TA1 - rtems_rate_monotonic_cancel - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_cancel( Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_cancel" ); puts( "TA1 - rtems_rate_monotonic_cancel - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 5 ); directive_failed( status, "rtems_rate_monotonic_period restart" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 5 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_rate_monotonic_period" ); puts( "TA1 - rtems_rate_monotonic_period - 5 ticks - RTEMS_TIMEOUT" ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); puts( "TA1 - yielding to TA4" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); /* * Check delete error cases. */ status = rtems_rate_monotonic_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_delete with illegal id" ); puts( "TA1 - rtems_rate_monotonic_delete - RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_delete with illegal id" ); puts( "TA1 - rtems_rate_monotonic_delete - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_delete( Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_delete" ); puts( "TA1 - rtems_rate_monotonic_delete - RTEMS_SUCCESSFUL" ); }
void Screen10() { rtems_status_code status; status = rtems_rate_monotonic_create( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_rate_monotonic_create with illegal name" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_INVALID_NAME" ); status = rtems_rate_monotonic_create( Period_name[ 1 ], &Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_create successful" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_create( Period_name[ 1 ], &Junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_rate_monotonic_create of too many" ); puts( "TA1 - rtems_rate_monotonic_create - RTEMS_TOO_MANY" ); status = rtems_rate_monotonic_ident( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_rate_monotonic_ident with illegal name" ); puts( "TA1 - rtems_rate_monotonic_ident - RTEMS_INVALID_NAME" ); status = rtems_rate_monotonic_period( 100, 5 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_period with illegal id" ); puts( "TA1 - rtems_rate_monotonic_period - unknown RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_period( 0x10100, 5 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_period with illegal id" ); puts( "TA1 - rtems_rate_monotonic_period - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], RTEMS_PERIOD_STATUS ); fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_rate_monotonic_period status not defined" ); puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_NOT_DEFINED" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 100 ); directive_failed( status, "rtems_rate_monotonic_period successful" ); puts( "TA1 - rtems_rate_monotonic_period - 100 ticks - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], RTEMS_PERIOD_STATUS ); directive_failed( status, "rtems_rate_monotonic_period status" ); puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_SUCCESSFUL" ); while ( FOREVER ) { status = rtems_rate_monotonic_period(Period_id[ 1 ], RTEMS_PERIOD_STATUS); if ( status == RTEMS_TIMEOUT ) break; directive_failed( status, "rtems_rate_monotonic_period waiting for timeout" ); } puts( "TA1 - rtems_rate_monotonic_period(RTEMS_PERIOD_STATUS) - RTEMS_TIMEOUT" ); status = rtems_rate_monotonic_cancel( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_cancel with illegal id" ); puts( "TA1 - rtems_rate_monotonic_cancel - unknown RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_cancel( 0x10100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_cancel will illegal id" ); puts( "TA1 - rtems_rate_monotonic_cancel - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_cancel( Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_cancel" ); puts( "TA1 - rtems_rate_monotonic_cancel - RTEMS_SUCCESSFUL" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 5 ); directive_failed( status, "rtems_rate_monotonic_period restart" ); status = rtems_task_wake_after( 1 * TICKS_PER_SECOND ); directive_failed( status, "rtems_task_wake_after" ); status = rtems_rate_monotonic_period( Period_id[ 1 ], 5 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_rate_monotonic_period" ); puts( "TA1 - rtems_rate_monotonic_period - 5 ticks - RTEMS_TIMEOUT" ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); puts( "TA1 - yielding to TA4" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); status = rtems_rate_monotonic_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_delete with illegal id" ); puts( "TA1 - rtems_rate_monotonic_delete - unknown RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_delete( 0x10100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_rate_monotonic_delete with illegal id" ); puts( "TA1 - rtems_rate_monotonic_delete - local RTEMS_INVALID_ID" ); status = rtems_rate_monotonic_delete( Period_id[ 1 ] ); directive_failed( status, "rtems_rate_monotonic_delete" ); puts( "TA1 - rtems_rate_monotonic_delete - RTEMS_SUCCESSFUL" ); }