rtems_task Task_3( rtems_task_argument argument ) { rtems_status_code status; void *segment_address_1; void *segment_address_2; puts( "TA3 - rtems_region_get_segment - wait on 3750 byte segment from region 2" ); status = rtems_region_get_segment( Region_id[ 2 ], 3750, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA3 - got segment from region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; directive_failed( status, "rtems_region_return_segment" ); puts( "TA3 - rtems_region_get_segment - wait on 2K segment from region 3" ); status = rtems_region_get_segment( Region_id[ 3 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); }
rtems_task Task5( rtems_task_argument argument ) { void *segment_address_1; void *segment_address_2; rtems_status_code status; puts( "TA5 - rtems_region_get_segment - wait on 1.5K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 1536, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); puts_nocr( "TA5 - got and returned " ); Put_address_from_area_1( segment_address_1 ); new_line; /* * Use TOD_MICROSECONDS_TO_TICKS not RTEMS_MICROSECONDS_TO_TICKS to * test C implementation in SuperCore -- not macro version used * everywhere else. */ status = rtems_task_wake_after( TOD_MICROSECONDS_TO_TICKS( 1000000 ) ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA5 - rtems_region_get_segment - wait on 3K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); puts_nocr( "TA5 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_2 ); new_line; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_2 ); puts_nocr( "TA5 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_2 ); new_line; puts( "TA5 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Blocker( rtems_task_argument ignored ) { rtems_status_code sc; void *segment_address_2; puts( "Blocker - rtems_region_get_segment - OK"); sc = rtems_region_get_segment( Region, SECOND_ALLOC, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( sc, "rtems_region_get_segment" ); sc = rtems_region_return_segment( Region, segment_address_2 ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); puts( "Blocker - Got memory after resize" ); case_hit = true; (void) rtems_task_delete( RTEMS_SELF ); }
static void obtain_callback(rtems_id timer_id, void *arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; char buf [1]; size_t size = sizeof(buf); void *new_region_item = NULL; rtems_event_set events = 0; assert_time(T1); rtems_test_assert( !release_happened && !interrupt_happened && !delayed_happened && !interrupt_triggered_happened && !server_triggered_happened ); obtain_try = true; switch (resource_type) { case SEMAPHORE: sc = rtems_semaphore_obtain(semaphore, RTEMS_WAIT, RTEMS_NO_TIMEOUT); break; case MUTEX: sc = rtems_semaphore_obtain(mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT); break; case MESSAGE_QUEUE: sc = rtems_message_queue_receive( message_queue, buf, &size, RTEMS_WAIT, RTEMS_NO_TIMEOUT); break; case REGION: sc = rtems_region_get_segment( region, 1, RTEMS_WAIT, RTEMS_NO_TIMEOUT, &new_region_item); break; case EVENT: sc = rtems_event_receive( RTEMS_EVENT_0, RTEMS_EVENT_ALL | RTEMS_WAIT, RTEMS_NO_TIMEOUT, &events); break; case BARRIER: sc = rtems_barrier_wait(barrier, RTEMS_NO_TIMEOUT); break; case TASK_WAKE_AFTER: sc = rtems_task_wake_after(T4 - T1); break; default: rtems_test_assert(false); break; } directive_failed(sc, "obtain"); obtain_done = true; }
rtems_task Blocking_task( rtems_task_argument ignored ) { rtems_status_code status; void *address_1; puts( "Blocking_task - wait for memory" ); status = rtems_region_get_segment( Region, ALLOC_SIZE, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "Blocking_task - Got memory segment after freed" ); puts( "Blocking_task - delete self" ); status = rtems_task_delete(RTEMS_SELF); }
rtems_task Init(rtems_task_argument argument) { rtems_status_code sc = RTEMS_SUCCESSFUL; char region_area [256]; enum resource_type rt = SEMAPHORE; void *new_region_item = NULL; size_t i = 0; puts("\n\n*** TEST 68 ***"); for (i = 0; i < TIMER_COUNT; ++i) { sc = rtems_timer_create( rtems_build_name('T', 'I', 'M', '0' + i), &timer [i] ); directive_failed(sc, "rtems_timer_create"); } sc = rtems_timer_initiate_server( RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); directive_failed(sc, "rtems_timer_initiate_server"); sc = rtems_semaphore_create( rtems_build_name('S', 'E', 'M', 'A'), 0, RTEMS_LOCAL | RTEMS_FIFO | RTEMS_COUNTING_SEMAPHORE, 0, &semaphore ); directive_failed(sc, "rtems_semaphore_create"); sc = rtems_semaphore_create( rtems_build_name('M', 'U', 'T', 'X'), 0, RTEMS_LOCAL | RTEMS_FIFO | RTEMS_SIMPLE_BINARY_SEMAPHORE, 0, &mutex ); directive_failed(sc, "rtems_semaphore_create"); sc = rtems_message_queue_create( rtems_build_name('M', 'S', 'G', 'Q'), 1, 1, RTEMS_LOCAL | RTEMS_FIFO, &message_queue ); directive_failed(sc, "rtems_message_queue_create"); sc = rtems_region_create( rtems_build_name('R', 'E', 'G', 'I'), region_area, sizeof(region_area), 1, RTEMS_LOCAL | RTEMS_FIFO, ®ion ); directive_failed(sc, "rtems_region_create"); do { region_item = new_region_item; sc = rtems_region_get_segment( region, 1, RTEMS_NO_WAIT, 0, &new_region_item); } while (sc == RTEMS_SUCCESSFUL); sc = rtems_barrier_create( rtems_build_name('B', 'A', 'R', 'R'), RTEMS_LOCAL | RTEMS_FIFO, 2, &barrier ); directive_failed(sc, "rtems_barrier_create"); while (rt <= TASK_WAKE_AFTER) { test_case(rt); ++rt; } puts("*** END OF TEST 68 ***"); rtems_test_exit(0); }
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 ); }
void region_error_tests(void) { void *segment_address_1; void *segment_address_2; void *segment_address_3; uintptr_t segment_size; rtems_status_code status; Heap_Information_block the_info; rtems_id junk_id; Region_name[ 1 ] = rtems_build_name( 'R', 'N', '1', ' ' ); /* Check invalid name error case */ status = rtems_region_create( 0, Region_good_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_create with illegal name" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_NAME" ); /* Check NULL starting address error case */ status = rtems_region_create( Region_name[ 1 ], NULL, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); /* Invalid size */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, 0, 0, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_create with illegal size" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE" ); /* Check NULL id error case */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL id" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Region_id[ 1 ] ); directive_failed( status, "rtems_region_create" ); puts( "TA1 - rtems_region_create - RTEMS_SUCCESSFUL" ); /* extend NULL address */ status = rtems_region_extend( Region_id[ 1 ], NULL, REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with NULL" ); puts( "TA1 - rtems_region_extend - NULL address - RTEMS_INVALID_ADDRESS" ); /* extend within heap */ status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with address in heap" ); puts( "TA1 - rtems_region_extend - address within - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_region_create of too many" ); puts( "TA1 - rtems_region_create - RTEMS_TOO_MANY" ); status = rtems_region_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - local RTEMS_INVALID_ID" ); status = rtems_region_ident( 0, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_ident with illegal name" ); puts( "TA1 - rtems_region_ident - RTEMS_INVALID_NAME" ); /* Check get_information errors */ status = rtems_region_get_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_information with NULL information" ); puts( "TA1 - rtems_region_get_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_information with illegal id" ); puts( "TA1 - rtems_region_get_information - unknown RTEMS_INVALID_ID" ); /* Check get_free_information errors */ status = rtems_region_get_free_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_free_information with NULL information" ); puts( "TA1 - rtems_region_get_free_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_free_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_free_information with illegal id" ); puts( "TA1 - rtems_region_get_free_information - unknown RTEMS_INVALID_ID" ); /* get segment illegal id */ status = rtems_region_get_segment( 100, 0x40, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment with illegal id" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ID" ); /* get_segment with NULL param */ status = rtems_region_get_segment( Region_id[ 1 ], 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment with NULL param" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ADDRESS" ); /* get_segment with illegal 0 size */ status = rtems_region_get_segment( Region_id[ 1 ], 0, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with 0 size" ); puts( "TA1 - rtems_region_get_segment - 0 size - RTEMS_INVALID_SIZE" ); /* get_segment with illegal big size */ status = rtems_region_get_segment( Region_id[ 1 ], sizeof( Region_good_area ) * 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with big size" ); puts( "TA1 - rtems_region_get_segment - too big - RTEMS_INVALID_SIZE" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "TA1 - rtems_region_get_segment - RTEMS_SUCCESSFUL" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_region_get_segment unsatisfied" ); puts( "TA1 - rtems_region_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_get_segment - timeout in 3 seconds" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_DEFAULT_OPTIONS, 3 * rtems_clock_get_ticks_per_second(), &segment_address_3 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_region_get_segment timeout" ); puts( "TA1 - rtems_region_get_segment - woke up with RTEMS_TIMEOUT" ); /* Check get_segment_size errors */ status = rtems_region_get_segment_size( Region_id[ 1 ], NULL, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL segment" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( Region_id[ 1 ], segment_address_1, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL size" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( 100, segment_address_1, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment_size with illegal id" ); puts( "TA1 - rtems_region_get_segment_size - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( Region_id[ 1 ] ); fatal_directive_status( status, RTEMS_RESOURCE_IN_USE, "rtems_region_delete with buffers in use" ); puts( "TA1 - rtems_region_delete - RTEMS_RESOURCE_IN_USE" ); /* Check resize_segment errors */ status = rtems_region_resize_segment( Region_id[ 1 ], segment_address_3, 256, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL old size" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( Region_id[ 1 ], NULL, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL segment" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( 100, segment_address_3, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_resize_segment with illegal id" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ID" ); /* Check return_segment errors */ status = rtems_region_return_segment( 100, segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_return_segment with illegal id" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ID" ); status = rtems_region_return_segment( Region_id[ 1 ], Region_good_area ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with illegal segment" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); /* * The following generate internal heap errors. Thus this code * is subject to change if the heap code changes. */ puts( "TA1 - rtems_debug_disable - RTEMS_DEBUG_REGION" ); rtems_debug_disable( RTEMS_DEBUG_REGION ); puts( "TA1 - rtems_debug_enable - RTEMS_DEBUG_REGION" ); rtems_debug_enable( RTEMS_DEBUG_REGION ); status = rtems_region_extend( 100, Region_good_area, 128 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_extend with illegal id" ); puts( "TA1 - rtems_region_extend - RTEMS_INVALID_ID" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + 16 ], 128 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with illegal starting address" ); puts( "TA1 - rtems_region_extend - within heap - RTEMS_INVALID_ADDRESS" ); }
rtems_task Task_1( rtems_task_argument argument ) { void *address_1; void *address_2; void *address_3; void *address_4; void *address_5; void *address_6; void *address_7; void *address_8; rtems_id region_id; Heap_Information_block region_info; uintptr_t segment_size; rtems_status_code status; /* Obtain the region id */ status = rtems_region_ident(Region_name[ 1 ], ®ion_id); printf( "TA1 - rtems_region_ident - 0x%08" PRIxrtems_id "\n", region_id ); directive_failed(status, "rtems_region_ident of RN01"); /* Get a 64 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 64 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 64, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_1 ); new_line; /* Get the size of segment_1 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_1 ); new_line; status = rtems_region_get_segment_size(region_id, address_1, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 1"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get a 128 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 128 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_2 ); new_line; /* Get a 256 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 256 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 256, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_3 ); new_line; /* Get a 512 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 512 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 512, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_4 ); new_line; /* Get a 1024 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 1024 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 1024, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_5 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_5 ); new_line; /* Get a 2048 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 2048 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_6 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_6 ); new_line; /* Get a 4096 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 4096 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 4096, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_7 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_7 ); new_line; /* Get a 8192 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 8192 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 8192, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_8 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_8 ); new_line; /* Get the size of segment_8 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_8 ); new_line; status = rtems_region_get_segment_size(region_id, address_8, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 8"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get information about the region */ printf( "TA1 - rtems_region_get_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_information of RN01"); printf( "TA1 - got information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); printf( "TA1 - rtems_region_get_free_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_free_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_free_information of RN01"); printf( "TA1 - got free information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_3 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_4 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_1 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_2 ); status = rtems_region_return_segment( Region_id[ 1 ], address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_2 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_7 ); status = rtems_region_return_segment( Region_id[ 1 ], address_7 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_7 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_6 ); status = rtems_region_return_segment( Region_id[ 1 ], address_6 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_6 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_8 ); status = rtems_region_return_segment( Region_id[ 1 ], address_8 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_8 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_5 ); status = rtems_region_return_segment( Region_id[ 1 ], address_5 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_5 = 0; puts( "TA1 - rtems_region_delete - walks heap if debug enabled" ); rtems_region_delete(Region_id[ 1 ]); puts( "*** END OF TEST 25 ***" ); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_id task_id; rtems_status_code sc; void *segment_address_1; uintptr_t old_size; size_t first_alloc_size; TEST_BEGIN(); puts( "Init - rtems_task_create Blocker - OK" ); sc = rtems_task_create( rtems_build_name( 'B', 'L', 'C', 'K' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &task_id ); directive_failed( sc, "rtems_task_create of Blocker" ); puts( "Init - rtems_task_start Blocker - OK" ); sc = rtems_task_start( task_id, Blocker, 0 ); directive_failed( sc, "rtems_task_start of Blocker" ); puts( "Init - rtems_task_create Region - OK" ); sc = rtems_region_create( rtems_build_name( 'R', 'N', '1', ' ' ), Region_Memory, sizeof(Region_Memory), 16, RTEMS_DEFAULT_ATTRIBUTES, &Region ); directive_failed( sc, "rtems_region_create" ); puts( "Init - rtems_region_get_segment - OK"); first_alloc_size = sizeof( Region_Memory ); do { --first_alloc_size; sc = rtems_region_get_segment( Region, first_alloc_size, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_1 ); } while ( sc == RTEMS_UNSATISFIED || sc == RTEMS_INVALID_SIZE ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); puts( "Init - sleep 1 second for Blocker - OK"); sleep(1); /* Check resize_segment errors */ sc = rtems_region_resize_segment( Region, segment_address_1, RESIZE, &old_size); directive_failed( sc, "rtems_region_resize_segment" ); case_hit = false; puts( "Init - sleep 1 second for Blocker to run again - OK"); sleep(1); if ( case_hit ) { puts( "Init - successfully resized and unblocked a task" ); } else { puts( "Init - failed to resize and unblock a task" ); rtems_test_exit(0); } /* * Now resize and take all of memory so there is no need to * process any blocked tasks waiting for memory. */ puts( "Init - resized to all of available memory" ); sc = rtems_region_resize_segment( Region, segment_address_1, first_alloc_size, &old_size ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); TEST_END(); rtems_test_exit(0); }
rtems_task Task_1( rtems_task_argument argument ) { rtems_id rnid; void *segment_address_1; void *segment_address_2; void *segment_address_3; void *segment_address_4; rtems_status_code status; status = rtems_region_ident( Region_name[ 1 ], &rnid ); printf( "TA1 - rtems_region_ident - rnid => %08" PRIxrtems_id "\n", rnid ); directive_failed( status, "rtems_region_ident of RN1" ); puts( "TA1 - rtems_region_get_segment - wait on 100 byte segment from region 2" ); status = rtems_region_get_segment( Region_id[ 2 ], 100, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 3K segment from region 3" ); status = rtems_region_get_segment( Region_id[ 3 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 3 - " ); Put_address_from_area_3( segment_address_2 ); new_line; puts_nocr( "TA1 - rtems_region_get_segment - get 3080 byte segment " ); puts ( "from region 1 - NO_WAIT" ); status = rtems_region_get_segment( Region_id[ 1 ], 3080, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_3 ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); directive_failed( status, "rtems_task_wake_after" ); rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_region_get_segment - wait 10 seconds for 3K " "segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, 10 * rtems_clock_get_ticks_per_second(), &segment_address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_4 ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; status = rtems_region_return_segment( Region_id[ 2 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_task_delete - delete TA3" ); status = rtems_task_delete( Task_id[ 3 ] ); directive_failed( status, "rtems_task_delete of TA3" ); rtems_test_pause(); status = rtems_task_create( Task_name[ 4 ], BASE_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 4 ] ); directive_failed( status, "rtems_task_create of TA4" ); status = rtems_task_create( Task_name[ 5 ], BASE_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 5 ] ); directive_failed( status, "rtems_task_create of TA5" ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); status = rtems_task_start( Task_id[ 5 ], Task5, 0 ); directive_failed( status, "rtems_task_start of TA5" ); puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts_nocr( "TA1 - rtems_region_get_segment - wait 10 seconds for 3K " ); puts ( "segment from region 1"); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, 10 * rtems_clock_get_ticks_per_second(), &segment_address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_4 ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_task_delete - delete TA4" ); status = rtems_task_delete( Task_id[ 4 ] ); directive_failed( status, "rtems_task_delete of TA4" ); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); puts( "TA1 - rtems_region_delete - delete region 1" ); status = rtems_region_delete( Region_id[ 1 ] ); directive_failed( status, "rtems_region_delete" ); puts( "TA1 - rtems_region_get_segment - get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 4 - " ); Put_address_from_area_4( segment_address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_task_get_segment with no memory left" ); puts( "TA1 - rtems_task_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_extend - extend region 4 by 4K" ); status = rtems_region_extend( Region_id[ 4 ], &Area_4[4096], 4096 ); directive_failed( status, "rtems_region_extend" ); puts( "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got 3K segment from region 4 - " ); Put_address_from_area_4( segment_address_3 ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 4 - " ); Put_address_from_area_4( segment_address_1 ); status = rtems_region_return_segment( Region_id[ 4 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 4 - " ); Put_address_from_area_4( segment_address_3 ); status = rtems_region_return_segment( Region_id[ 4 ], segment_address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_region_delete - delete region 4" ); status = rtems_region_delete( Region_id[ 4 ] ); directive_failed( status, "rtems_region_delete" ); puts( "*** END OF TEST 16 ***" ); rtems_test_exit( 0 ); }
rtems_task Task_1( rtems_task_argument argument ) { uint32_t index; rtems_mode previous_mode; rtems_task_priority previous_priority; rtems_status_code status; Partition_name = rtems_build_name( 'P', 'A', 'R', 'T' ); benchmark_timer_initialize(); rtems_partition_create( Partition_name, Partition_area, PARTITION_SIZE, 128, RTEMS_DEFAULT_ATTRIBUTES, &Partition_id ); end_time = benchmark_timer_read(); put_time( "rtems_partition_create", end_time, 1, 0, CALLING_OVERHEAD_PARTITION_CREATE ); Region_name = rtems_build_name( 'R', 'E', 'G', 'N' ); benchmark_timer_initialize(); rtems_region_create( Region_name, Region_area, 2048, 16, RTEMS_DEFAULT_ATTRIBUTES, &Region_id ); end_time = benchmark_timer_read(); put_time( "rtems_region_create", end_time, 1, 0, CALLING_OVERHEAD_REGION_CREATE ); benchmark_timer_initialize(); (void) rtems_partition_get_buffer( Partition_id, &Buffer_address_1 ); end_time = benchmark_timer_read(); put_time( "rtems_partition_get_buffer: available", end_time, 1, 0, CALLING_OVERHEAD_PARTITION_GET_BUFFER ); buffer_count = 0; while ( FOREVER ) { status = rtems_partition_get_buffer( Partition_id, &Buffer_addresses[ buffer_count ] ); if ( status == RTEMS_UNSATISFIED ) break; buffer_count++; rtems_test_assert( buffer_count < PARTITION_BUFFER_POINTERS ); } benchmark_timer_initialize(); (void) rtems_partition_get_buffer( Partition_id, &Buffer_address_2 ); end_time = benchmark_timer_read(); put_time( "rtems_partition_get_buffer: not available", end_time, 1, 0, CALLING_OVERHEAD_PARTITION_GET_BUFFER ); benchmark_timer_initialize(); (void) rtems_partition_return_buffer( Partition_id, Buffer_address_1 ); end_time = benchmark_timer_read(); put_time( "rtems_partition_return_buffer", end_time, 1, 0, CALLING_OVERHEAD_PARTITION_RETURN_BUFFER ); for ( index = 0 ; index < buffer_count ; index++ ) { status = rtems_partition_return_buffer( Partition_id, Buffer_addresses[ index ] ); directive_failed( status, "rtems_partition_return_buffer" ); } benchmark_timer_initialize(); (void) rtems_partition_delete( Partition_id ); end_time = benchmark_timer_read(); put_time( "rtems_partition_delete", end_time, 1, 0, CALLING_OVERHEAD_PARTITION_DELETE ); status = rtems_region_get_segment( Region_id, 400, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_2 ); directive_failed( status, "region_get_segment" ); benchmark_timer_initialize(); (void) rtems_region_get_segment( Region_id, 400, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_3 ); end_time = benchmark_timer_read(); put_time( "rtems_region_get_segment: available", end_time, 1, 0, CALLING_OVERHEAD_REGION_GET_SEGMENT ); benchmark_timer_initialize(); (void) rtems_region_get_segment( Region_id, 1998, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &Buffer_address_4 ); end_time = benchmark_timer_read(); put_time( "rtems_region_get_segment: not available -- NO_WAIT", end_time, 1, 0, CALLING_OVERHEAD_REGION_GET_SEGMENT ); status = rtems_region_return_segment( Region_id, Buffer_address_3 ); directive_failed( status, "rtems_region_return_segment" ); benchmark_timer_initialize(); (void) rtems_region_return_segment( Region_id, Buffer_address_2 ); end_time = benchmark_timer_read(); put_time( "rtems_region_return_segment: no waiting tasks", end_time, 1, 0, CALLING_OVERHEAD_REGION_RETURN_SEGMENT ); status = rtems_region_get_segment( Region_id, 400, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_1 ); directive_failed( status, "rtems_region_get_segment" ); benchmark_timer_initialize(); (void) rtems_region_get_segment( Region_id, 1998, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_2 ); /* execute Task_2 */ end_time = benchmark_timer_read(); put_time( "rtems_region_return_segment: task readied -- preempts caller", end_time, 1, 0, CALLING_OVERHEAD_REGION_RETURN_SEGMENT ); status = rtems_region_return_segment( Region_id, Buffer_address_2 ); directive_failed( status, "rtems_region_return_segment" ); status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_task_set_priority( RTEMS_SELF, RTEMS_MAXIMUM_PRIORITY - 1u, &previous_priority ); directive_failed( status, "rtems_task_set_priority" ); status = rtems_region_get_segment( Region_id, 400, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_1 ); directive_failed( status, "rtems_region_return_segment" ); status = rtems_region_get_segment( Region_id, 1998, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &Buffer_address_2 ); directive_failed( status, "rtems_region_get_segment" ); /* execute Task_2 */ status = rtems_region_return_segment( Region_id, Buffer_address_2 ); directive_failed( status, "rtems_region_return_segment" ); benchmark_timer_initialize(); (void) rtems_region_delete( Region_id ); end_time = benchmark_timer_read(); put_time( "rtems_region_delete", end_time, 1, 0, CALLING_OVERHEAD_REGION_DELETE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) benchmark_timer_empty_function(); overhead = benchmark_timer_read(); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_initialize( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_initialize", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_INITIALIZE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_open( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_open", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_OPEN ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_close( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_close", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_CLOSE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_read( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_read", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_READ ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_write( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_write", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_WRITE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_io_control( _STUB_major, 0, NULL ); end_time = benchmark_timer_read(); put_time( "rtems_io_control", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_IO_CONTROL ); puts( "*** END OF TEST 20 ***" ); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; rtems_id task_id; void *address_1; rtems_task_priority priority; puts( "\n\n*** TEST 59 ***" ); priority = RTEMS_MAXIMUM_PRIORITY / 4; priority = (priority * 3) + (priority / 2); printf( "Init - blocking task priority will be %" PRIdrtems_task_priority "\n", priority ); puts( "Init - rtems_task_create - delay task - OK" ); status = rtems_task_create( rtems_build_name( 'T', 'A', '1', ' ' ), priority, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_OPTIONS, RTEMS_DEFAULT_ATTRIBUTES, &task_id ); directive_failed( status, "rtems_task_create" ); puts( "Init - rtems_task_start - delay task - OK" ); status = rtems_task_start( task_id, Blocking_task, 0 ); directive_failed( status, "rtems_task_start" ); puts( "Init - rtems_region_create - OK" ); status = rtems_region_create( rtems_build_name('R', 'N', '0', '1'), Region_Memory, sizeof( Region_Memory ), 64, RTEMS_PRIORITY, &Region ); directive_failed( status, "rtems_region_create of RN1" ); puts( "Init - rtems_region_get_segment - get segment to consume memory" ); rtems_region_get_segment( Region, ALLOC_SIZE, RTEMS_PRIORITY, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "Init - rtems_task_wake_after - let other task block - OK" ); status = rtems_task_wake_after( RTEMS_MILLISECONDS_TO_TICKS(1000) ); directive_failed( status, "rtems_task_wake_after" ); puts( "Init - rtems_region_get_segment - return segment" ); status = rtems_region_return_segment( Region, address_1 ); directive_failed( status, "rtems_region_return_segment" ); puts( "Init - rtems_task_wake_after - let other task run again - OK" ); status = rtems_task_wake_after( RTEMS_MILLISECONDS_TO_TICKS(1000) ); directive_failed( status, "rtems_task_wake_after" ); puts( "*** END OF TEST 59 ***" ); rtems_test_exit(0); }
rtems_task Task_2( rtems_task_argument argument ) { rtems_status_code status; rtems_task_priority previous_priority; void *segment_address_1; void *segment_address_2; puts( "TA2 - rtems_region_get_segment - wait on 2K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA2 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_1 ); new_line; puts_nocr( "TA2 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA2 - rtems_task_set_priority - make self highest priority task" ); status = rtems_task_set_priority( RTEMS_SELF, BASE_PRIORITY-1, &previous_priority ); directive_failed( status, "rtems_task_set_priority" ); puts("TA2 - rtems_region_get_segment - wait on 3750 byte segment"); status = rtems_region_get_segment( Region_id[ 2 ], 3750, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA2 - got segment from region 2 - "); Put_address_from_area_2( segment_address_2 ); new_line; puts_nocr( "TA2 - rtems_region_return_segment - return segment to region 2 - " ); Put_address_from_area_2( segment_address_2 ); status = rtems_region_return_segment( Region_id[ 2 ], segment_address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA2 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Task_1( rtems_task_argument argument ) { void *address_1; void *address_2; void *address_3; void *address_4; void *address_5; void *address_6; void *address_7; void *address_8; rtems_status_code status; rtems_id region_id; status = rtems_region_ident(Region_name[ 1 ], ®ion_id); printf( "TA1 - rtems_region_ident - 0x%08x\n", region_id ); directive_failed(status, "rtems_region_ident of RN01"); puts( "TA1 - rtems_region_get_segment - wait on 64 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 64, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 128 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_2 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 256 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 256, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_3 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 512 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 512, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_4 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 1024 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 1024, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_5 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_5 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 2048 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_6 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_6 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 4096 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 4096, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_7 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_7 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 8192 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 8192, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_8 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_8 ); new_line; rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_3 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_4 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_1 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_2 ); status = rtems_region_return_segment( Region_id[ 1 ], address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_2 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_7 ); status = rtems_region_return_segment( Region_id[ 1 ], address_7 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_7 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_6 ); status = rtems_region_return_segment( Region_id[ 1 ], address_6 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_6 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_8 ); status = rtems_region_return_segment( Region_id[ 1 ], address_8 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_8 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_5 ); status = rtems_region_return_segment( Region_id[ 1 ], address_5 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_5 = 0; puts( "TA1 - rtems_region_delete - walks heap if debug enabled" ); rtems_region_delete(Region_id[ 1 ]); puts( "*** END OF TEST 25 ***" ); rtems_test_exit( 0 ); }
void Screen12() { void *segment_address_1; void *segment_address_2; void *segment_address_3; uint32_t good_back_flag; uint32_t good_front_flag; uint32_t offset; uintptr_t segment_size; rtems_status_code status; Heap_Information_block the_info; /* Check invalid name error case */ status = rtems_region_create( 0, Region_good_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_create with illegal name" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_NAME" ); /* Check NULL starting address error case */ status = rtems_region_create( Region_name[ 1 ], NULL, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS - SKIPPED" ); #else status = rtems_region_create( Region_name[ 1 ], Region_bad_area, 0x40, 32, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with illegal address" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); #endif #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE - SKIPPED" ); #else status = rtems_region_create( Region_name[ 1 ], Region_good_area, 34, 34, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_create with illegal size" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_SIZE" ); #endif /* Check NULL id error case */ status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_create with NULL id" ); puts( "TA1 - rtems_region_create - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Region_id[ 1 ] ); directive_failed( status, "rtems_region_create" ); puts( "TA1 - rtems_region_create - RTEMS_SUCCESSFUL" ); /* extend NULL address */ status = rtems_region_extend( Region_id[ 1 ], NULL, REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with NULL" ); puts( "TA1 - rtems_region_extend - NULL address - RTEMS_INVALID_ADDRESS" ); /* extend within heap */ status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET ], REGION_LENGTH - 1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with address in heap" ); puts( "TA1 - rtems_region_extend - address within - RTEMS_INVALID_ADDRESS" ); status = rtems_region_create( Region_name[ 1 ], Region_good_area, REGION_LENGTH, 0x40, RTEMS_DEFAULT_ATTRIBUTES, &Junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_region_create of too many" ); puts( "TA1 - rtems_region_create - RTEMS_TOO_MANY" ); status = rtems_region_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_delete with illegal id" ); puts( "TA1 - rtems_region_delete - local RTEMS_INVALID_ID" ); status = rtems_region_ident( 0, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_region_ident with illegal name" ); puts( "TA1 - rtems_region_ident - RTEMS_INVALID_NAME" ); /* Check get_information errors */ status = rtems_region_get_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_information with NULL information" ); puts( "TA1 - rtems_region_get_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_information with illegal id" ); puts( "TA1 - rtems_region_get_information - unknown RTEMS_INVALID_ID" ); /* Check get_free_information errors */ status = rtems_region_get_free_information( Region_id[ 1 ], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_free_information with NULL information" ); puts( "TA1 - rtems_region_get_free_information - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_free_information( 100, &the_info ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_free_information with illegal id" ); puts( "TA1 - rtems_region_get_free_information - unknown RTEMS_INVALID_ID" ); /* get segment illegal id */ status = rtems_region_get_segment( 100, 0x40, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment with illegal id" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ID" ); /* get_segment with NULL param */ status = rtems_region_get_segment( Region_id[ 1 ], 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment with NULL param" ); puts( "TA1 - rtems_region_get_segment - RTEMS_INVALID_ADDRESS" ); /* get_segment with illegal 0 size */ status = rtems_region_get_segment( Region_id[ 1 ], 0, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with 0 size" ); puts( "TA1 - rtems_region_get_segment - 0 size - RTEMS_INVALID_SIZE" ); /* get_segment with illegal big size */ status = rtems_region_get_segment( Region_id[ 1 ], sizeof( Region_good_area ) * 2, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_region_get_segment with big size" ); puts( "TA1 - rtems_region_get_segment - too big - RTEMS_INVALID_SIZE" ); status = rtems_region_get_segment( Region_id[ 1 ], 384, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts( "TA1 - rtems_region_get_segment - RTEMS_SUCCESSFUL" ); status = rtems_region_get_segment( Region_id[ 1 ], REGION_LENGTH / 2, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_region_get_segment unsatisfied" ); puts( "TA1 - rtems_region_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_get_segment - timeout in 3 seconds" ); status = rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, 3 * rtems_clock_get_ticks_per_second(), &segment_address_3 ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_region_get_segment timeout" ); puts( "TA1 - rtems_region_get_segment - woke up with RTEMS_TIMEOUT" ); /* Check get_segment_size errors */ status = rtems_region_get_segment_size( Region_id[ 1 ], NULL, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL segment" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( Region_id[ 1 ], segment_address_1, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_get_segment_size with NULL size" ); puts( "TA1 - rtems_region_get_segment_size - RTEMS_INVALID_ADDRESS" ); status = rtems_region_get_segment_size( 100, segment_address_1, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_get_segment_size with illegal id" ); puts( "TA1 - rtems_region_get_segment_size - unknown RTEMS_INVALID_ID" ); status = rtems_region_delete( Region_id[ 1 ] ); fatal_directive_status( status, RTEMS_RESOURCE_IN_USE, "rtems_region_delete with buffers in use" ); puts( "TA1 - rtems_region_delete - RTEMS_RESOURCE_IN_USE" ); /* Check resize_segment errors */ status = rtems_region_resize_segment( Region_id[ 1 ], segment_address_3, 256, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL old size" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( Region_id[ 1 ], NULL, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_resize_segment with NULL segment" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ADDRESS" ); status = rtems_region_resize_segment( 100, segment_address_3, 256, &segment_size ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_resize_segment with illegal id" ); puts( "TA1 - rtems_region_resize_segment - RTEMS_INVALID_ID" ); /* Check return_segment errors */ status = rtems_region_return_segment( 100, segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_return_segment with illegal id" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ID" ); status = rtems_region_return_segment( Region_id[ 1 ], Region_good_area ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with illegal segment" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); /* * The following generate internal heap errors. Thus this code * is subject to change if the heap code changes. */ puts( "TA1 - rtems_debug_disable - RTEMS_DEBUG_REGION" ); rtems_debug_disable( RTEMS_DEBUG_REGION ); #if 0 offset = (segment_address_1 - (void *)Region_good_area) / 4; /* bad FRONT_FLAG error */ good_front_flag = Region_good_area[ offset - 1 ]; Region_good_area[ offset - 1 ] = good_front_flag + 2; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with back_flag != front_flag" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); Region_good_area[ offset - 1 ] = good_front_flag; /* bad FRONT_FLAG error */ good_back_flag = Region_good_area[ offset - 2 ]; Region_good_area[ offset - 2 ] = 1024; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_return_segment with back_flag != front_flag" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS" ); Region_good_area[ offset - 2 ] = good_back_flag; #else offset = 0; good_front_flag = 0; good_back_flag = 0; puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS - SKIPPED" ); puts( "TA1 - rtems_region_return_segment - RTEMS_INVALID_ADDRESS - SKIPPED" ); #endif puts( "TA1 - rtems_debug_enable - RTEMS_DEBUG_REGION" ); rtems_debug_enable( RTEMS_DEBUG_REGION ); status = rtems_region_extend( 100, Region_good_area, 128 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_region_extend with illegal id" ); puts( "TA1 - rtems_region_extend - RTEMS_INVALID_ID" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + 16 ], 128 ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_region_extend with illegal starting address" ); puts( "TA1 - rtems_region_extend - within heap - RTEMS_INVALID_ADDRESS" ); status = rtems_region_extend( Region_id[ 1 ], Region_bad_area, 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - non-contiguous lower - RTEMS_NOT_IMPLEMENTED" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET - REGION_LENGTH ], 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - contiguous lower - RTEMS_NOT_IMPLEMENTED" ); status = rtems_region_extend( Region_id[ 1 ], &Region_good_area[ REGION_START_OFFSET + REGION_LENGTH + 16 ], 128 ); fatal_directive_status( status, RTEMS_NOT_IMPLEMENTED, "rtems_region_extend with unsupported starting address" ); puts( "TA1 - rtems_region_extend - non-contiguous higher - RTEMS_NOT_IMPLEMENTED" ); }