rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; rtems_event_set out; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION 10 ***" ); puts( "Init - Test may not be able to detect case is hit reliably" ); puts( "Init - Trying to generate timeout while blocking on event" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( NULL ); for (resets=0 ; resets< 2 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 1, &out ); fatal_directive_status( sc, RTEMS_TIMEOUT, "event_receive timeout" ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION 10 ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code status; rtems_id extension; rtems_id task_id; puts( "\n\n*** TEST 56 ***" ); puts( "Init - rtems_extension_create - OK" ); status = rtems_extension_create( rtems_build_name( 'E', 'X', 'T', ' ' ), &Extensions, &extension ); directive_failed( status, "rtems_extension_create" ); puts( "Init - rtems_task_create - create extension fails - UNSATISFIED" ); status = rtems_task_create( rtems_build_name( 'T', 'A', '1', ' ' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_TIMESLICE, RTEMS_FLOATING_POINT, &task_id ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_task_create" ); puts( "Init - rtems_extension_delete - OK" ); status = rtems_extension_delete( extension ); directive_failed( status, "rtems_extension_delete" ); puts( "*** END OF TEST 56 ***" ); rtems_test_exit(0); }
void Preempt_task() { ER status; T_RTSK pk_rtsk; puts( "PREEMPT - ref_tsk validation" ); status = ref_tsk( &pk_rtsk, PREEMPT_TASK_ID ); fatal_directive_status( status, E_OK , "ref_tsk of PREEMPT"); rtems_test_assert( pk_rtsk.tskpri == PREEMPT_PRIORITY ); rtems_test_assert( pk_rtsk.itskpri == PREEMPT_PRIORITY ); rtems_test_assert( pk_rtsk.task == Preempt_task ); rtems_test_assert( pk_rtsk.stksz >= RTEMS_MINIMUM_STACK_SIZE ); rtems_test_assert( pk_rtsk.tskstat == (TTS_RUN | TTS_RDY) ); if ( Preempt_task_Count == 0 ) { Preempt_task_Count ++; puts( "PREEMPT - chg_pri increment priority "); status = chg_pri( PREEMPT_TASK_ID, (PREEMPT_PRIORITY+1) ); directive_failed( status, "chg_pri" ); puts( "PREEMPT - ext_tsk - going to DORMANT state" ); ext_tsk( ); rtems_test_assert( 0 ); } else { Preempt_task_Count ++; puts( "PREEMPT - exd_tsk - Exit and Delete task" ); exd_tsk( ); rtems_test_assert( 0 ); } }
rtems_task Init(rtems_task_argument ignored) { rtems_status_code sc; rtems_id q; uint32_t flushed; puts( "\n\n*** TEST 49 ***" ); puts( "Create Message Queue" ); sc = rtems_message_queue_create( rtems_build_name('m', 's', 'g', ' '), 1, sizeof(uint32_t), RTEMS_DEFAULT_ATTRIBUTES, &q ); directive_failed( sc, "rtems_message_queue_create" ); puts( "Flush Message Queue using Task Self ID" ); sc = rtems_message_queue_flush( rtems_task_self(), &flushed ); fatal_directive_status( sc, RTEMS_INVALID_ID, "flush" ); puts( "Flush returned INVALID_ID as expected" ); puts( "*** END OF TEST 49 ***" ); rtems_test_exit( 0 ); }
rtems_task Task5( rtems_task_argument argument ) { rtems_status_code status; puts( "TA5 - rtems_semaphore_obtain - wait forever on SM1" ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_semaphore_obtain on SM1" ); puts( "TA5 - got SM1" ); puts( "TA5 - rtems_semaphore_obtain - wait forever on SM1" ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); fatal_directive_status( status, RTEMS_OBJECT_WAS_DELETED, "rtems_semaphore_obtain on SM1" ); puts( "TA5 - SM1 deleted by TA1" ); puts( "*** END OF TEST 12 ***" ); rtems_test_exit( 0 ); }
rtems_task Task_3( rtems_task_argument argument ) { rtems_status_code status; long buffer[ 4 ]; size_t size; puts( "TA3 - rtems_message_queue_receive - Q 1 - RTEMS_WAIT FOREVER" ); status = rtems_message_queue_receive( Queue_id[ 1 ], (long (*)[4])buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); fatal_directive_status( status, RTEMS_OBJECT_WAS_DELETED, "rtems_message_queue_receive waiting to be deleted" ); puts( "TA3 - rtems_message_queue_receive - woke up with RTEMS_OBJECT_WAS_DELETED" ); puts( "TA3 - rtems_task_delete - delete self - RTEMS_SUCCESSFUL" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of TA3" ); }
void do_test_io_lookup_name(void) { rtems_status_code sc; rtems_driver_name_t info; puts( "rtems_io_lookup_name( \"\", &info ) - RTEMS_UNSATISFIED" ); sc = rtems_io_lookup_name( "", &info ); fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" ); puts( "rtems_io_lookup_name( \"/dev\", &info ) - RTEMS_UNSATISFIED" ); sc = rtems_io_lookup_name( "/dev", &info ); fatal_directive_status( sc, RTEMS_UNSATISFIED, "lookup empty string" ); puts( "rtems_io_lookup_name( \"/dev/null\", &info ) - RTEMS_SUCCESSFUL" ); sc = rtems_io_lookup_name( "/dev/null", &info ); directive_failed( sc, "lookup /dev/null" ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n" "Init - Trying to generate timeout of a thread while another is blocking\n" "Init - on the same thread queue\n" "Init - There is no way for the test to know if it hits the case" ); puts( "Init - rtems_semaphore_create - OK" ); sc = rtems_semaphore_create( rtems_build_name( 'S', 'M', '1', ' ' ), 0, RTEMS_DEFAULT_ATTRIBUTES, RTEMS_NO_PRIORITY, &Semaphore ); directive_failed( sc, "rtems_semaphore_create of SM1" ); puts( "Init - rtems_task_create - OK" ); sc = rtems_task_create( rtems_build_name( 'B', 'L', 'C', 'K' ), BLOCKER_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_NO_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &Secondary_task_id ); directive_failed( sc, "rtems_task_create" ); sc = rtems_task_start( Secondary_task_id, Secondary_task, 0 ); directive_failed( sc, "rtems_task_start" ); Main_task = rtems_task_self(); interrupt_critical_section_test_support_initialize( NULL ); for (resets=0 ; resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_task_restart( Secondary_task_id, 1 ); directive_failed( sc, "rtems_task_restart" ); sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 ); fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); } puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); rtems_test_exit(0); }
void test_errors(void) { rtems_status_code sc; void *value; /* * task variable add error status codes */ puts( "task variable add - NULL pointer - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_add(RTEMS_SELF, NULL, NULL ); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "add NULL pointer" ); /* * task variable get error status codes */ puts( "task variable get - bad Id - RTEMS_INVALID_ID" ); sc = rtems_task_variable_get( rtems_task_self() + 10, (void **)&taskvar1, &value ); fatal_directive_status( sc, RTEMS_INVALID_ID, "bad Id" ); puts( "task variable get - NULL pointer - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_get(RTEMS_SELF, NULL, &value ); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get NULL pointer" ); puts( "task variable get - bad result - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_get(RTEMS_SELF, (void **)&taskvar1, NULL); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get bad result" ); puts( "task variable get - bad pointer - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_get(RTEMS_SELF, (void **)&taskvar1, &value); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "get bad pointer" ); /* * task variable delete error status codes */ puts( "task variable delete - bad Id - RTEMS_INVALID_ID" ); sc = rtems_task_variable_delete( rtems_task_self() + 10, (void **)&taskvar1 ); fatal_directive_status( sc, RTEMS_INVALID_ID, "bad Id" ); puts( "task variable delete - NULL pointer - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_delete(RTEMS_SELF, NULL); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "delete NULL pointer" ); puts( "task variable delete - bad pointer - RTEMS_INVALID_ADDRESS" ); sc = rtems_task_variable_delete(RTEMS_SELF, (void **)&taskvar1); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "delete bad pointer" ); }
rtems_task Secondary_task( rtems_task_argument ignored ) { rtems_status_code sc; while (1) { sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 ); fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); } }
rtems_task Task_1( rtems_task_argument argument ) { rtems_id tid2; rtems_id tid3; uint32_t pass; rtems_status_code status; status = rtems_task_ident( Task_name[ 2 ], 1, &tid2 ); directive_failed( status, "rtems_task_ident of TA2" ); status = rtems_task_ident( Task_name[ 3 ], 1, &tid3 ); directive_failed( status, "rtems_task_ident of TA3" ); for ( pass=1 ; pass <= 3 ; pass++ ) { puts( "TA1 - rtems_task_wake_after - sleep 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after of TA1" ); puts( "TA1 - rtems_task_suspend - suspend TA3" ); status = rtems_task_suspend( tid3 ); if ( pass == 1 ) { fatal_directive_status( status, RTEMS_ALREADY_SUSPENDED, "rtems_task_suspend of TA3" ); } else { directive_failed( status, "rtems_task_suspend of TA3" ); } puts( "TA1 - rtems_task_resume - resume TA2" ); status = rtems_task_resume( tid2 ); directive_failed( status, "rtems_task_resume of TA2" ); puts( "TA1 - rtems_task_wake_after - sleep 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_task_suspend - suspend TA2" ); status = rtems_task_suspend( tid2 ); directive_failed( status, "rtems_task_suspend of TA2" ); puts( "TA1 - rtems_task_resume - resume TA3" ); status = rtems_task_resume( tid3 ); directive_failed( status, "rtems_task_resume" ); } TEST_END(); rtems_test_exit( 0 ); }
static rtems_task Init(rtems_task_argument argument) { rtems_status_code sc = RTEMS_SUCCESSFUL; rtems_name name = rtems_build_name('S', 'T', 'K', 'A'); rtems_id id = RTEMS_ID_NONE; int i = 0; TEST_BEGIN(); print_info(); for (i = 2; i < TASK_COUNT; ++i) { sc = rtems_task_create( name, RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); directive_failed(sc, "rtems_task_create"); } sc = rtems_task_create( name, RTEMS_MINIMUM_PRIORITY, 2 * RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); fatal_directive_status(sc, RTEMS_UNSATISFIED, "rtems_task_create"); sc = rtems_task_create( name, RTEMS_MINIMUM_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &id ); directive_failed(sc, "rtems_task_create"); print_info(); TEST_END(); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; int resets; puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n" "Init - Trying to generate timeout of a thread that had its blocking\n" "Init - request satisfied while blocking but before time timeout" ); puts( "Init - rtems_semaphore_create - OK" ); sc = rtems_semaphore_create( rtems_build_name( 'S', 'M', '1', ' ' ), 0, RTEMS_DEFAULT_ATTRIBUTES, RTEMS_NO_PRIORITY, &Semaphore ); directive_failed( sc, "rtems_semaphore_create of SM1" ); Main_task = rtems_task_self(); Main_TCB = _Thread_Get_executing(); interrupt_critical_section_test_support_initialize( test_release_from_isr ); case_hit = false; for (resets=0 ; !case_hit && resets<10 ;) { if ( interrupt_critical_section_test_support_delay() ) resets++; sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 2 ); if ( sc == RTEMS_SUCCESSFUL ) break; fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); } if ( case_hit ) { puts( "Init - Case hit" ); puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" ); } else puts( "Init - Case not hit - ran too long" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; rtems_id period1; rtems_id period2; puts( "\n\n*** TEST 60 ***" ); puts( "Init - rtems_rate_monotonic_create - first period" ); sc = rtems_rate_monotonic_create( rtems_build_name( 'P', 'E', 'R', '1' ), &period1 ); directive_failed( sc, "rtems_rate_monotonic_create 1" ); puts( "Init - rtems_rate_monotonic_create - second period" ); sc = rtems_rate_monotonic_create( rtems_build_name( 'P', 'E', 'R', '2' ), &period2 ); directive_failed( sc, "rtems_rate_monotonic_create 1" ); puts( "Init - rtems_rate_monotonic_period - short period" ); sc = rtems_rate_monotonic_period(period1, RTEMS_MILLISECONDS_TO_TICKS(200) ); directive_failed( sc, "rtems_rate_monotonic_period" ); puts( "Init - rtems_rate_monotonic_period - long period initiated" ); sc = rtems_rate_monotonic_period(period2, RTEMS_MILLISECONDS_TO_TICKS(1000) ); directive_failed( sc, "rtems_rate_monotonic_period" ); puts( "Init - rtems_rate_monotonic_period - long period block" ); sc = rtems_rate_monotonic_period(period2, RTEMS_MILLISECONDS_TO_TICKS(1000) ); directive_failed( sc, "rtems_rate_monotonic_period" ); puts( "Init - rtems_rate_monotonic_period - verify long period expired" ); sc = rtems_rate_monotonic_period(period1, RTEMS_PERIOD_STATUS ); fatal_directive_status(sc, RTEMS_TIMEOUT, "rtems_task_period status"); puts( "*** END OF TEST 60 ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code rc; rtems_id taskId; rtems_id taskId1; puts( "\n\n*** TEST OF STACK ALLOCATOR PLUGIN ***" ); puts( "Init - create task TA1 to use custom stack allocator - OK" ); rc = rtems_task_create( rtems_build_name( 'T', 'A', '1', ' ' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &taskId ); directive_failed( rc, "rtems_task_create of TA1" ); puts( "Init - create task TA1 to have custom stack allocator fail" ); rc = rtems_task_create( rtems_build_name( 'F', 'A', 'I', 'L' ), 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &taskId1 ); fatal_directive_status( rc, RTEMS_UNSATISFIED, "rtems_task_create of FAIL" ); puts( "Init - delete task TA1 to use custom stack deallocator - OK" ); rc = rtems_task_delete( taskId ); directive_failed( rc, "rtems_task_delete of TA1" ); puts( "*** END OF OF STACK ALLOCATOR PLUGIN TEST ***" ); rtems_test_exit(0); }
rtems_task Waiter( rtems_task_argument number ) { rtems_status_code status; printf( "Waiter %" PRIdrtems_task_argument " waiting on barrier\n", number ); status = rtems_barrier_wait( Barrier, RTEMS_NO_TIMEOUT ); printf( "Waiter %" PRIdrtems_task_argument " back from barrier\n", number ); if ( SuccessfulCase == TRUE ) { directive_failed(status, "rtems_barrier_wait"); } else if ( DeletedCase == TRUE ) { fatal_directive_status( status, RTEMS_OBJECT_WAS_DELETED, "rtems_barrier_wait did not get deleted" ); } rtems_task_delete( RTEMS_SELF ); }
rtems_task Init( rtems_task_argument ignored ) { rtems_status_code sc; rtems_time_of_day time; rtems_interval interval; struct timeval timev; puts( "\n\n*** TEST LEGACY RTEMS_CLOCK_GET ***" ); puts( "Init - clock_set_time" ); build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); sc = rtems_clock_set( &time ); directive_failed( sc, "rtems_clock_set" ); /* NULL parameter */ sc = rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, NULL ); fatal_directive_status( sc, RTEMS_INVALID_ADDRESS, "null pointer" ); puts( "TA1 - rtems_clock_get - RTEMS_INVALID_ADDRESS" ); /* arbitrary bad value for switch */ sc = rtems_clock_get( 0xff, &timev ); fatal_directive_status( sc, RTEMS_INVALID_NUMBER, "bad case" ); puts( "TA1 - rtems_clock_get - RTEMS_INVALID_NUMBER" ); sc = rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time ); directive_failed( sc, "rtems_clock_get -- TOD" ); print_time( "Init - rtems_clock_get - ", &time, "\n" ); sc = rtems_clock_get( RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH, &interval ); directive_failed( sc, "rtems_clock_get -- Seconds Since Epoch" ); printf( "Init - rtems_clock_get - Seconds Since Epoch = %" PRIdrtems_interval "\n", interval ); sc = rtems_clock_get( RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &interval ); directive_failed( sc, "rtems_clock_get -- Ticks Since Boot" ); printf( "Init - rtems_clock_get - Ticks Since Boot = %" PRIdrtems_interval "\n", interval ); sc = rtems_clock_get( RTEMS_CLOCK_GET_TICKS_PER_SECOND, &interval ); directive_failed( sc, "rtems_clock_get -- Ticks Per Second" ); printf( "Init - rtems_clock_get - Ticks Per Second = %" PRIdrtems_interval "\n", interval ); sc = rtems_clock_get( RTEMS_CLOCK_GET_TIME_VALUE, &timev ); directive_failed( sc, "rtems_clock_get -- Time Value" ); printf( "Init - rtems_clock_get - Time Value = %" PRIdtime_t "\n", timev.tv_sec ); puts( "*** END OF TEST LEGACY RTEMS_CLOCK_GET ***" ); rtems_test_exit(0); }
rtems_task Init( rtems_task_argument argument ) { rtems_status_code status; void *bufaddr; printf( "\n\n*** TEST 12 -- NODE %" PRId32 " ***\n", Multiprocessing_configuration.node ); Task_name[ 1 ] = rtems_build_name( '1', '1', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( '2', '2', '2', ' ' ); Partition_name[ 1 ] = rtems_build_name( 'P', 'A', 'R', ' ' ); puts( "Got to initialization task" ); if ( Multiprocessing_configuration.node == 2 ) { status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "Getting ID of remote Partition (Global)" ); do { status = rtems_partition_ident( Partition_name[ 1 ], RTEMS_SEARCH_ALL_NODES, &Partition_id[ 1 ] ); } while ( !rtems_is_status_successful( status ) ); puts( "Attempting to delete remote Partition (Global)" ); status = rtems_partition_delete( Partition_id[ 1 ] ); fatal_directive_status( status, RTEMS_ILLEGAL_ON_REMOTE_OBJECT, "rtems_partition_delete" ); puts( "rtems_partition_delete correctly returned RTEMS_ILLEGAL_ON_REMOTE_OBJECT" ); puts( "Obtaining a buffer from the global partition" ); status = rtems_partition_get_buffer( Partition_id[ 1 ], &bufaddr ); directive_failed( status, "rtems_partition_get_buffer" ); printf( "Address returned was : 0x%p\n", bufaddr ); puts( "Releasing a buffer to the global partition" ); status = rtems_partition_return_buffer( Partition_id[ 1 ], bufaddr ); directive_failed( status, "rtems_partition_return_buffer" ); status = rtems_task_wake_after( 2 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); } else { puts( "Creating Partition (Global)" ); status = rtems_partition_create( Partition_name[ 1 ], Partition_area, 128, 64, RTEMS_GLOBAL, &Partition_id[ 1 ] ); directive_failed( status, "rtems_partition_create" ); puts( "Sleeping for two seconds" ); status = rtems_task_wake_after( 2 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "Deleting Partition (Global)" ); status = rtems_partition_delete( Partition_id[ 1 ] ); directive_failed( status, "rtems_partition_delete" ); } puts( "*** END OF TEST 12 ***" ); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument argument ) { puts( "\n\n*** TEST SPCLOCK_ERR02 ***" ); rtems_time_of_day time; rtems_status_code status; status = rtems_io_close( 0xffff, 0x0000, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_close with bad major number" ); puts( "TA1 - rtems_io_close - RTEMS_INVALID_NUMBER" ); status = rtems_io_control( 0xffff, 0x00000, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_close with bad major number" ); puts( "TA1 - rtems_io_control - RTEMS_INVALID_NUMBER" ); status = rtems_io_initialize( 0xffff, 0x00000, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_initialize with bad major number" ); puts( "TA1 - rtems_io_initialize - RTEMS_INVALID_NUMBER" ); status = rtems_io_open( 0xffff, 0x00000, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_open with bad major number" ); puts( "TA1 - rtems_io_open - RTEMS_INVALID_NUMBER" ); status = rtems_io_read( 0xffff, 0x00000, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_read with bad major number" ); puts( "TA1 - rtems_io_read - RTEMS_INVALID_NUMBER" ); status = rtems_io_write( 0xffff, 0x0ffff, NULL); fatal_directive_status( status, RTEMS_INVALID_NUMBER, "rtems_io_write with bad major number" ); puts( "TA1 - rtems_io_write - RTEMS_INVALID_NUMBER" ); build_time( &time, 12, 31, 2000, 23, 59, 59, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_set - ", &time, " - RTEMS_SUCCESSFUL\n" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); build_time( &time, 12, 31, 1999, 23, 59, 59, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_set - ", &time, " - RTEMS_SUCCESSFUL\n" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_get_tod" ); print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); build_time( &time, 12, 31, 2100, 23, 59, 59, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_set - ", &time, " - RTEMS_SUCCESSFUL\n" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); build_time( &time, 12, 31, 2099, 23, 59, 59, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_set - ", &time, " - RTEMS_SUCCESSFUL\n" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); build_time( &time, 12, 31, 1991, 23, 59, 59, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_set - ", &time, " - RTEMS_SUCCESSFUL\n" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); status = rtems_clock_get_tod( &time ); directive_failed( status, "rtems_clock_set" ); print_time( "TA1 - rtems_clock_get_tod - ", &time, " - RTEMS_SUCCESSFUL\n" ); puts( "*** END OF TEST SPCLOCK_ERR02 ***" ); }
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 ) { rtems_id qid; uint32_t index; uint32_t count; rtems_status_code status; size_t size; size_t queue_size; unsigned char *cp; status = rtems_message_queue_ident( Queue_name[ 1 ], RTEMS_SEARCH_ALL_NODES, &qid ); printf( "TA1 - rtems_message_queue_ident - qid => %08" PRIxrtems_id "\n", qid ); directive_failed( status, "rtems_message_queue_ident" ); Fill_buffer( "BUFFER 1 TO Q 1", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 1" ); status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); Fill_buffer( "BUFFER 2 TO Q 1", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 2 TO Q 1" ); status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); puts( "TA1 - rtems_task_wake_after - sleep 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); Fill_buffer( "BUFFER 3 TO Q 1", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 3 TO Q 1" ); status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); puts( "TA1 - rtems_task_wake_after - sleep 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); rtems_test_pause(); Fill_buffer( "BUFFER 1 TO Q 2", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 2" ); status = rtems_message_queue_send( Queue_id[ 2 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); puts_nocr( "TA1 - rtems_message_queue_receive - receive from queue 1 - " ); puts ( "10 second timeout" ); status = rtems_message_queue_receive( Queue_id[ 1 ], buffer, &size, RTEMS_DEFAULT_OPTIONS, 10 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_message_queue_receive" ); puts_nocr( "TA1 - buffer received: " ); Put_buffer( buffer ); new_line; puts( "TA1 - rtems_task_delete - delete TA2" ); status = rtems_task_delete( Task_id[ 2 ] ); directive_failed( status, "rtems_task_delete" ); Fill_buffer( "BUFFER 1 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); puts( "TA1 - rtems_task_wake_after - sleep 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); rtems_test_pause(); Fill_buffer( "BUFFER 2 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 2 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); Fill_buffer( "BUFFER 3 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 3 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); Fill_buffer( "BUFFER 4 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 4 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); Fill_buffer( "BUFFER 5 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_urgent - BUFFER 5 TO Q 3" ); status = rtems_message_queue_urgent( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_urgent" ); for ( index = 1 ; index <= 4 ; index++ ) { puts( "TA1 - rtems_message_queue_receive - receive from queue 3 - " "RTEMS_WAIT FOREVER" ); status = rtems_message_queue_receive( Queue_id[ 3 ], buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_message_queue_receive" ); puts_nocr( "TA1 - buffer received: " ); Put_buffer( buffer ); new_line; } Fill_buffer( "BUFFER 3 TO Q 2", buffer ); puts( "TA1 - rtems_message_queue_urgent - BUFFER 3 TO Q 2" ); status = rtems_message_queue_urgent( Queue_id[ 2 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_urgent" ); puts( "TA1 - rtems_message_queue_receive - receive from queue 2 - " "RTEMS_WAIT FOREVER" ); status = rtems_message_queue_receive( Queue_id[ 2 ], buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_message_queue_receive" ); puts_nocr( "TA1 - buffer received: " ); Put_buffer( buffer ); new_line; rtems_test_pause(); puts( "TA1 - rtems_message_queue_delete - delete queue 1" ); status = rtems_message_queue_delete( Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_delete" ); Fill_buffer( "BUFFER 3 TO Q 2", buffer ); puts( "TA1 - rtems_message_queue_urgent - BUFFER 3 TO Q 2" ); status = rtems_message_queue_urgent( Queue_id[ 2 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_urgent" ); puts( "TA1 - rtems_message_queue_delete - delete queue 2" ); status = rtems_message_queue_delete( Queue_id[ 2 ] ); directive_failed( status, "rtems_message_queue_delete" ); puts( "TA1 - rtems_message_queue_get_number_pending - check Q 3" ); status = rtems_message_queue_get_number_pending( Queue_id[ 3 ], &count ); directive_failed( status, "rtems_message_queue_get_number_pending" ); printf( "TA1 - %" PRIu32 " messages are pending on Q 3\n", count ); puts( "TA1 - rtems_message_queue_flush - empty Q 3" ); status = rtems_message_queue_flush( Queue_id[ 3 ], &count ); directive_failed( status, "rtems_message_queue_flush" ); printf( "TA1 - %" PRIu32 " messages were flushed from Q 3\n", count ); Fill_buffer( "BUFFER 1 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); Fill_buffer( "BUFFER 2 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 2 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); /* this broadcast should have no effect on the queue */ Fill_buffer( "NO BUFFER TO Q1", (long *)buffer ); puts( "TA1 - rtems_message_queue_broadcast - NO BUFFER TO Q1" ); status = rtems_message_queue_broadcast( Queue_id[ 1 ], (long (*)[4])buffer, 16, &count ); printf( "TA1 - number of tasks awakened = %" PRIu32 "\n", count ); puts( "TA1 - rtems_message_queue_get_number_pending - check Q 3" ); status = rtems_message_queue_get_number_pending( Queue_id[ 3 ], &count ); directive_failed( status, "rtems_message_queue_get_number_pending" ); printf( "TA1 - %" PRIu32 " messages are pending on Q 3\n", count ); Fill_buffer( "BUFFER 3 TO Q 3", buffer ); puts( "TA1 - rtems_message_queue_send - BUFFER 3 TO Q 3" ); status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); directive_failed( status, "rtems_message_queue_send" ); puts( "TA1 - rtems_message_queue_flush - Q 3" ); status = rtems_message_queue_flush( Queue_id[ 3 ], &count ); printf( "TA1 - %" PRIu32 " messages were flushed from Q 3\n", count ); puts( "TA1 - rtems_message_queue_send until all message buffers consumed" ); while ( FOREVER ) { status = rtems_message_queue_send( Queue_id[ 3 ], buffer, MESSAGE_SIZE ); if ( status == RTEMS_TOO_MANY ) break; directive_failed( status, "rtems_message_queue_send loop" ); } puts( "TA1 - all message buffers consumed" ); puts( "TA1 - rtems_message_queue_flush - Q 3" ); status = rtems_message_queue_flush( Queue_id[ 3 ], &count ); printf( "TA1 - %" PRIu32 " messages were flushed from Q 3\n", count ); rtems_test_pause(); puts( "TA1 - create message queue of 20 bytes on queue 1" ); status = rtems_message_queue_create( Queue_name[ 1 ], 100, 20, RTEMS_DEFAULT_ATTRIBUTES, &Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_create of Q1; 20 bytes each" ); status = rtems_message_queue_send( Queue_id[ 1 ], big_send_buffer, 40 ); fatal_directive_status(status, RTEMS_INVALID_SIZE, "expected RTEMS_INVALID_SIZE" ); puts( "TA1 - rtems_message_queue_delete - delete queue 1" ); status = rtems_message_queue_delete( Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_delete" ); rtems_test_pause(); puts( "TA1 - rtems_message_queue_create - variable sizes " ); for (queue_size = 1; queue_size < 1030; queue_size++) { status = rtems_message_queue_create( Queue_name[ 1 ], 2, /* just 2 msgs each */ queue_size, RTEMS_DEFAULT_ATTRIBUTES, &Queue_id[ 1 ] ); if (status != RTEMS_SUCCESSFUL) { printf("TA1 - msq que size: %zu\n", queue_size); directive_failed( status, "rtems_message_queue_create of Q1" ); } status = rtems_message_queue_delete( Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_delete" ); } puts( "TA1 - rtems_message_queue_create and send - variable sizes " ); for (queue_size = 1; queue_size < 1030; queue_size++) { status = rtems_message_queue_create( Queue_name[ 1 ], 2, /* just 2 msgs each */ queue_size, RTEMS_DEFAULT_ATTRIBUTES, &Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_create of Q1" ); dope_buffer(big_send_buffer, sizeof(big_send_buffer), queue_size); memset(big_receive_buffer, 'Z', sizeof(big_receive_buffer)); /* send a msg too big */ status = rtems_message_queue_send( Queue_id[ 1 ], big_send_buffer, queue_size + 1 ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_message_queue_send too large" ); /* send a msg that is just right */ status = rtems_message_queue_send( Queue_id[ 1 ], big_send_buffer, queue_size); directive_failed(status, "rtems_message_queue_send exact size"); /* now read and verify the message just sent */ status = rtems_message_queue_receive( Queue_id[ 1 ], big_receive_buffer, &size, RTEMS_DEFAULT_OPTIONS, 1 * rtems_clock_get_ticks_per_second() ); directive_failed(status, "rtems_message_queue_receive exact size"); if (size != queue_size) { puts("TA1 - exact size size match failed"); rtems_test_exit(1); } if (memcmp(big_send_buffer, big_receive_buffer, size) != 0) { puts("TA1 - exact size data match failed"); rtems_test_exit(1); } for (cp = (big_receive_buffer + size); cp < (big_receive_buffer + sizeof(big_receive_buffer)); cp++) if (*cp != 'Z') { puts("TA1 - exact size overrun match failed"); rtems_test_exit(1); } /* all done with this one; delete it */ status = rtems_message_queue_delete( Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_delete" ); } puts( "*** END OF TEST 13 ***" ); rtems_test_exit( 0 ); }
rtems_task Test_task( rtems_task_argument argument ) { rtems_status_code status; uint32_t count; size_t size; char receive_buffer[16]; status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "Getting QID of message queue" ); do { status = rtems_message_queue_ident( Queue_name[ 1 ], RTEMS_SEARCH_ALL_NODES, &Queue_id[ 1 ] ); } while ( !rtems_is_status_successful( status ) ); if ( Multiprocessing_configuration.node == 2 ) { status = rtems_message_queue_delete( Queue_id[ 1 ] ); fatal_directive_status( status, RTEMS_ILLEGAL_ON_REMOTE_OBJECT, "rtems_message_queue_delete" ); puts( "rtems_message_queue_delete correctly returned RTEMS_ILLEGAL_ON_REMOTE_OBJECT" ); Send_messages(); Receive_messages(); puts( "Flushing remote empty queue" ); status = rtems_message_queue_flush( Queue_id[ 1 ], &count ); directive_failed( status, "rtems_message_queue_flush" ); printf( "%" PRIu32 " messages were flushed on the remote queue\n", count ); puts( "Send messages to be flushed from remote queue" ); status = rtems_message_queue_send( Queue_id[ 1 ], buffer1, 16 ); directive_failed( status, "rtems_message_queue_send" ); puts( "Flushing remote queue" ); status = rtems_message_queue_flush( Queue_id[ 1 ], &count ); directive_failed( status, "rtems_message_queue_flush" ); printf( "%" PRIu32 " messages were flushed on the remote queue\n", count ); puts( "Waiting for message queue to be deleted" ); status = rtems_message_queue_receive( Queue_id[ 1 ], receive_buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); fatal_directive_status( status, RTEMS_OBJECT_WAS_DELETED, "rtems_message_queue_receive" ); puts( "\nGlobal message queue deleted" ); } else { /* node == 1 */ Receive_messages(); Send_messages(); puts( "Delaying for 5 seconds" ); status = rtems_task_wake_after( 5*rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "Deleting Message queue" ); status = rtems_message_queue_delete( Queue_id[ 1 ] ); directive_failed( status, "rtems_message_queue_delete" ); } puts( "*** END OF TEST 9 ***" ); 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 Test_task( rtems_task_argument argument ) { uint32_t count; rtems_status_code status; puts( "Getting SMID of semaphore" ); do { status = rtems_semaphore_ident( Semaphore_name[ 1 ], RTEMS_SEARCH_ALL_NODES, &Semaphore_id[ 1 ] ); } while ( !rtems_is_status_successful( status ) ); if ( Multiprocessing_configuration.node == 2 ) { status = rtems_semaphore_delete( Semaphore_id[ 1 ] ); fatal_directive_status( status, RTEMS_ILLEGAL_ON_REMOTE_OBJECT, "rtems_semaphore_delete did not return RTEMS_ILLEGAL_ON_REMOTE_OBJECT" ); puts( "rtems_semaphore_delete correctly returned RTEMS_ILLEGAL_ON_REMOTE_OBJECT" ); } count = 0; /* number of times node 1 releases semaphore */ while ( FOREVER ) { put_dot( 'p' ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); if ( status != RTEMS_SUCCESSFUL ) { fatal_directive_status( status, RTEMS_OBJECT_WAS_DELETED, "rtems_semaphore_obtain" ); puts( "\nGlobal semaphore deleted" ); puts( "*** END OF TEST 8 ***" ); rtems_test_exit( 0 ); } if ( Multiprocessing_configuration.node == 1 && ++count == 1000 ) { status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "\nDeleting global semaphore" ); status = rtems_semaphore_delete( Semaphore_id[ 1 ] ); directive_failed( status, "rtems_semaphore_delete" ); puts( "*** END OF TEST 8 ***" ); rtems_test_exit( 0 ); } else { put_dot( 'v' ); status = rtems_semaphore_release( Semaphore_id[ 1 ] ); directive_failed( status, "rtems_semaphore_release FAILED!!" ); } } }
void Screen4() { rtems_event_set event_out; rtems_time_of_day time; struct timeval tv; time_t seconds; rtems_status_code status; status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_event_receive NULL param" ); puts( "TA1 - rtems_event_receive - NULL param - RTEMS_INVALID_ADDRESS" ); status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &event_out ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_event_receive unsatisfied (ALL)" ); puts( "TA1 - rtems_event_receive - RTEMS_UNSATISFIED ( all conditions )" ); status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_EVENT_ANY | RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &event_out ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_event_receive unsatisfied (ANY)" ); puts( "TA1 - rtems_event_receive - RTEMS_UNSATISFIED ( any condition )" ); puts( "TA1 - rtems_event_receive - timeout in 3 seconds" ); status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, 3 * rtems_clock_get_ticks_per_second(), &event_out ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_event_receive" ); puts( "TA1 - rtems_event_receive - woke up with RTEMS_TIMEOUT" ); status = rtems_event_send( 100, RTEMS_EVENT_16 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_event_send with illegal id" ); puts( "TA1 - rtems_event_send - RTEMS_INVALID_ID" ); puts( "TA1 - rtems_task_wake_after - sleep 1 second - RTEMS_SUCCESSFUL" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); build_time( &time, 2, 5, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); puts( " - RTEMS_SUCCESSFUL" ); status = rtems_clock_get_tod_timeval( &tv ); directive_failed( status, "clock_get_tod_timeval OK" ); seconds = tv.tv_sec; printf( "TA1 - current time - %s\n", ctime(&seconds) ); }
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 argument ) { rtems_status_code status; rtems_id id; TEST_BEGIN(); Extension_name[ 1 ] = rtems_build_name( 'E', 'X', 'T', '1' ); Extension_name[ 2 ] = rtems_build_name( 'E', 'X', 'T', '2' ); puts ( "rtems_extension_create - bad id pointer -- RTEMS_INVALID_ADDRESS" ); status = rtems_extension_create( 0xa5a5a5a5, &Extensions, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_extension_create" ); puts ( "rtems_extension_create - bad name -- RTEMS_INVALID_NAME" ); status = rtems_extension_create( 0, &Extensions, &id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_extension_create #1" ); puts( "rtems_extension_create - first one -- OK" ); status = rtems_extension_create( Extension_name[ 1 ], &Extensions, &Extension_id[ 1 ] ); directive_failed( status, "rtems_extension_create" ); puts( "rtems_extension_create - second one-- OK" ); status = rtems_extension_create( Extension_name[ 2 ], &Extensions, &Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_create #2" ); puts ( "rtems_extension_create -- RTEMS_TOO_MANY" ); status = rtems_extension_create( 0xa5a5a5a5, &Extensions, &id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_extension_create" ); puts( "rtems_extension_delete - second one -- OK" ); status = rtems_extension_delete( Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_delete #2" ); puts( "rtems_extension_delete - second one again -- RTEMS_INVALID_ID" ); status = rtems_extension_delete( Extension_id[ 2 ] ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_extension_delete #2 bad" ); puts ( "rtems_extension_ident -- OK" ); status = rtems_extension_ident( Extension_name[1], &id ); directive_failed( status, "rtems_extension_ident" ); puts ( "rtems_extension_ident - bad name -- RTEMS_INVALID_NAME" ); status = rtems_extension_ident( Extension_name[2], &id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_extension_ident" ); puts ( "rtems_extension_ident - bad name -- RTEMS_INVALID_ADDRESS" ); status = rtems_extension_ident( Extension_name[2], NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_extension_ident" ); puts( "rtems_extension_create - harmless -- OK" ); status = rtems_extension_create( Extension_name[ 2 ], &Harmless_extensions, &Extension_id[ 2 ] ); directive_failed( status, "rtems_extension_create #3" ); Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' ); status = rtems_task_create( Task_name[ 1 ], 4, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 1 ] ); directive_failed( status, "rtems_task_create of TA1" ); assert_extension_counts( &Task_created[ 0 ], 0x2 ); status = rtems_task_create( Task_name[ 2 ], 4, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 2 ] ); directive_failed( status, "rtems_task_create of TA2" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 ); #define TA3_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 4u) status = rtems_task_create( Task_name[ 3 ], TA3_PRIORITY, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 3 ] ); directive_failed( status, "rtems_task_create of TA3" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 ); #define TA4_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 1u) status = rtems_task_create( Task_name[ 4 ], TA4_PRIORITY, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 4 ] ); directive_failed( status, "rtems_task_create of TA4" ); assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 ); status = rtems_task_start( Task_id[ 1 ], Task_1, 0 ); directive_failed( status, "rtems_task_start of TA1" ); assert_extension_counts( &Task_started[ 0 ], 0x2 ); status = rtems_task_start( Task_id[ 2 ], Task_2, 0 ); directive_failed( status, "rtems_task_start of TA2" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 ); status = rtems_task_start( Task_id[ 3 ], Task_3, 0 ); directive_failed( status, "rtems_task_start of TA3" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 ); status = rtems_task_restart( Task_id[ 2 ], 0 ); directive_failed( status, "rtems_task_restart of TA3" ); assert_extension_counts( &Task_restarted[ 0 ], 0x0 ); status = rtems_task_set_note( rtems_task_self(), RTEMS_NOTEPAD_4, 32 ); directive_failed( status, "task_set_node of Self id" ); printf( "INIT - rtems_task_set_note - set my (id) RTEMS_NOTEPAD_4 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( RTEMS_SELF, RTEMS_NOTEPAD_4, 32 ); directive_failed( status, "task_set_node of Self 0" ); printf( "INIT - rtems_task_set_note - set my (SELF) RTEMS_NOTEPAD_4 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( Task_id[ 1 ], RTEMS_NOTEPAD_8, 4 ); directive_failed( status, "task_set_node of TA1" ); printf( "INIT - rtems_task_set_note - set TA1's RTEMS_NOTEPAD_8 " ); puts ( "to TA1's priority: 04" ); status = rtems_task_set_note( Task_id[ 2 ], RTEMS_NOTEPAD_8, 4 ); directive_failed( status, "task_set_node of TA2" ); printf( "INIT - rtems_task_set_note - set TA2's RTEMS_NOTEPAD_8 " ); puts ( "to TA2's priority: 04"); 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 count; uint32_t remote_node; rtems_id remote_tid; rtems_event_set event_out; rtems_event_set event_for_this_iteration; Stop_Test = FALSE; remote_node = (Multiprocessing_configuration.node == 1) ? 2 : 1; puts_nocr( "Remote task's name is : " ); put_name( Task_name[ remote_node ], TRUE ); puts( "Getting TID of remote task" ); do { status = rtems_task_ident( Task_name[ remote_node ], RTEMS_SEARCH_ALL_NODES, &remote_tid ); } while ( status != RTEMS_SUCCESSFUL ); directive_failed( status, "rtems_task_ident FAILED!!" ); if ( Multiprocessing_configuration.node == 1 ) puts( "Sending events to remote task" ); else puts( "Receiving events from remote task" ); status = rtems_timer_fire_after( Timer_id[ 1 ], 5 * TICKS_PER_SECOND, Stop_Test_TSR, NULL ); directive_failed( status, "rtems_timer_fire_after" ); count = 0; for ( ; ; ) { if ( Stop_Test == TRUE ) break; event_for_this_iteration = Event_set_table[ count % 32 ]; if ( Multiprocessing_configuration.node == 1 ) { status = rtems_event_send( remote_tid, event_for_this_iteration ); directive_failed( status, "rtems_event_send" ); status = rtems_task_wake_after( 1 ); directive_failed( status, "rtems_task_wake_after" ); } else { status = rtems_event_receive( event_for_this_iteration, RTEMS_DEFAULT_OPTIONS, 1 * TICKS_PER_SECOND, &event_out ); if ( rtems_are_statuses_equal( status, RTEMS_TIMEOUT ) ) { if ( Multiprocessing_configuration.node == 2 ) puts( "\nCorrect behavior if the other node exitted." ); else puts( "\nERROR... node 1 died" ); break; } else directive_failed( status, "rtems_event_receive" ); } if ( (count % DOT_COUNT) == 0 ) put_dot('.'); count++; } putchar( '\n' ); if ( Multiprocessing_configuration.node == 2 ) { status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, 1 * TICKS_PER_SECOND, &event_out ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_event_receive" ); puts( "rtems_event_receive - correctly returned RTEMS_TIMEOUT" ); } puts( "*** END OF TEST 6 ***" ); rtems_test_exit( 0 ); }
rtems_task Init( rtems_task_argument argument ) { rtems_time_of_day time; uint32_t index; rtems_status_code status; puts( "\n\n*** TEST 30 ***" ); build_time( &time, 12, 31, 1988, 9, 0, 0, 0 ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set" ); /* initiate with bad priority */ puts( "timer_initiate_server -- INVALID_PRIORITY" ); status = rtems_timer_initiate_server( 1000, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); fatal_directive_status( status, RTEMS_INVALID_PRIORITY, "rtems_timer_initiate_server bad priority" ); puts( "timer_initiate_server -- OK" ); status = rtems_timer_initiate_server( RTEMS_TIMER_SERVER_DEFAULT_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); directive_failed( status, "rtems_timer_initiate_server" ); puts( "timer_initiate_server -- already started" ); status = rtems_timer_initiate_server( RTEMS_TIMER_SERVER_DEFAULT_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); fatal_directive_status( status, RTEMS_INCORRECT_STATE, "rtems_timer_initiate_server already started" ); /* * Create test tasks */ Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); Timer_name[ 1 ] = rtems_build_name( 'T', 'M', '1', ' ' ); Timer_name[ 2 ] = rtems_build_name( 'T', 'M', '2', ' ' ); Timer_name[ 3 ] = rtems_build_name( 'T', 'M', '3', ' ' ); for ( index = 1 ; index <= 3 ; index++ ) { status = rtems_task_create( Task_name[ index ], 1, RTEMS_MINIMUM_STACK_SIZE * 2, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ index ] ); directive_failed( status, "rtems_task_create loop" ); status = rtems_timer_create( Timer_name[ index ], &Timer_id[ index ] ); directive_failed( status, "rtems_timer_create loop" ); } for ( index = 1 ; index <= 3 ; index++ ) { status = rtems_task_start( Task_id[ index ], Task_1_through_3, index ); directive_failed( status, "rtems_task_start loop" ); } status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
void Test_Task_Support( uint32_t node ) { rtems_event_set events; rtems_status_code status; if ( Multiprocessing_configuration.node == node ) { for ( ; ; ) { status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &events ); if ( status == RTEMS_SUCCESSFUL ) break; fatal_directive_status(status, RTEMS_UNSATISFIED, "rtems_event_receive"); status = rtems_task_wake_after( 2 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); put_name( Task_name[ node ], FALSE ); puts( " - Suspending remote task" ); status = rtems_task_suspend( remote_tid ); directive_failed( status, "rtems_task_suspend" ); status = rtems_task_wake_after( 2 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); put_name( Task_name[ node ], FALSE ); puts( " - Resuming remote task" ); status = rtems_task_resume( remote_tid ) ; directive_failed( status, "rtems_task_resume" ); } } else { for ( ; ; ) { status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &events ); if ( status == RTEMS_SUCCESSFUL ) break; fatal_directive_status(status, RTEMS_UNSATISFIED, "rtems_event_receive"); put_name( Task_name[ remote_node ], FALSE ); puts( " - have I been suspended???" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() / 2 ); directive_failed( status, "rtems_task_wake_after" ); } } }