void _Signal_Action_handler( Thread_Control *executing, Thread_Action *action, ISR_lock_Context *lock_context ) { RTEMS_API_Control *api; ASR_Information *asr; rtems_signal_set signal_set; Modes_Control prev_mode; (void) action; /* * Signal Processing */ api = executing->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; signal_set = _ASR_Get_posted_signals( asr ); _Thread_State_release( executing, lock_context ); if ( signal_set == 0 ) { return; } asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_task_priority old_priority; rtems_mode old_mode; uint32_t task; /* lower the task priority to allow created tasks to execute */ rtems_task_set_priority( RTEMS_SELF, RTEMS_MAXIMUM_PRIORITY - 1, &old_priority); rtems_task_mode(RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode); printf( "\n*** UNLIMITED TASK TEST ***\n" ); /* * Invalid state if the task id is 0 */ for (task = 0; task < MAX_TASKS; task++) task_id[task] = 0; test1(); test2(); test3(); printf( "\n*** END OF UNLIMITED TASK TEST ***\n" ); exit( 0 ); }
/* TASK A/B */ rtems_task TaskAB_entry(rtems_task_argument me) { static rtems_mode previous_mode_set; rtems_status_code status; uint32_t iterations = 0; status = rtems_task_mode( RTEMS_PREEMPT | RTEMS_TIMESLICE, RTEMS_PREEMPT_MASK | RTEMS_TIMESLICE_MASK, &previous_mode_set ); directive_failed(status, "Unable to change task mode."); while(1) { if (turn == me) { printf( "Task #%" PRIdrtems_task_argument "'s turn. Now setting turn to %" PRIdrtems_task_argument "\n", me, 1 - me ); if ( ++iterations == 10 ) { TEST_END(); exit( 0 ); } turn = 1 - me; } } }
static rtems_mode get_interrupt_level( void ) { rtems_status_code sc; rtems_mode mode; sc = rtems_task_mode( RTEMS_CURRENT_MODE, RTEMS_CURRENT_MODE, &mode ); rtems_test_assert( sc == RTEMS_SUCCESSFUL ); return mode & RTEMS_INTERRUPT_MASK; }
int rtems_gxx_once(__gthread_once_t *once, void (*func) (void)) { #ifdef DEBUG_GXX_WRAPPERS printk( "gxx_wrappers: once=%x, func=%x\n", *once, func ); #endif if ( *(volatile __gthread_once_t *)once == 0 ) { rtems_mode saveMode; __gthread_once_t o; rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &saveMode); if ( (o = *(volatile __gthread_once_t *)once) == 0 ) { *(volatile __gthread_once_t *)once = 1; } rtems_task_mode(saveMode, RTEMS_PREEMPT_MASK, &saveMode); if ( o == 0 ) (*func)(); } return 0; }
void Get_all_counters() { rtems_mode previous_mode; rtems_status_code status; status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode to RTEMS_NO_PREEMPT" ); Temporary_count = Count; Count.count[ 1 ] = 0; Count.count[ 2 ] = 0; Count.count[ 3 ] = 0; Count.count[ 4 ] = 0; Count.count[ 5 ] = 0; status = rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode to RTEMS_PREEMPT" ); }
static void _RTEMS_tasks_Post_switch_extension( Thread_Control *executing ) { ISR_Level level; RTEMS_API_Control *api; ASR_Information *asr; rtems_signal_set signal_set; Modes_Control prev_mode; api = executing->API_Extensions[ THREAD_API_RTEMS ]; if ( !api ) return; /* * Signal Processing */ asr = &api->Signal; _ISR_Disable( level ); signal_set = asr->signals_posted; asr->signals_posted = 0; _ISR_Enable( level ); if ( !signal_set ) /* similar to _ASR_Are_signals_pending( asr ) */ return; asr->nest_level += 1; rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); (*asr->handler)( signal_set ); asr->nest_level -= 1; rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); }
rtems_task test_asr(rtems_task_argument unused) { rtems_mode mode; rtems_task_mode(0, RTEMS_CURRENT_MODE, &mode); if ( (mode & RTEMS_NO_ASR) == 0 ) { puts( "ERROR - disable ASR not honored" ); printf( "mode = 0x%08" PRIXrtems_mode " asr = %s\n", mode, (mode & RTEMS_NO_ASR) ? "OFF" : "ON" ); } else puts( "Creating task with ASR disable mode honored" ); puts( "*** END OF TEST 47 ***" ); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument ignored ) { #if BSP_SMALL_MEMORY printf("NO Capture Engine. MEMORY TOO SMALL"); #else rtems_status_code status; rtems_task_priority old_priority; rtems_mode old_mode; puts( "\n\n*** TEST CAPTURE ENGINE ***" ); status = rtems_shell_wait_for_input( STDIN_FILENO, 20, notification, NULL ); if (status == RTEMS_SUCCESSFUL) { /* lower the task priority to allow created tasks to execute */ rtems_task_set_priority(RTEMS_SELF, 20, &old_priority); rtems_task_mode(RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode); while (!can_proceed) { printf ("Sleeping\n"); usleep (1000000); } rtems_monitor_init (0); rtems_capture_cli_init (0); setup_tasks_to_watch (); rtems_task_delete (RTEMS_SELF); } else { puts( "*** END OF TEST CAPTURE ENGINE ***" ); exit( 0 ); } #endif }
void Exit_test( void ) { rtems_status_code status; rtems_mode old_mode; /* * Wait a bit before shutting down so we don't screw up the other node * when our MPCI shuts down */ rtems_task_wake_after(20); status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode ); directive_failed( status, "rtems_task_mode" ); MPCI_Print_statistics(); rtems_shutdown_executive( 0 ); }
rtems_task Delayed_events_task( rtems_task_argument argument ) { uint32_t count; uint32_t previous_mode; rtems_status_code status; rtems_event_set events; status = rtems_task_mode( RTEMS_PREEMPT | RTEMS_TIMESLICE, RTEMS_PREEMPT_MASK | RTEMS_TIMESLICE_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_timer_create( Timer_name[ 1 ], &Timer_id[ 1 ] ); directive_failed( status, "rtems_timer_create" ); while ( Stop_Test == FALSE ) { for ( count=DELAYED_EVENT_DOT_COUNT; Stop_Test == FALSE && count; count-- ){ status = rtems_timer_fire_after( Timer_id[ 1 ], 1, Delayed_send_event, NULL ); directive_failed( status, "rtems_timer_reset" ); status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &events ); directive_failed( status, "rtems_event_receive" ); } put_dot('.'); } Exit_test(); }
static void test(void) { test_context *ctx = &ctx_instance; rtems_status_code sc; rtems_mode mode; ctx->consumer = rtems_task_self(); ctx->consumer_processor = rtems_get_current_processor(); sc = rtems_signal_catch(signal_handler, RTEMS_DEFAULT_MODES); rtems_test_assert(sc == RTEMS_SUCCESSFUL); sc = rtems_task_create( rtems_build_name('P', 'R', 'O', 'D'), RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &ctx->producer ); rtems_test_assert(sc == RTEMS_SUCCESSFUL); sc = rtems_task_start(ctx->producer, producer, (rtems_task_argument) ctx); rtems_test_assert(sc == RTEMS_SUCCESSFUL); check_consumer_processor(ctx); wait_for_state(ctx, SIG_0_SENT); change_state(ctx, SIG_0_ENABLE); sc = rtems_task_mode(RTEMS_ASR, RTEMS_ASR_MASK, &mode); rtems_test_assert(sc == RTEMS_SUCCESSFUL); wait_for_state(ctx, SIG_0_PROCESSED); check_consumer_processor(ctx); change_state(ctx, SIG_1_READY); wait_for_state(ctx, SIG_1_PROCESSED); check_consumer_processor(ctx); }
static void test(void) { rtems_status_code sc; rtems_mode mode; rtems_id id; rtems_test_assert(rtems_configuration_is_smp_enabled()); sc = rtems_task_mode(RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &mode); rtems_test_assert(sc == RTEMS_NOT_IMPLEMENTED); sc = rtems_task_create( rtems_build_name('T', 'A', 'S', 'K'), RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_NO_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &id ); rtems_test_assert(sc == RTEMS_UNSATISFIED); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; rtems_task_priority old_priority; rtems_mode old_mode; rtems_print_printer_fprintf_putc(&rtems_test_printer); TEST_BEGIN(); status = rtems_shell_wait_for_input( STDIN_FILENO, 20, notification, NULL ); if (status == RTEMS_SUCCESSFUL) { /* lower the task priority to allow created tasks to execute */ rtems_task_set_priority(RTEMS_SELF, 20, &old_priority); rtems_task_mode(RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode); while (!can_proceed) { printf ("Sleeping\n"); usleep (1000000); } rtems_monitor_init (0); rtems_capture_cli_init (0); setup_tasks_to_watch (); rtems_task_delete (RTEMS_SELF); } else { TEST_END(); 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 Screen1() { uint32_t notepad_value; rtems_id self_id; rtems_task_priority previous_priority; rtems_status_code status; /* bad Id */ status = rtems_task_is_suspended( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_set_priority with illegal id" ); puts( "TA1 - rtems_task_is_suspended - RTEMS_INVALID_ID" ); /* bad Id */ status = rtems_task_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_delete with illegal id" ); puts( "TA1 - rtems_task_delete - RTEMS_INVALID_ID" ); /* NULL return */ status = rtems_task_get_note( RTEMS_SELF, RTEMS_NOTEPAD_FIRST, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_get_note with NULL param" ); puts( "TA1 - rtems_task_get_note - RTEMS_INVALID_ADDRESS" ); /* note too high */ status = rtems_task_get_note( RTEMS_SELF, 100, ¬epad_value ); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_task_get_note with illegal notepad" ); puts( "TA1 - rtems_task_get_note - RTEMS_INVALID_NUMBER" ); /* bad Id */ status = rtems_task_get_note( 100, RTEMS_NOTEPAD_LAST, ¬epad_value ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_get_note with illegal id" ); puts( "TA1 - rtems_task_get_note - RTEMS_INVALID_ID" ); /* unused Id so invalid now */ status = rtems_task_get_note( _RTEMS_tasks_Information.maximum_id, RTEMS_NOTEPAD_LAST, ¬epad_value ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_get_note with illegal id" ); puts( "TA1 - rtems_task_get_note - RTEMS_INVALID_ID" ); status = rtems_task_get_note( _RTEMS_tasks_Information.minimum_id + (3L<<OBJECTS_API_START_BIT), RTEMS_NOTEPAD_LAST, ¬epad_value ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_get_note with illegal id" ); status = rtems_task_get_note( rtems_build_id( OBJECTS_CLASSIC_API, 2, 1, 1 ), RTEMS_NOTEPAD_LAST, ¬epad_value ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_get_note with non-task ID" ); /* NULL param */ status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_ident NULL param" ); puts( "TA1 - rtems_task_ident - RTEMS_INVALID_ADDRESS" ); /* OK */ status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &self_id ); directive_failed( status, "rtems_task_ident of self" ); if ( self_id != Task_id[ 1 ] ) { puts( "ERROR - rtems_task_ident - incorrect ID returned!" ); } puts( "TA1 - rtems_task_ident - current task RTEMS_SUCCESSFUL" ); status = rtems_task_ident( 100, RTEMS_SEARCH_ALL_NODES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal name (local)" ); puts( "TA1 - rtems_task_ident - global RTEMS_INVALID_NAME" ); status = rtems_task_ident( 100, 1, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal name (global)" ); puts( "TA1 - rtems_task_ident - local RTEMS_INVALID_NAME" ); /* * This one case is different if MP is enabled/disabled. */ status = rtems_task_ident( 100, 2, &Junk_id ); #if defined(RTEMS_MULTIPROCESSING) fatal_directive_status( status, RTEMS_INVALID_NODE, "rtems_task_ident with illegal node" ); #else fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal node" ); #endif puts( "TA1 - rtems_task_ident - RTEMS_INVALID_NODE" ); status = rtems_task_restart( 100, 0 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_restart with illegal id" ); puts( "TA1 - rtems_task_restart - RTEMS_INVALID_ID" ); status = rtems_task_resume( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_resume with illegal id" ); puts( "TA1 - rtems_task_resume - RTEMS_INVALID_ID" ); status = rtems_task_resume( RTEMS_SELF ); fatal_directive_status( status, RTEMS_INCORRECT_STATE, "rtems_task_resume of ready task" ); puts( "TA1 - rtems_task_resume - RTEMS_INCORRECT_STATE" ); /* NULL param */ status = rtems_task_set_priority( RTEMS_SELF, RTEMS_CURRENT_PRIORITY, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_set_priority with NULL param" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_ADDRESS" ); /* bad priority */ status = rtems_task_set_priority( RTEMS_SELF, 512, &previous_priority ); fatal_directive_status( status, RTEMS_INVALID_PRIORITY, "rtems_task_set_priority with illegal priority" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_PRIORITY" ); /* bad Id */ status = rtems_task_set_priority( 100, 8, &previous_priority ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_set_priority with illegal id" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_ID" ); status = rtems_task_set_note( RTEMS_SELF, RTEMS_NOTEPAD_LAST+10, notepad_value ); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_task_set_note with illegal notepad" ); puts( "TA1 - rtems_task_set_note - RTEMS_INVALID_NUMBER" ); status = rtems_task_set_note( 100, RTEMS_NOTEPAD_LAST, notepad_value ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_set_note with illegal id" ); puts( "TA1 - rtems_task_set_note - RTEMS_INVALID_ID" ); status = rtems_task_start( 100, Task_1, 0 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_start with illegal id" ); puts( "TA1 - rtems_task_start - RTEMS_INVALID_ID" ); /* already started */ status = rtems_task_start( RTEMS_SELF, Task_1, 0 ); fatal_directive_status( status, RTEMS_INCORRECT_STATE, "rtems_task_start of ready task" ); puts( "TA1 - rtems_task_start - RTEMS_INCORRECT_STATE" ); /* bad Id */ status = rtems_task_suspend( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_suspend with illegal id" ); puts( "TA1 - rtems_task_suspend - RTEMS_INVALID_ID" ); /* NULL param */ status = rtems_task_mode( RTEMS_SELF, 0, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_mode with NULL param" ); puts( "TA1 - rtems_task_mode - RTEMS_INVALID_ADDRESS" ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; rtems_attribute sem_attr; rtems_task_priority pri; rtems_mode prev_mode; Print_Warning(); TEST_BEGIN(); sem_attr = RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY; sem_name = rtems_build_name( 'S','0',' ',' ' ); status = rtems_semaphore_create( sem_name, 1, sem_attr, 0, &sem_id ); directive_failed( status, "rtems_semaphore_create of S0" ); Task_name[0] = rtems_build_name( 'T','A','0','1' ); status = rtems_task_create( Task_name[0], 30, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[0] ); directive_failed( status, "rtems_task_create of TA01" ); Task_name[1] = rtems_build_name( 'T','A','0','2' ); status = rtems_task_create( Task_name[1], 30, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[1] ); directive_failed( status , "rtems_task_create of TA02\n" ); rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &prev_mode ); /* Lower own priority so TA01 can start up and run */ rtems_task_set_priority( RTEMS_SELF, 40, &pri); /* Get time of benchmark with no semaphore shuffling */ sem_exe = 0; status = rtems_task_start( Task_id[0], Task01, 0 ); directive_failed( status, "rtems_task_start of TA01" ); /* Get time of benchmark with semaphore shuffling */ sem_exe = 1; status = rtems_task_restart( Task_id[0], 0 ); directive_failed( status, "rtems_task_restart of TA01" ); /* Should never reach here */ rtems_test_assert( false ); }
rtems_task Task_1( rtems_task_argument argument ) { rtems_mode previous_mode; rtems_status_code status; puts( "TA1 - rtems_signal_catch - RTEMS_INTERRUPT_LEVEL( 3 )" ); status = rtems_signal_catch( Process_asr, RTEMS_INTERRUPT_LEVEL(3) ); directive_failed( status, "rtems_signal_catch" ); puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_16 to self" ); status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_16 ); directive_failed( status, "rtems_signal_send" ); puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_0 to self" ); status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_0 ); directive_failed( status, "rtems_signal_send" ); puts( "TA1 - rtems_signal_catch - RTEMS_NO_ASR" ); status = rtems_signal_catch( Process_asr, RTEMS_NO_ASR ); directive_failed( status, "rtems_signal_catch" ); FLUSH_OUTPUT(); rtems_test_pause(); puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_1 to self" ); status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 ); directive_failed( status, "rtems_signal_send" ); puts( "TA1 - rtems_task_mode - disable ASRs" ); status = rtems_task_mode( RTEMS_NO_ASR, RTEMS_ASR_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); Timer_got_this_id = 0; Timer_got_this_pointer = NULL; puts( "TA1 - sending signal to RTEMS_SELF from timer" ); status = rtems_timer_fire_after( Timer_id[ 1 ], rtems_clock_get_ticks_per_second() / 2, Signal_3_to_task_1, (void *) Task_1 ); directive_failed( status, "rtems_timer_fire_after" ); puts( "TA1 - waiting for signal to arrive" ); Signals_sent = FALSE; Asr_fired = FALSE; while ( Signals_sent == FALSE ) ; if ( Timer_got_this_id == Timer_id[ 1 ] && Timer_got_this_pointer == Task_1 ) puts( "TA1 - timer routine got the correct arguments" ); else printf( "TA1 - timer got (0x%" PRIxrtems_id ", %p) instead of (0x%" PRIxrtems_id ", %p)!!!!\n", Timer_got_this_id, Timer_got_this_pointer, Timer_id[ 1 ], Task_1 ); puts( "TA1 - rtems_task_mode - enable ASRs" ); FLUSH_OUTPUT(); status = rtems_task_mode( RTEMS_ASR, RTEMS_ASR_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_task_wake_after(2 * rtems_clock_get_ticks_per_second()); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_signal_catch - asraddr of NULL" ); status = rtems_signal_catch( NULL, RTEMS_DEFAULT_MODES ); directive_failed( status, "rtems_signal_catch" ); puts( "TA1 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task test_task( rtems_task_argument argument ) { rtems_status_code status; uint32_t index; rtems_task_priority old_priority; rtems_time_of_day time; uint32_t old_note; uint32_t old_mode; 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_task_set_priority( Test_task_id, RTEMS_CURRENT_PRIORITY, &old_priority ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_priority: obtain current priority", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_PRIORITY ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_set_priority( Test_task_id, RTEMS_MAXIMUM_PRIORITY - 2u, &old_priority ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_priority: returns to caller", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_PRIORITY ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_mode( RTEMS_CURRENT_MODE, RTEMS_CURRENT_MODE, &old_mode ); end_time = benchmark_timer_read(); put_time( "rtems_task_mode: obtain current mode", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_MODE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) { (void) rtems_task_mode( RTEMS_INTERRUPT_LEVEL(1), RTEMS_INTERRUPT_MASK, &old_mode ); (void) rtems_task_mode( RTEMS_INTERRUPT_LEVEL(0), RTEMS_INTERRUPT_MASK, &old_mode ); } end_time = benchmark_timer_read(); put_time( "rtems_task_mode: no reschedule", end_time, OPERATION_COUNT * 2, overhead, CALLING_OVERHEAD_TASK_MODE ); benchmark_timer_initialize(); /* must be one host */ (void) rtems_task_mode( RTEMS_NO_ASR, RTEMS_ASR_MASK, &old_mode ); end_time = benchmark_timer_read(); put_time( "rtems_task_mode: reschedule -- returns to caller", end_time, 1, 0, CALLING_OVERHEAD_TASK_MODE ); status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_task_set_priority( Test_task_id, 1, &old_priority ); directive_failed( status, "rtems_task_set_priority" ); /* preempted by test_task1 */ benchmark_timer_initialize(); (void) rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_set_note( Test_task_id, 8, 10 ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_note", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_NOTE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_get_note( Test_task_id, 8, &old_note ); end_time = benchmark_timer_read(); put_time( "rtems_task_get_note", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_GET_NOTE ); build_time( &time, 1, 1, 1988, 0, 0, 0, 0 ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_clock_set( &time ); end_time = benchmark_timer_read(); put_time( "rtems_clock_set", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_CLOCK_SET ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_clock_get_tod( &time ); end_time = benchmark_timer_read(); put_time( "rtems_clock_get_tod", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_CLOCK_GET ); puts( "*** END OF TEST 8 ***" ); rtems_test_exit( 0 ); }
rtems_task test_task( rtems_task_argument argument ) { rtems_status_code status; uint32_t index; rtems_task_priority old_priority; rtems_time_of_day time; uint32_t old_note; uint32_t old_mode; 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_task_set_priority( Test_task_id, RTEMS_CURRENT_PRIORITY, &old_priority ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_priority: obtain current priority", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_PRIORITY ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_set_priority( Test_task_id, RTEMS_MAXIMUM_PRIORITY - 2u, &old_priority ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_priority: returns to caller", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_PRIORITY ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_mode( RTEMS_CURRENT_MODE, RTEMS_CURRENT_MODE, &old_mode ); end_time = benchmark_timer_read(); put_time( "rtems_task_mode: obtain current mode", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_MODE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) { (void) rtems_task_mode( RTEMS_INTERRUPT_LEVEL(1), RTEMS_INTERRUPT_MASK, &old_mode ); (void) rtems_task_mode( RTEMS_INTERRUPT_LEVEL(0), RTEMS_INTERRUPT_MASK, &old_mode ); } end_time = benchmark_timer_read(); put_time( "rtems_task_mode: no reschedule", end_time, OPERATION_COUNT * 2, overhead, CALLING_OVERHEAD_TASK_MODE ); benchmark_timer_initialize(); /* must be one host */ (void) rtems_task_mode( RTEMS_NO_ASR, RTEMS_ASR_MASK, &old_mode ); end_time = benchmark_timer_read(); put_time( "rtems_task_mode: reschedule returns to caller", end_time, 1, 0, CALLING_OVERHEAD_TASK_MODE ); status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_task_set_priority( Test_task_id, 1, &old_priority ); directive_failed( status, "rtems_task_set_priority" ); /* preempted by test_task1 */ benchmark_timer_initialize(); (void) rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode ); /** START OF NOTEPAD TESTS **/ /* * We know this is deprecated and don't want a warning on every BSP built. */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdeprecated-declarations" benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_set_note( Test_task_id, 8, 10 ); end_time = benchmark_timer_read(); put_time( "rtems_task_set_note: only case", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_SET_NOTE ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_task_get_note( Test_task_id, 8, &old_note ); end_time = benchmark_timer_read(); put_time( "rtems_task_get_note: only case", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_TASK_GET_NOTE ); #pragma GCC diagnostic pop /** END OF NOTEPAD TESTS **/ build_time( &time, 1, 1, 1988, 0, 0, 0, 0 ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_clock_set( &time ); end_time = benchmark_timer_read(); put_time( "rtems_clock_set: only case", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_CLOCK_SET ); benchmark_timer_initialize(); for ( index=1 ; index <= OPERATION_COUNT ; index++ ) (void) rtems_clock_get_tod( &time ); end_time = benchmark_timer_read(); put_time( "rtems_clock_get_tod: only case", end_time, OPERATION_COUNT, overhead, CALLING_OVERHEAD_CLOCK_GET ); TEST_END(); 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 Task_1( rtems_task_argument argument ) { uint32_t seconds; uint32_t old_seconds; rtems_mode previous_mode; rtems_time_of_day time; rtems_status_code status; uint32_t start_time; uint32_t end_time; puts( "TA1 - rtems_task_suspend - on Task 2" ); status = rtems_task_suspend( Task_id[ 2 ] ); directive_failed( status, "rtems_task_suspend of TA2" ); puts( "TA1 - rtems_task_suspend - on Task 3" ); status = rtems_task_suspend( Task_id[ 3 ] ); directive_failed( status, "rtems_task_suspend of TA3" ); status = rtems_clock_get_seconds_since_epoch( &start_time ); directive_failed( status, "rtems_clock_get_seconds_since_epoch" ); puts( "TA1 - killing time" ); for ( ; ; ) { status = rtems_clock_get_seconds_since_epoch( &end_time ); directive_failed( status, "rtems_clock_get_seconds_since_epoch" ); if ( end_time > (start_time + 2) ) break; } puts( "TA1 - rtems_task_resume - on Task 2" ); status = rtems_task_resume( Task_id[ 2 ] ); directive_failed( status, "rtems_task_resume of TA2" ); puts( "TA1 - rtems_task_resume - on Task 3" ); status = rtems_task_resume( Task_id[ 3 ] ); directive_failed( status, "rtems_task_resume of TA3" ); while ( FOREVER ) { if ( Run_count[ 1 ] >= 3 ) { puts( "TA1 - rtems_task_mode - change mode to NO RTEMS_PREEMPT" ); status = rtems_task_mode( RTEMS_NO_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_get_tod" ); old_seconds = time.second; for ( seconds = 0 ; seconds < 6 ; ) { status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_get_tod" ); if ( time.second != old_seconds ) { old_seconds = time.second; seconds++; print_time( "TA1 - ", &time, "\n" ); } } puts( "TA1 - rtems_task_mode - change mode to RTEMS_PREEMPT" ); status = rtems_task_mode( RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &previous_mode ); directive_failed( status, "rtems_task_mode" ); while ( !testsFinished ); showTaskSwitches (); puts( "TA1 - rtems_extension_delete - successful" ); status = rtems_extension_delete( Extension_id[1] ); directive_failed( status, "rtems_extension_delete" ); puts( "*** END OF TEST 4 ***" ); rtems_test_exit (0); } } }
rtems_task Task_1( rtems_task_argument argument ) { rtems_id self_id; rtems_task_priority previous_priority; rtems_status_code status; /* bad Id */ status = rtems_task_is_suspended( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_set_priority with illegal id" ); puts( "TA1 - rtems_task_is_suspended - RTEMS_INVALID_ID" ); /* bad Id */ status = rtems_task_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_delete with illegal id" ); puts( "TA1 - rtems_task_delete - RTEMS_INVALID_ID" ); /* NULL param */ status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_ident NULL param" ); puts( "TA1 - rtems_task_ident - RTEMS_INVALID_ADDRESS" ); /* OK */ status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &self_id ); directive_failed( status, "rtems_task_ident of self" ); if ( self_id != Task_id[ 1 ] ) { puts( "ERROR - rtems_task_ident - incorrect ID returned!" ); } puts( "TA1 - rtems_task_ident - current task RTEMS_SUCCESSFUL" ); status = rtems_task_ident( 100, RTEMS_SEARCH_ALL_NODES, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal name (local)" ); puts( "TA1 - rtems_task_ident - global RTEMS_INVALID_NAME" ); status = rtems_task_ident( 100, 1, &Junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal name (global)" ); puts( "TA1 - rtems_task_ident - local RTEMS_INVALID_NAME" ); /* * This one case is different if MP is enabled/disabled. */ status = rtems_task_ident( 100, 2, &Junk_id ); #if defined(RTEMS_MULTIPROCESSING) fatal_directive_status( status, RTEMS_INVALID_NODE, "rtems_task_ident with illegal node" ); #else fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_task_ident with illegal node" ); #endif puts( "TA1 - rtems_task_ident - RTEMS_INVALID_NODE" ); status = rtems_task_restart( 100, 0 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_restart with illegal id" ); puts( "TA1 - rtems_task_restart - RTEMS_INVALID_ID" ); status = rtems_task_resume( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_resume with illegal id" ); puts( "TA1 - rtems_task_resume - RTEMS_INVALID_ID" ); status = rtems_task_resume( RTEMS_SELF ); fatal_directive_status( status, RTEMS_INCORRECT_STATE, "rtems_task_resume of ready task" ); puts( "TA1 - rtems_task_resume - RTEMS_INCORRECT_STATE" ); /* NULL param */ status = rtems_task_set_priority( RTEMS_SELF, RTEMS_CURRENT_PRIORITY, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_set_priority with NULL param" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_ADDRESS" ); /* bad priority */ status = rtems_task_set_priority( RTEMS_SELF, UINT32_C(0x80000000), &previous_priority ); fatal_directive_status( status, RTEMS_INVALID_PRIORITY, "rtems_task_set_priority with illegal priority" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_PRIORITY" ); /* bad Id */ status = rtems_task_set_priority( 100, 8, &previous_priority ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_set_priority with illegal id" ); puts( "TA1 - rtems_task_set_priority - RTEMS_INVALID_ID" ); status = rtems_task_start( 100, Task_1, 0 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_start with illegal id" ); puts( "TA1 - rtems_task_start - RTEMS_INVALID_ID" ); /* already started */ status = rtems_task_start( RTEMS_SELF, Task_1, 0 ); fatal_directive_status( status, RTEMS_INCORRECT_STATE, "rtems_task_start of ready task" ); puts( "TA1 - rtems_task_start - RTEMS_INCORRECT_STATE" ); /* bad Id */ status = rtems_task_suspend( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_task_suspend with illegal id" ); puts( "TA1 - rtems_task_suspend - RTEMS_INVALID_ID" ); /* NULL param */ status = rtems_task_mode( RTEMS_SELF, 0, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_mode with NULL param" ); puts( "TA1 - rtems_task_mode - RTEMS_INVALID_ADDRESS" ); TEST_END(); rtems_test_exit( 0 ); }