rtems_task Test_task1( rtems_task_argument argument ) { char receive_buffer[16]; size_t size; rtems_status_code status; 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 ) ); puts( "Attempting to receive message ..." ); status = rtems_message_queue_receive( Queue_id[ 1 ], receive_buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_message_queue_receive" ); }
void _RTEMS_tasks_Initialize_user_tasks_body( void ) { uint32_t index; uint32_t maximum; rtems_id id; rtems_status_code return_value; rtems_initialization_tasks_table *user_tasks; /* * Move information into local variables */ user_tasks = Configuration_RTEMS_API.User_initialization_tasks_table; maximum = Configuration_RTEMS_API.number_of_initialization_tasks; /* * Verify that we have a set of user tasks to iterate */ if ( !user_tasks ) return; /* * Now iterate over the initialization tasks and create/start them. */ for ( index=0 ; index < maximum ; index++ ) { return_value = rtems_task_create( user_tasks[ index ].name, user_tasks[ index ].initial_priority, user_tasks[ index ].stack_size, user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value ); return_value = rtems_task_start( id, user_tasks[ index ].entry_point, user_tasks[ index ].argument ); if ( !rtems_is_status_successful( return_value ) ) _Internal_error_Occurred( INTERNAL_ERROR_RTEMS_API, true, return_value ); } }
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 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 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!!" ); } } }
rtems_task Test_task2( rtems_task_argument argument ) { 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 ) ); directive_failed( status, "rtems_semaphore_ident" ); if ( Multiprocessing_configuration.node == 1 ) { status = rtems_task_wake_after( TICKS_PER_SECOND ); directive_failed( status, "rtems_task_wake_after" ); puts( "Releasing semaphore ..." ); status = rtems_semaphore_release( Semaphore_id[ 1 ] ); directive_failed( status, "rtems_semaphore_release" ); status = rtems_task_wake_after( TICKS_PER_SECOND / 2 ); directive_failed( status, "rtems_task_wake_after" ); puts( "Getting semaphore ..." ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_semaphore_obtain" ); puts( "Getting semaphore ..." ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); puts( "How did I get back from here????" ); directive_failed( status, "rtems_semaphore_obtain" ); } /* status = rtems_task_wake_after( TICKS_PER_SECOND / 2 ); directive_failed( status, "rtems_task_wake_after" ); */ puts( "Getting semaphore ..." ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_semaphore_obtain" ); puts( "Releasing semaphore ..." ); status = rtems_semaphore_release( Semaphore_id[ 1 ] ); directive_failed( status, "rtems_semaphore_release" ); status = rtems_task_wake_after( TICKS_PER_SECOND ); directive_failed( status, "rtems_task_wake_after" ); puts( "Getting semaphore ..." ); status = rtems_semaphore_obtain( Semaphore_id[ 1 ], RTEMS_DEFAULT_OPTIONS, 2 * TICKS_PER_SECOND ); fatal_directive_status( status, RTEMS_TIMEOUT, "rtems_semaphore_obtain" ); puts( "rtems_semaphore_obtain correctly returned RTEMS_TIMEOUT" ); puts( "*** END OF TEST 13 ***" ); rtems_test_exit( 0 ); }
void _RTEMS_tasks_Initialize_user_tasks_body( void ) { uint32_t index; uint32_t maximum; rtems_id id; rtems_status_code return_value; rtems_initialization_tasks_table *user_tasks; bool register_global_construction; rtems_task_entry entry_point; /* * Move information into local variables */ user_tasks = Configuration_RTEMS_API.User_initialization_tasks_table; maximum = Configuration_RTEMS_API.number_of_initialization_tasks; /* * Verify that we have a set of user tasks to iterate */ if ( !user_tasks ) return; register_global_construction = true; /* * Now iterate over the initialization tasks and create/start them. */ for ( index=0 ; index < maximum ; index++ ) { return_value = rtems_task_create( user_tasks[ index ].name, user_tasks[ index ].initial_priority, user_tasks[ index ].stack_size, user_tasks[ index ].mode_set, user_tasks[ index ].attribute_set, &id ); if ( !rtems_is_status_successful( return_value ) ) _Terminate( INTERNAL_ERROR_RTEMS_API, true, return_value ); entry_point = user_tasks[ index ].entry_point; if ( entry_point == NULL ) { _Terminate( INTERNAL_ERROR_CORE, false, INTERNAL_ERROR_RTEMS_INIT_TASK_ENTRY_IS_NULL ); } if ( register_global_construction ) { register_global_construction = false; entry_point = _RTEMS_Global_construction; } return_value = rtems_task_start( id, entry_point, user_tasks[ index ].argument ); _Assert( rtems_is_status_successful( return_value ) ); (void) return_value; } }
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; 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 ( !rtems_is_status_successful( status ) ); if ( Multiprocessing_configuration.node == 1 ) { puts( "Sending first event to remote task" ); status = rtems_event_send( remote_tid, RTEMS_EVENT_16 ); directive_failed( status, "rtems_event_send" ); } status = rtems_timer_fire_after( Timer_id[ 1 ], 5 * rtems_clock_get_ticks_per_second(), Stop_Test_TSR, NULL ); directive_failed( status, "rtems_timer_fire_after" ); while ( true ) { for ( count=DOT_COUNT ; count && (Stop_Test == false) ; count-- ) { status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, rtems_clock_get_ticks_per_second(), &event_out ); if ( status == RTEMS_TIMEOUT ) { printf("\nTA1 - RTEMS_TIMEOUT .. probably OK if the other node exits"); Stop_Test = true; break; } else directive_failed( status, "rtems_event_receive" ); status = rtems_event_send( remote_tid, RTEMS_EVENT_16 ); directive_failed( status, "rtems_event_send" ); } if ( Stop_Test ) break; put_dot('.'); } /* * Wait a bit before shutting down so we don't screw up the other node * when our MPCI shuts down */ rtems_task_wake_after(10); puts( "\n*** END OF TEST 7 ***" ); rtems_test_exit( 0 ); }