URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/rtos/rtems/c/src/tests/sptests/sp13
- from Rev 30 to Rev 173
- ↔ Reverse comparison
Rev 30 → Rev 173
/init.c
0,0 → 1,113
/* Init |
* |
* This routine is the initialization task for this test program. |
* It is a user initialization task and has the responsibility for creating |
* and starting the tasks that make up the test. If the time of day |
* clock is required for the test, it should also be set to a known |
* value by this function. |
* |
* Input parameters: |
* argument - task argument |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: init.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#define TEST_INIT |
#include "system.h" |
|
#define MESSAGE_SIZE (sizeof(long) * 4) |
|
rtems_task Init( |
rtems_task_argument argument |
) |
{ |
rtems_status_code status; |
|
puts( "\n\n*** TEST 13 ***" ); |
|
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', ' ' ); |
|
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" ); |
|
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" ); |
|
status = rtems_task_create( |
Task_name[ 3 ], |
4, |
RTEMS_MINIMUM_STACK_SIZE * 2, |
RTEMS_DEFAULT_MODES, |
RTEMS_DEFAULT_ATTRIBUTES, |
&Task_id[ 3 ] |
); |
directive_failed( status, "rtems_task_create of TA3" ); |
|
status = rtems_task_start( Task_id[ 1 ], Task_1, 0 ); |
directive_failed( status, "rtems_task_start of TA1" ); |
|
status = rtems_task_start( Task_id[ 2 ], Task_2, 0 ); |
directive_failed( status, "rtems_task_start of TA2" ); |
|
status = rtems_task_start( Task_id[ 3 ], Task_3, 0 ); |
directive_failed( status, "rtems_task_start of TA3" ); |
|
Queue_name[ 1 ] = rtems_build_name( 'Q', '1', ' ', ' ' ); |
Queue_name[ 2 ] = rtems_build_name( 'Q', '2', ' ', ' ' ); |
Queue_name[ 3 ] = rtems_build_name( 'Q', '3', ' ', ' ' ); |
|
status = rtems_message_queue_create( |
Queue_name[ 1 ], |
100, |
MESSAGE_SIZE, |
RTEMS_DEFAULT_ATTRIBUTES, |
&Queue_id[ 1 ] |
); |
directive_failed( status, "rtems_message_queue_create of Q1" ); |
|
status = rtems_message_queue_create( |
Queue_name[ 2 ], |
10, |
MESSAGE_SIZE, |
RTEMS_PRIORITY, |
&Queue_id[ 2 ] |
); |
directive_failed( status, "rtems_message_queue_create of Q2" ); |
|
status = rtems_message_queue_create( |
Queue_name[ 3 ], |
100, |
MESSAGE_SIZE, |
RTEMS_DEFAULT_ATTRIBUTES, |
&Queue_id[ 3 ] |
); |
directive_failed( status, "rtems_message_queue_create of Q3" ); |
|
status = rtems_task_delete( RTEMS_SELF ); |
directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); |
} |
/task1.c
0,0 → 1,363
/* Task_1 |
* |
* This routine serves as a test task. It verifies the message manager. |
* |
* Input parameters: |
* argument - task argument |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: task1.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
#include <string.h> /* for memcmp */ |
|
char big_send_buffer[2048]; |
char big_receive_buffer[2048]; |
|
long buffer[ 4 ]; |
|
#define MESSAGE_SIZE (sizeof(long) * 4) |
|
void dope_buffer(unsigned char *buff, |
int buff_size, |
unsigned32 v) |
{ |
int i; |
unsigned char ch; |
|
ch = (' ' + (v % (0x7f - ' '))); |
|
for (i=0; i<buff_size; i++) |
{ |
*buff++ = ch++; |
if (ch >= 0x7f) |
ch = ' '; |
} |
} |
|
rtems_task Task_1( |
rtems_task_argument argument |
) |
{ |
rtems_id qid; |
rtems_unsigned32 index; |
rtems_unsigned32 count; |
rtems_status_code status; |
rtems_unsigned32 size; |
rtems_unsigned32 queue_size; |
char *cp; |
|
status = rtems_message_queue_ident( |
Queue_name[ 1 ], |
RTEMS_SEARCH_ALL_NODES, |
&qid |
); |
printf( "TA1 - rtems_message_queue_ident - qid => %08x\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*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*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 * 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*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 - SUCCESSFUL\n" ); |
status = rtems_message_queue_get_number_pending( Queue_id[ 3 ], &count ); |
printf( "TA1 - %d 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 ); |
printf( "TA1 - %d 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( "TA3 - rtems_message_queue_broadcast - NO BUFFER TO Q1" ); |
status = rtems_message_queue_broadcast( |
Queue_id[ 1 ], |
(long (*)[4])buffer, |
16, |
&count |
); |
printf( "TA3 - number of tasks awakened = %d\n", count ); |
|
|
puts( "TA1 - rtems_message_queue_get_number_pending - SUCCESSFUL\n" ); |
status = rtems_message_queue_get_number_pending( Queue_id[ 3 ], &count ); |
printf( "TA1 - %d 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 - %d 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 - %d 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[ 3 ], 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: %d\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++) |
{ |
/* printf("TA1 - message queue size: %d\n", 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 * TICKS_PER_SECOND); |
directive_failed(status, "rtems_message_queue_receive exact size"); |
if (size != queue_size) |
{ |
puts("TA1 - exact size size match failed"); |
exit(1); |
} |
|
if (memcmp(big_send_buffer, big_receive_buffer, size) != 0) |
{ |
puts("TA1 - exact size data match failed"); |
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"); |
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 ***" ); |
exit( 0 ); |
} |
/task2.c
0,0 → 1,140
/* Task_2 |
* |
* This routine serves as a test task. Multiple tasks are required to |
* verify all message manager capabilities. |
* |
* Input parameters: |
* argument - task argument |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: task2.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
#define MESSAGE_SIZE (sizeof(long) * 4) |
|
rtems_task Task_2( |
rtems_task_argument argument |
) |
{ |
long buffer[ 4 ]; |
rtems_unsigned32 size; |
rtems_task_priority previous_priority; |
rtems_status_code status; |
|
puts( |
"TA2 - rtems_message_queue_receive - receive from queue 1 - RTEMS_NO_WAIT" |
); |
status = rtems_message_queue_receive( |
Queue_id[ 1 ], |
buffer, |
&size, |
RTEMS_NO_WAIT, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_message_queue_receive" ); |
puts_nocr( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
puts( |
"TA2 - rtems_message_queue_receive - receive from queue 1 - " |
"RTEMS_WAIT FOREVER" |
); |
status = rtems_message_queue_receive( |
Queue_id[ 1 ], |
buffer, |
&size, |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_message_queue_receive" ); |
puts_nocr( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
puts( |
"TA2 - rtems_message_queue_receive - receive from queue 1 - " |
"RTEMS_WAIT FOREVER" |
); |
status = rtems_message_queue_receive( |
Queue_id[ 1 ], |
buffer, |
&size, |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_message_queue_receive" ); |
puts_nocr( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
puts( "TA2 - rtems_task_set_priority - make self highest priority task" ); |
status = rtems_task_set_priority( RTEMS_SELF, 3, &previous_priority ); |
directive_failed( status, "rtems_task_set_priority" ); |
|
puts( |
"TA2 - 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( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
Fill_buffer( "BUFFER 2 TO Q 2", (long *)buffer ); |
puts( "TA2 - rtems_message_queue_send - BUFFER 2 TO Q 2" ); |
directive_failed( status, "rtems_message_queue_send" ); |
|
status = rtems_message_queue_send( Queue_id[ 2 ], buffer, MESSAGE_SIZE ); |
directive_failed( status, "rtems_message_queue_send" ); |
|
puts( |
"TA2 - rtems_message_queue_receive - receive from queue 1 - " |
"10 second timeout" |
); |
status = rtems_message_queue_receive( |
Queue_id[ 1 ], |
buffer, |
&size, |
RTEMS_DEFAULT_OPTIONS, |
10 * TICKS_PER_SECOND |
); |
directive_failed( status, "rtems_message_queue_receive" ); |
puts_nocr( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
puts( |
"TA2 - 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( "TA2 - buffer received: " ); |
Put_buffer( buffer ); |
new_line; |
|
} |
/task3.c
0,0 → 1,77
/* Task_3 |
* |
* This routine serves as a test task. Its major function is to |
* broadcast a messge to all the other tasks. |
* |
* Input parameters: |
* argument - task argument |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: task3.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
rtems_task Task_3( |
rtems_task_argument argument |
) |
{ |
long buffer[ 4 ]; |
rtems_unsigned32 size; |
rtems_unsigned32 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 = %02d\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" ); |
} |
/sp13.scn
0,0 → 1,78
*** TEST 13 *** |
TA1 - rtems_message_queue_ident - qid => 18010001 |
TA1 - rtems_message_queue_send - BUFFER 1 TO Q 1 |
TA1 - rtems_message_queue_send - BUFFER 2 TO Q 1 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA2 - rtems_message_queue_receive - receive from queue 1 - RTEMS_NO_WAIT |
TA2 - buffer received: BUFFER 1 TO Q 1 |
TA2 - rtems_message_queue_receive - receive from queue 1 - RTEMS_WAIT FOREVER |
TA2 - buffer received: BUFFER 2 TO Q 1 |
TA2 - rtems_message_queue_receive - receive from queue 1 - RTEMS_WAIT FOREVER |
TA3 - rtems_message_queue_receive - receive from queue 2 - RTEMS_WAIT FOREVER |
TA1 - rtems_message_queue_send - BUFFER 3 TO Q 1 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA2 - buffer received: BUFFER 3 TO Q 1 |
TA2 - rtems_task_set_priority - make self highest priority task |
TA2 - rtems_message_queue_receive - receive from queue 2 - RTEMS_WAIT FOREVER |
<pause> |
TA1 - rtems_message_queue_send - BUFFER 1 TO Q 2 |
TA2 - buffer received: BUFFER 1 TO Q 2 |
TA2 - rtems_message_queue_send - BUFFER 2 TO Q 2 |
TA2 - rtems_message_queue_receive - receive from queue 1 - 10 second timeout |
TA1 - rtems_message_queue_receive - receive from queue 1 - 10 second timeout |
TA3 - buffer received: BUFFER 2 TO Q 2 |
TA3 - rtems_message_queue_broadcast - BUFFER 3 TO Q 1 |
TA2 - buffer received: BUFFER 3 TO Q 1 |
TA2 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA3 - number of tasks awakened = 02 |
TA3 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 3 TO Q 1 |
TA1 - rtems_task_delete - delete TA2 |
TA1 - rtems_message_queue_send - BUFFER 1 TO Q 3 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA3 - buffer received: BUFFER 1 TO Q 3 |
TA3 - rtems_task_delete - delete self |
<pause> |
TA1 - rtems_message_queue_send - BUFFER 2 TO Q 3 |
TA1 - rtems_message_queue_send - BUFFER 3 TO Q 3 |
TA1 - rtems_message_queue_send - BUFFER 4 TO Q 3 |
TA1 - rtems_message_queue_urgent - BUFFER 5 TO Q 3 |
TA1 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 5 TO Q 3 |
TA1 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 2 TO Q 3 |
TA1 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 3 TO Q 3 |
TA1 - rtems_message_queue_receive - receive from queue 3 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 4 TO Q 3 |
TA1 - rtems_message_queue_urgent - BUFFER 3 TO Q 2 |
TA1 - rtems_message_queue_receive - receive from queue 2 - RTEMS_WAIT FOREVER |
TA1 - buffer received: BUFFER 3 TO Q 2 |
<pause> |
TA1 - rtems_message_queue_delete - delete queue 1 |
TA1 - rtems_message_queue_urgent - BUFFER 3 TO Q 2 |
TA1 - rtems_message_queue_delete - delete queue 2 |
TA1 - rtems_message_queue_get_number_pending - SUCCESSFUL |
TA1 - 0 messages are pending on Q 3 |
TA1 - rtems_message_queue_flush - empty Q 3 |
TA1 - 0 messages were flushed from Q 3 |
TA1 - rtems_message_queue_send - BUFFER 1 TO Q 3 |
TA1 - rtems_message_queue_send - BUFFER 2 TO Q 3 |
TA3 - rtems_message_queue_broadcast - NO BUFFER TO Q1 |
TA3 - number of tasks awakened = 0 |
TA1 - rtems_message_queue_get_number_pending - SUCCESSFUL |
TA1 - 2 messages are pending on Q 3 |
TA1 - rtems_message_queue_send - BUFFER 3 TO Q 3 |
TA1 - rtems_message_queue_flush - Q 3 |
TA1 - 3 messages were flushed from Q 3 |
TA1 - rtems_message_queue_send until all message buffers consumed |
TA1 - all message buffers consumed |
TA1 - rtems_message_queue_flush - Q 3 |
TA1 - 100 messages were flushed from Q 3 |
<pause> |
TA1 - create message queue of 20 bytes on queue 1 |
TA1 - rtems_message_queue_delete - delete queue 1 |
<pause> |
TA1 - rtems_message_queue_create - variable sizes |
TA1 - rtems_message_queue_create and send - variable sizes |
*** END OF TEST 13 *** |
/Makefile.am
0,0 → 1,38
## |
## $Id: Makefile.am,v 1.2 2001-09-27 12:02:32 chris Exp $ |
## |
|
AUTOMAKE_OPTIONS = foreign 1.4 |
|
TEST = sp13 |
|
MANAGERS = io message |
|
C_FILES = init.c fillbuff.c putbuff.c task1.c task2.c task3.c |
C_O_FILES = $(C_FILES:%.c=${ARCH}/%.o) |
|
H_FILES = system.h |
noinst_HEADERS = $(H_FILES) |
|
DOCTYPES = scn doc |
DOCS = $(DOCTYPES:%=$(TEST).%) |
|
SRCS = $(C_FILES) $(H_FILES) |
OBJS = $(C_O_FILES) |
|
PRINT_SRCS = $(DOCS) |
|
PGM = ${ARCH}/$(TEST).exe |
|
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg |
include $(RTEMS_ROOT)/make/leaf.cfg |
include $(top_srcdir)/sptests.am |
|
${PGM}: $(OBJS) $(LINK_FILES) |
$(make-exe) |
|
all-local: $(ARCH) $(TMPINSTALL_FILES) |
|
EXTRA_DIST = $(C_FILES) $(DOCS) |
|
include $(top_srcdir)/../../../../automake/local.am |
/fillbuff.c
0,0 → 1,46
/* Fill_buffer |
* |
* This test routine copies a given source string to a given destination |
* buffer. |
* |
* Input parameters: |
* source - pointer to string to be copied |
* buffer - pointer to message buffer to be filled |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: fillbuff.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
#define MESSAGE_SIZE (sizeof(long) * 4) |
|
void Fill_buffer( |
char *source, |
long *buffer |
) |
{ |
char *p; |
int i; |
/* |
memcpy( buffer, source, 16 ); |
*/ |
p = source; |
for ( i=0 ; i<MESSAGE_SIZE ; i++ ) { |
buffer[i] = *p++; |
buffer[i] <<= 8; |
buffer[i] |= *p++; |
buffer[i] <<= 8; |
buffer[i] |= *p++; |
buffer[i] <<= 8; |
buffer[i] |= *p++; |
} |
} |
/sp13.doc
0,0 → 1,24
# |
# $Id: sp13.doc,v 1.6 1999/11/17 17:51:32 joel Exp $ |
# |
# COPYRIGHT (c) 1989-1999. |
# On-Line Applications Research Corporation (OAR). |
# |
# The license and distribution terms for this file may be |
# found in the file LICENSE in this distribution or at |
# http://www.OARcorp.com/rtems/license.html. |
# |
|
|
This file describes the directives and concepts tested by this test set. |
|
test set name: test13 |
|
directives: |
ex_init, ex_start, t_create, t_start, t_delete, tm_tick, i_return, |
q_create, q_ident, q_delete, q_send, q_urgent, q_broadcast, q_receive, |
tm_wkafter, t_setpri |
|
concepts: |
|
a. This test checks out the message manager. |
/system.h
0,0 → 1,68
/* system.h |
* |
* This include file contains information that is included in every |
* function in the test set. |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: system.h,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include <tmacros.h> |
|
/* functions */ |
|
rtems_task Init( |
rtems_task_argument argument |
); |
|
void Fill_buffer( |
char source[], |
long *buffer |
); |
|
void Put_buffer( |
long *buffer |
); |
|
rtems_task Task_1( |
rtems_task_argument argument |
); |
|
rtems_task Task_2( |
rtems_task_argument argument |
); |
|
rtems_task Task_3( |
rtems_task_argument argument |
); |
|
/* configuration information */ |
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER |
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER |
|
#define CONFIGURE_MAXIMUM_TASKS 4 |
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 10 |
#define CONFIGURE_TICKS_PER_TIMESLICE 100 |
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE |
|
#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) |
|
#include <confdefs.h> |
|
/* global variables */ |
|
TEST_EXTERN rtems_id Task_id[ 4 ]; /* array of task ids */ |
TEST_EXTERN rtems_name Task_name[ 4 ]; /* array of task names */ |
|
TEST_EXTERN rtems_id Queue_id[ 4 ]; /* array of queue ids */ |
TEST_EXTERN rtems_name Queue_name[ 4 ]; /* array of queue names */ |
|
/* end of include file */ |
/putbuff.c
0,0 → 1,40
/* Put_buffer |
* |
* This test routine prints the given buffer. |
* buffer. |
* |
* Input parameters: |
* buffer - pointer to message buffer to be printer |
* |
* Output parameters: NONE |
* |
* COPYRIGHT (c) 1989-1999. |
* On-Line Applications Research Corporation (OAR). |
* |
* The license and distribution terms for this file may be |
* found in the file LICENSE in this distribution or at |
* http://www.OARcorp.com/rtems/license.html. |
* |
* $Id: putbuff.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
#define MESSAGE_SIZE (4) |
|
void Put_buffer( |
long *buffer |
) |
{ |
int i; |
/* |
printf( "%16s", (char *)buffer ); |
*/ |
for ( i=0 ; i< MESSAGE_SIZE ; i++ ) { |
printf( "%c%c%c%c", (char) (buffer[i] >> 24), |
(char) (buffer[i] >> 16 & 0xff), |
(char) (buffer[i] >> 8 & 0xff), |
(char) (buffer[i] >> 0 & 0xff) ); |
} |
|
} |