rtems_task Task5( rtems_task_argument argument ) { void *segment_address_1; void *segment_address_2; rtems_status_code status; puts( "TA5 - rtems_region_get_segment - wait on 1.5K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 1536, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); puts_nocr( "TA5 - got and returned " ); Put_address_from_area_1( segment_address_1 ); new_line; /* * Use TOD_MICROSECONDS_TO_TICKS not RTEMS_MICROSECONDS_TO_TICKS to * test C implementation in SuperCore -- not macro version used * everywhere else. */ status = rtems_task_wake_after( TOD_MICROSECONDS_TO_TICKS( 1000000 ) ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA5 - rtems_region_get_segment - wait on 3K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); puts_nocr( "TA5 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_2 ); new_line; status = rtems_region_return_segment( Region_id[ 1 ], segment_address_2 ); puts_nocr( "TA5 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_2 ); new_line; puts( "TA5 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Task_3( rtems_task_argument argument ) { long buffer[ 4 ]; size_t size; uint32_t count; rtems_status_code status; puts( "TA3 - rtems_message_queue_receive - receive from queue 2 - " "RTEMS_WAIT FOREVER" ); status = rtems_message_queue_receive( Queue_id[ 2 ], (long (*)[4])buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_message_queue_receive" ); puts_nocr( "TA3 - buffer received: " ); Put_buffer( buffer ); new_line; Fill_buffer( "BUFFER 3 TO Q 1", (long *)buffer ); puts( "TA3 - rtems_message_queue_broadcast - BUFFER 3 TO Q 1" ); status = rtems_message_queue_broadcast( Queue_id[ 1 ], (long (*)[4])buffer, 16, &count ); printf( "TA3 - number of tasks awakened = %02" PRIu32 "\n", count ); puts( "TA3 - rtems_message_queue_receive - receive from queue 3 - " "RTEMS_WAIT FOREVER" ); status = rtems_message_queue_receive( Queue_id[ 3 ], (long (*)[4])buffer, &size, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT ); directive_failed( status, "rtems_message_queue_receive" ); puts_nocr( "TA3 - buffer received: " ); Put_buffer( buffer ); new_line; puts( "TA3 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Task_3( rtems_task_argument argument ) { rtems_status_code status; void *segment_address_1; void *segment_address_2; puts( "TA3 - rtems_region_get_segment - wait on 3750 byte segment from region 2" ); status = rtems_region_get_segment( Region_id[ 2 ], 3750, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA3 - got segment from region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; directive_failed( status, "rtems_region_return_segment" ); puts( "TA3 - rtems_region_get_segment - wait on 2K segment from region 3" ); status = rtems_region_get_segment( Region_id[ 3 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); }
void Receive_messages() { rtems_status_code status; uint32_t index; size_t size; char receive_buffer[16]; for ( index=1 ; index <=3 ; index++ ) { puts( "Receiving 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" ); puts_nocr( "Received : "); puts( receive_buffer ); } puts( "Receiver delaying for a second" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); }
rtems_extension Task_exit_extension( rtems_tcb *running_task ) { if ( task_number( running_task->Object.id ) > 0 ) { puts_nocr( "RTEMS_TASK_EXITTED - extension invoked for " ); put_name( Task_name[ task_number( running_task->Object.id ) ], TRUE ); } puts("*** END OF TEST 7 ***" ); rtems_test_exit( 0 ); }
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 Task_1( rtems_task_argument argument ) { void *address_1; void *address_2; void *address_3; void *address_4; void *address_5; void *address_6; void *address_7; void *address_8; rtems_id region_id; Heap_Information_block region_info; uintptr_t segment_size; rtems_status_code status; /* Obtain the region id */ status = rtems_region_ident(Region_name[ 1 ], ®ion_id); printf( "TA1 - rtems_region_ident - 0x%08" PRIxrtems_id "\n", region_id ); directive_failed(status, "rtems_region_ident of RN01"); /* Get a 64 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 64 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 64, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_1 ); new_line; /* Get the size of segment_1 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_1 ); new_line; status = rtems_region_get_segment_size(region_id, address_1, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 1"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get a 128 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 128 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_2 ); new_line; /* Get a 256 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 256 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 256, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_3 ); new_line; /* Get a 512 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 512 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 512, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_4 ); new_line; /* Get a 1024 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 1024 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 1024, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_5 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_5 ); new_line; /* Get a 2048 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 2048 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_6 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_6 ); new_line; /* Get a 4096 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 4096 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 4096, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_7 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_7 ); new_line; /* Get a 8192 byte segment from the region */ puts( "TA1 - rtems_region_get_segment - wait on 8192 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 8192, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_8 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_8 ); new_line; /* Get the size of segment_8 */ puts_nocr( "TA1 - rtems_region_get_segment_size from - " ); Put_address_from_area_1( address_8 ); new_line; status = rtems_region_get_segment_size(region_id, address_8, &segment_size); directive_failed(status, "rtems_region_get_segment_size of segment 8"); printf( "TA1 - got segment size of %" PRIuPTR "\n", segment_size ); /* Get information about the region */ printf( "TA1 - rtems_region_get_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_information of RN01"); printf( "TA1 - got information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); printf( "TA1 - rtems_region_get_free_information - 0x%08" PRIxrtems_id "\n", region_id ); status = rtems_region_get_free_information(region_id, ®ion_info); directive_failed(status, "rtems_region_get_free_information of RN01"); printf( "TA1 - got free information - free = %" PRIu32 ", used = %" PRIu32 "\n", region_info.Free.number, region_info.Used.number ); rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_3 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_4 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_1 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_2 ); status = rtems_region_return_segment( Region_id[ 1 ], address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_2 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_7 ); status = rtems_region_return_segment( Region_id[ 1 ], address_7 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_7 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_6 ); status = rtems_region_return_segment( Region_id[ 1 ], address_6 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_6 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_8 ); status = rtems_region_return_segment( Region_id[ 1 ], address_8 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_8 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_5 ); status = rtems_region_return_segment( Region_id[ 1 ], address_5 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_5 = 0; puts( "TA1 - rtems_region_delete - walks heap if debug enabled" ); rtems_region_delete(Region_id[ 1 ]); puts( "*** END OF TEST 25 ***" ); rtems_test_exit( 0 ); }
rtems_task 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 Task_1( rtems_task_argument argument ) { rtems_id ptid_1; rtems_id ptid_2; void *buffer_address_1; void *buffer_address_2; void *buffer_address_3; void *buffer_address_4; rtems_status_code status; puts_nocr( "TA1 - rtems_partition_ident - partition 1 id = " ); status = rtems_partition_ident( Partition_name[ 1 ], RTEMS_SEARCH_ALL_NODES, &ptid_1 ); directive_failed( status, "rtems_partition_ident of PT1" ); printf( "%08x\n", ptid_1 ); puts_nocr( "TA1 - rtems_partition_ident - partition 2 id = " ); status = rtems_partition_ident( Partition_name[ 2 ], RTEMS_SEARCH_ALL_NODES, &ptid_2 ); directive_failed( status, "rtems_partition_ident of PT2" ); printf( "%08x\n", ptid_2 ); puts_nocr( "TA1 - rtems_partition_get_buffer - buffer 1 from partition 1 - " ); status = rtems_partition_get_buffer( ptid_1, &buffer_address_1 ); directive_failed( status, "rtems_partition_get_buffer" ); Put_address_from_area_1( buffer_address_1 ); new_line; puts_nocr( "TA1 - rtems_partition_get_buffer - buffer 2 from partition 1 - " ); status = rtems_partition_get_buffer( ptid_1, &buffer_address_2 ); directive_failed( status, "rtems_partition_get_buffer" ); Put_address_from_area_1( buffer_address_2 ); new_line; puts_nocr( "TA1 - rtems_partition_get_buffer - buffer 1 from partition 2 - " ); status = rtems_partition_get_buffer( ptid_2, &buffer_address_3 ); directive_failed( status, "rtems_partition_get_buffer" ); Put_address_from_area_2( buffer_address_3 ); new_line; puts_nocr( "TA1 - rtems_partition_get_buffer - buffer 2 from partition 2 - " ); status = rtems_partition_get_buffer( ptid_2, &buffer_address_4 ); directive_failed( status, "rtems_partition_get_buffer" ); Put_address_from_area_2( buffer_address_4 ); new_line; puts_nocr( "TA1 - rtems_partition_return_buffer - buffer 1 to partition 1 - " ); Put_address_from_area_1( buffer_address_1 ); new_line; status = rtems_partition_return_buffer( ptid_1, buffer_address_1 ); directive_failed( status, "rtems_partition_return_buffer" ); puts_nocr( "TA1 - rtems_partition_return_buffer - buffer 2 to partition 1 - " ); Put_address_from_area_1( buffer_address_2 ); new_line; status = rtems_partition_return_buffer( ptid_1, buffer_address_2 ); directive_failed( status, "rtems_partition_return_buffer" ); puts_nocr( "TA1 - rtems_partition_return_buffer - buffer 1 to partition 2 - " ); Put_address_from_area_2( buffer_address_3 ); new_line; status = rtems_partition_return_buffer( ptid_2, buffer_address_3 ); directive_failed( status, "rtems_partition_return_buffer" ); puts_nocr( "TA1 - rtems_partition_return_buffer - buffer 2 to partition 2 - " ); Put_address_from_area_2( buffer_address_4 ); new_line; status = rtems_partition_return_buffer( ptid_2, buffer_address_4 ); directive_failed( status, "rtems_partition_return_buffer" ); puts( "TA1 - rtems_partition_delete - delete partition 1" ); status = rtems_partition_delete( ptid_1 ); directive_failed( status, "rtems_partition_delete" ); puts( "TA1 - rtems_partition_delete - delete partition 2" ); status = rtems_partition_delete( ptid_2 ); directive_failed( status, "rtems_partition_delete" ); puts( "*** END OF TEST 15 ***" ); rtems_test_exit( 0 ); }
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 ); }
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; remote_node = ((Multiprocessing_configuration.node == 1) ? 2 : 1); puts( "About to go to sleep!" ); status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "Waking up!" ); puts_nocr( "Remote task's name is : " ); put_name( Task_name[ remote_node ], TRUE ); puts( "Getting TID of remote task" ); while ( FOREVER ) { status = rtems_task_ident( Task_name[ remote_node ], RTEMS_SEARCH_ALL_NODES, &remote_tid ); if ( status == RTEMS_SUCCESSFUL ) break; puts( "rtems_task_ident FAILED!!" ); rtems_task_wake_after(2); } if ( Multiprocessing_configuration.node == 1 ) { puts( "Sending events to remote task" ); while ( Stop_Test == false ) { for ( count=EVENT_TASK_DOT_COUNT; Stop_Test == false && count; count-- ) { status = rtems_event_send( remote_tid, RTEMS_EVENT_16 ); directive_failed( status, "rtems_event_send" ); } put_dot( 'e' ); } } puts( "Receiving events from remote task" ); while ( Stop_Test == false ) { for ( count=EVENT_TASK_DOT_COUNT ; Stop_Test == false && count ; count-- ) { status = rtems_event_receive( RTEMS_EVENT_16, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &event_out ); directive_failed( status, "rtems_event_receive" ); } put_dot( 'e' ); } Exit_test(); }
void test_partition_errors(void) { void *buffer_address_1; void *buffer_address_2; void *buffer_address_3; rtems_status_code status; size_t size; rtems_id junk_id; Partition_name[ 1 ] = rtems_build_name( 'P', 'T', '1', ' ' ); status = rtems_partition_create( 0, Partition_good_area, 128, 40, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_partition_create with illegal name" ); puts( "TA1 - rtems_partition_create - RTEMS_INVALID_NAME" ); status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 0, 71, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_partition_create with illegal length" ); puts( "TA1 - rtems_partition_create - length - RTEMS_INVALID_SIZE" ); status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 0, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_partition_create with illegal buffer size" ); puts( "TA1 - rtems_partition_create - buffer size - RTEMS_INVALID_SIZE" ); status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 256, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_partition_create with buffer_size > length" ); puts( "TA1 - rtems_partition_create - length < buffer size - RTEMS_INVALID_SIZE" ); /* * Attempt to create a partition with a buffer size that is not large * enough to account for the overhead. */ puts( "TA1 - rtems_partition_create - buffer size < overhead - RTEMS_INVALID_SIZE" ); #define SIZEOF_CHAIN_NODE 2 * sizeof(void *) for ( size=0 ; size < SIZEOF_CHAIN_NODE ; size++) { status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, size, 256, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); if ( status != RTEMS_INVALID_SIZE ) printf( "ERROR when size == %zu\n", size ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_partition_create with buffer_size > length" ); } /* * The check for an object being global is only made if * multiprocessing is enabled. */ #if defined(RTEMS_MULTIPROCESSING) status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 64, RTEMS_GLOBAL, &junk_id ); fatal_directive_status( status, RTEMS_MP_NOT_CONFIGURED, "rtems_partition_create of global" ); #endif puts( "TA1 - rtems_partition_create - RTEMS_MP_NOT_CONFIGURED" ); #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS - SKIPPED" ); #else status = rtems_partition_create( Partition_name[ 1 ], Partition_bad_area, 128, 64, RTEMS_GLOBAL, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_partition_create with bad address" ); puts( "TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS" ); #endif #if defined(_C3x) || defined(_C4x) puts( "TA1 - rtems_partition_create - RTEMS_INVALID_SIZE - SKIPPED" ); #else status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 35, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_SIZE, "rtems_partition_create with unaligned buffer_size" ); puts( "TA1 - rtems_partition_create - RTEMS_INVALID_SIZE" ); #endif status = rtems_partition_delete( 100 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_partition_delete with illegal id" ); puts( "TA1 - rtems_partition_delete - unknown RTEMS_INVALID_ID" ); status = rtems_partition_delete( rtems_build_id( 1, 1, 1, 256 ) ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_partition_delete with illegal id" ); puts( "TA1 - rtems_partition_delete - local RTEMS_INVALID_ID" ); /* get bad address */ status = rtems_partition_get_buffer( 100, NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_partition_get_buffer with NULL param" ); puts( "TA1 - rtems_partition_get_buffer - RTEMS_INVALID_ADDRESS" ); /* get bad Id */ status = rtems_partition_get_buffer( 100, &buffer_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_partition_get_buffer with illegal id" ); puts( "TA1 - rtems_partition_get_buffer - RTEMS_INVALID_ID" ); status = rtems_partition_ident( 0, RTEMS_SEARCH_ALL_NODES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_partition_ident with illegal name" ); puts( "TA1 - rtems_partition_ident - RTEMS_INVALID_NAME" ); status = rtems_partition_return_buffer( 100, buffer_address_1 ); fatal_directive_status( status, RTEMS_INVALID_ID, "rtems_partition_return_buffer with illegal id" ); puts( "TA1 - rtems_partition_return_buffer - RTEMS_INVALID_ID" ); /* create bad area */ status = rtems_partition_create( Partition_name[ 1 ], NULL, 128, 64, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_partition_return_buffer with NULL area" ); puts( "TA1 - rtems_partition_create - RTEMS_INVALID_ADDRESS" ); /* create OK */ status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 64, RTEMS_DEFAULT_ATTRIBUTES, &Partition_id[ 1 ] ); directive_failed( status, "rtems_partition_create" ); puts( "TA1 - rtems_partition_create - RTEMS_SUCCESSFUL" ); status = rtems_partition_create( Partition_name[ 1 ], Partition_good_area, 128, 32, RTEMS_DEFAULT_ATTRIBUTES, &junk_id ); fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_partition_create of too many" ); puts( "TA1 - rtems_partition_create - RTEMS_TOO_MANY" ); status = rtems_partition_get_buffer( Partition_id[ 1 ], &buffer_address_1 ); directive_failed( status, "rtems_partition_get_buffer"); puts( "TA1 - rtems_partition_get_buffer - RTEMS_SUCCESSFUL" ); status = rtems_partition_get_buffer( Partition_id[ 1 ], &buffer_address_2 ); directive_failed( status, "rtems_partition_get_buffer" ); puts( "TA1 - rtems_partition_get_buffer - RTEMS_SUCCESSFUL" ); status = rtems_partition_get_buffer( Partition_id[ 1 ], &buffer_address_3 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_partition_get_buffer unsatisfied" ); puts( "TA1 - rtems_partition_get_buffer - RTEMS_UNSATISFIED" ); status = rtems_partition_delete( Partition_id[ 1 ] ); fatal_directive_status( status, RTEMS_RESOURCE_IN_USE, "rtems_partition_delete with buffers in use" ); puts( "TA1 - rtems_partition_delete - RTEMS_RESOURCE_IN_USE" ); status = rtems_partition_return_buffer( Partition_id[ 1 ], &Other_Memory ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_partition_return_buffer with buffer address out of partition" ); puts( "TA1 - rtems_partition_return_buffer - RTEMS_INVALID_ADDRESS - out of range" ); status = rtems_partition_return_buffer( Partition_id[ 1 ], &Partition_good_area[ 7 ] ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_partition_return_buffer with buffer address not on boundary" ); puts_nocr( "TA1 - rtems_partition_return_buffer - " ); puts ( "RTEMS_INVALID_ADDRESS - not on boundary"); }
rtems_task Task_1_through_6( rtems_task_argument argument ) { rtems_id rmid; rtems_id test_rmid; int index; int pass; uint32_t failed; rtems_status_code status; status = rtems_rate_monotonic_create( argument, &rmid ); directive_failed( status, "rtems_rate_monotonic_create" ); put_name( Task_name[ argument ], FALSE ); printf( "- rtems_rate_monotonic_create id = 0x%08" PRIxrtems_id "\n", rmid ); status = rtems_rate_monotonic_ident( argument, &test_rmid ); directive_failed( status, "rtems_rate_monotonic_ident" ); put_name( Task_name[ argument ], FALSE ); printf( "- rtems_rate_monotonic_ident id = 0x%08" PRIxrtems_id "\n", test_rmid ); if ( rmid != test_rmid ) { printf( "RMID's DO NOT MATCH (0x%" PRIxrtems_id " and 0x%" PRIxrtems_id ")\n", rmid, test_rmid ); rtems_test_exit( 0 ); } put_name( Task_name[ argument ], FALSE ); printf( "- (0x%08" PRIxrtems_id ") period %" PRIu32 "\n", rmid, Periods[ argument ] ); status = rtems_task_wake_after( 2 ); directive_failed( status, "rtems_task_wake_after" ); switch ( argument ) { case 1: case 2: case 3: case 4: while ( FOREVER ) { status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period" ); Count.count[ argument ]++; } break; case 5: pass = 0; failed = 0; status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period 1 of TA5" ); Get_all_counters(); while ( FOREVER ) { status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period 2 of TA5" ); Get_all_counters(); for( index = 1 ; index <= 4 ; index++ ) { if ( Temporary_count.count[ index ] != Iterations[ index ] ) { puts_nocr( "FAIL -- " ); put_name ( Task_name[ index ], FALSE ); printf ( " Actual=%" PRIu32 ", Expected=%" PRIu32 "\n", Temporary_count.count[ index ], Iterations[ index ] ); failed += 1; } } if ( failed == 5 ) rtems_test_exit( 0 ); pass += 1; printf( "TA5 - PERIODS CHECK OK (%d)\n", pass ); fflush( stdout ); if ( pass == 10 ) { TEST_END(); rtems_test_exit( 0 ); } } break; case 6: /* test changing periods */ { uint32_t time[TA6_ITERATIONS+1]; rtems_interval period; period = 1*TA6_PERIOD_FACTOR; status = rtems_rate_monotonic_period( rmid, period); directive_failed( status, "rtems_rate_monotonic_period of TA6" ); time[0] = _Watchdog_Ticks_since_boot; /* timestamp */ /*printf("%d - %d\n", period, time[0]);*/ for (index = 1; index <= TA6_ITERATIONS; index++) { period = (index+1)*TA6_PERIOD_FACTOR; status = rtems_rate_monotonic_period( rmid, period); directive_failed( status, "rtems_rate_monotonic_period of TA6" ); time[index] = _Watchdog_Ticks_since_boot; /* timestamp */ /*printf("%d - %d\n", period, time[index]);*/ } for (index = 1; index <= TA6_ITERATIONS; index++) { rtems_interval meas = time[index] - time[index-1]; period = index*TA6_PERIOD_FACTOR; printf( "TA6 - Actual: %" PRIdrtems_interval " Expected: %" PRIdrtems_interval, meas, period ); if (period == meas) printf(" - OK\n"); else printf(" - FAILED\n"); } } rtems_task_suspend(RTEMS_SELF); break; } }
rtems_task Task_2( rtems_task_argument argument ) { rtems_status_code status; rtems_task_priority previous_priority; void *segment_address_1; void *segment_address_2; puts( "TA2 - rtems_region_get_segment - wait on 2K segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA2 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_1 ); new_line; puts_nocr( "TA2 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA2 - rtems_task_set_priority - make self highest priority task" ); status = rtems_task_set_priority( RTEMS_SELF, BASE_PRIORITY-1, &previous_priority ); directive_failed( status, "rtems_task_set_priority" ); puts("TA2 - rtems_region_get_segment - wait on 3750 byte segment"); status = rtems_region_get_segment( Region_id[ 2 ], 3750, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA2 - got segment from region 2 - "); Put_address_from_area_2( segment_address_2 ); new_line; puts_nocr( "TA2 - rtems_region_return_segment - return segment to region 2 - " ); Put_address_from_area_2( segment_address_2 ); status = rtems_region_return_segment( Region_id[ 2 ], segment_address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA2 - rtems_task_delete - delete self" ); status = rtems_task_delete( RTEMS_SELF ); directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); }
rtems_task Task_1( rtems_task_argument argument ) { rtems_id rnid; void *segment_address_1; void *segment_address_2; void *segment_address_3; void *segment_address_4; rtems_status_code status; status = rtems_region_ident( Region_name[ 1 ], &rnid ); printf( "TA1 - rtems_region_ident - rnid => %08" PRIxrtems_id "\n", rnid ); directive_failed( status, "rtems_region_ident of RN1" ); puts( "TA1 - rtems_region_get_segment - wait on 100 byte segment from region 2" ); status = rtems_region_get_segment( Region_id[ 2 ], 100, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 3K segment from region 3" ); status = rtems_region_get_segment( Region_id[ 3 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 3 - " ); Put_address_from_area_3( segment_address_2 ); new_line; puts_nocr( "TA1 - rtems_region_get_segment - get 3080 byte segment " ); puts ( "from region 1 - NO_WAIT" ); status = rtems_region_get_segment( Region_id[ 1 ], 3080, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_3 ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); directive_failed( status, "rtems_task_wake_after" ); rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_region_get_segment - wait 10 seconds for 3K " "segment from region 1" ); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, 10 * rtems_clock_get_ticks_per_second(), &segment_address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_4 ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 2 - " ); Put_address_from_area_2( segment_address_1 ); new_line; status = rtems_region_return_segment( Region_id[ 2 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_task_delete - delete TA3" ); status = rtems_task_delete( Task_id[ 3 ] ); directive_failed( status, "rtems_task_delete of TA3" ); rtems_test_pause(); status = rtems_task_create( Task_name[ 4 ], BASE_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 4 ] ); directive_failed( status, "rtems_task_create of TA4" ); status = rtems_task_create( Task_name[ 5 ], BASE_PRIORITY, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES, RTEMS_DEFAULT_ATTRIBUTES, &Task_id[ 5 ] ); directive_failed( status, "rtems_task_create of TA5" ); status = rtems_task_start( Task_id[ 4 ], Task_4, 0 ); directive_failed( status, "rtems_task_start of TA4" ); status = rtems_task_start( Task_id[ 5 ], Task5, 0 ); directive_failed( status, "rtems_task_start of TA5" ); puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts_nocr( "TA1 - rtems_region_get_segment - wait 10 seconds for 3K " ); puts ( "segment from region 1"); status = rtems_region_get_segment( Region_id[ 1 ], 3072, RTEMS_DEFAULT_OPTIONS, 10 * rtems_clock_get_ticks_per_second(), &segment_address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( segment_address_4 ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() ); directive_failed( status, "rtems_task_wake_after" ); puts( "TA1 - rtems_task_delete - delete TA4" ); status = rtems_task_delete( Task_id[ 4 ] ); directive_failed( status, "rtems_task_delete of TA4" ); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( segment_address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_task_wake_after - yield processor" ); status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR ); puts( "TA1 - rtems_region_delete - delete region 1" ); status = rtems_region_delete( Region_id[ 1 ] ); directive_failed( status, "rtems_region_delete" ); puts( "TA1 - rtems_region_get_segment - get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &segment_address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 4 - " ); Put_address_from_area_4( segment_address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_2 ); fatal_directive_status( status, RTEMS_UNSATISFIED, "rtems_task_get_segment with no memory left" ); puts( "TA1 - rtems_task_get_segment - RTEMS_UNSATISFIED" ); puts( "TA1 - rtems_region_extend - extend region 4 by 4K" ); status = rtems_region_extend( Region_id[ 4 ], &Area_4[4096], 4096 ); directive_failed( status, "rtems_region_extend" ); puts( "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4" ); status = rtems_region_get_segment( Region_id[ 4 ], 3072, RTEMS_NO_WAIT, RTEMS_NO_TIMEOUT, &segment_address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got 3K segment from region 4 - " ); Put_address_from_area_4( segment_address_3 ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 4 - " ); Put_address_from_area_4( segment_address_1 ); status = rtems_region_return_segment( Region_id[ 4 ], segment_address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 4 - " ); Put_address_from_area_4( segment_address_3 ); status = rtems_region_return_segment( Region_id[ 4 ], segment_address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; puts( "TA1 - rtems_region_delete - delete region 4" ); status = rtems_region_delete( Region_id[ 4 ] ); directive_failed( status, "rtems_region_delete" ); puts( "*** END OF TEST 16 ***" ); rtems_test_exit( 0 ); }
rtems_task Task_1_through_5( rtems_task_argument argument ) { rtems_id rmid; rtems_id test_rmid; uint32_t index; uint32_t pass; uint32_t failed; rtems_status_code status; status = rtems_rate_monotonic_create( argument, &rmid ); directive_failed( status, "rtems_rate_monotonic_create" ); put_name( Task_name[ argument ], FALSE ); printf( "- rtems_rate_monotonic_create id = 0x%08" PRIxrtems_id "\n", rmid ); status = rtems_rate_monotonic_ident( argument, &test_rmid ); directive_failed( status, "rtems_rate_monotonic_ident" ); put_name( Task_name[ argument ], FALSE ); printf( "- rtems_rate_monotonic_ident id = 0x%08" PRIxrtems_id "\n", test_rmid ); if ( rmid != test_rmid ) { printf( "RMID's DO NOT MATCH (0x%" PRIxrtems_id " and 0x%" PRIxrtems_id ")\n", rmid, test_rmid ); rtems_test_exit( 0 ); } put_name( Task_name[ argument ], FALSE ); printf( "- (0x%08" PRIxrtems_id ") period %" PRIu32 "\n", rmid, Periods[ argument ] ); status = rtems_task_wake_after( 2 ); directive_failed( status, "rtems_task_wake_after" ); switch ( argument ) { case 1: case 2: case 3: case 4: while ( FOREVER ) { status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period" ); Count.count[ argument ]++; } break; case 5: pass = 0; failed = 0; status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period 1 of TA5" ); Get_all_counters(); while ( FOREVER ) { status = rtems_rate_monotonic_period( rmid, Periods[ argument ] ); directive_failed( status, "rtems_rate_monotonic_period 2 of TA5" ); Get_all_counters(); for( index = 1 ; index <= 4 ; index++ ) { if ( Temporary_count.count[ index ] != Iterations[ index ] ) { puts_nocr( "FAIL -- " ); put_name ( Task_name[ index ], FALSE ); printf ( " Actual=%" PRIu32 ", Expected=%" PRIu32 "\n", Temporary_count.count[ index ], Iterations[ index ] ); failed += 1; } } if ( failed == 5 ) rtems_test_exit( 0 ); pass += 1; printf( "TA5 - PERIODS CHECK OK (%" PRIu32 ")\n", pass ); FLUSH_OUTPUT(); if ( pass == 10 ) { puts( "" ); rtems_rate_monotonic_report_statistics(); rtems_rate_monotonic_reset_statistics( rmid ); puts( "" ); puts( "TA5 - PERIOD STATISTICS RESET" ); puts( "" ); rtems_rate_monotonic_report_statistics(); rtems_rate_monotonic_reset_all_statistics(); puts( "" ); puts( "TA5 - ALL PERIOD STATISTICS RESET" ); puts( "" ); rtems_rate_monotonic_report_statistics(); puts( "" ); puts( "*** END OF RATE MONOTONIC PERIOD STATISTICS TEST ***" ); rtems_test_exit( 0 ); } } break; } }
rtems_task Task_1( rtems_task_argument argument ) { void *address_1; void *address_2; void *address_3; void *address_4; void *address_5; void *address_6; void *address_7; void *address_8; rtems_status_code status; rtems_id region_id; status = rtems_region_ident(Region_name[ 1 ], ®ion_id); printf( "TA1 - rtems_region_ident - 0x%08x\n", region_id ); directive_failed(status, "rtems_region_ident of RN01"); puts( "TA1 - rtems_region_get_segment - wait on 64 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 64, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_1 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_1 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 128 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 128, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_2 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_2 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 256 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 256, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_3 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_3 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 512 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 512, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_4 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_4 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 1024 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 1024, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_5 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_5 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 2048 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 2048, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_6 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_6 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 4096 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 4096, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_7 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_7 ); new_line; puts( "TA1 - rtems_region_get_segment - wait on 8192 byte segment from region 1" ); rtems_region_get_segment( Region_id[ 1 ], 8192, RTEMS_DEFAULT_OPTIONS, RTEMS_NO_TIMEOUT, &address_8 ); directive_failed( status, "rtems_region_get_segment" ); puts_nocr( "TA1 - got segment from region 1 - " ); Put_address_from_area_1( address_8 ); new_line; rtems_test_pause(); puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_3 ); status = rtems_region_return_segment( Region_id[ 1 ], address_3 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_3 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_4 ); status = rtems_region_return_segment( Region_id[ 1 ], address_4 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_4 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_1 ); status = rtems_region_return_segment( Region_id[ 1 ], address_1 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_1 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_2 ); status = rtems_region_return_segment( Region_id[ 1 ], address_2 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_2 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_7 ); status = rtems_region_return_segment( Region_id[ 1 ], address_7 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_7 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_6 ); status = rtems_region_return_segment( Region_id[ 1 ], address_6 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_6 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_8 ); status = rtems_region_return_segment( Region_id[ 1 ], address_8 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_8 = 0; puts_nocr( "TA1 - rtems_region_return_segment - return segment to region 1 - " ); Put_address_from_area_1( address_5 ); status = rtems_region_return_segment( Region_id[ 1 ], address_5 ); directive_failed( status, "rtems_region_return_segment" ); new_line; address_5 = 0; puts( "TA1 - rtems_region_delete - walks heap if debug enabled" ); rtems_region_delete(Region_id[ 1 ]); puts( "*** END OF TEST 25 ***" ); rtems_test_exit( 0 ); }