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/sp12
- from Rev 30 to Rev 173
- ↔ Reverse comparison
Rev 30 → Rev 173
/init.c
0,0 → 1,178
/* 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" |
|
rtems_task Init( |
rtems_task_argument argument |
) |
{ |
rtems_status_code status; |
|
puts( "\n\n*** TEST 12 ***" ); |
|
Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' ); |
Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' ); |
Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' ); |
Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' ); |
Task_name[ 5 ] = rtems_build_name( 'T', 'A', '5', ' ' ); |
|
Priority_task_name[ 1 ] = rtems_build_name( 'P', 'R', 'I', '1' ); |
Priority_task_name[ 2 ] = rtems_build_name( 'P', 'R', 'I', '2' ); |
Priority_task_name[ 3 ] = rtems_build_name( 'P', 'R', 'I', '3' ); |
Priority_task_name[ 4 ] = rtems_build_name( 'P', 'R', 'I', '4' ); |
Priority_task_name[ 5 ] = rtems_build_name( 'P', 'R', 'I', '5' ); |
|
Semaphore_name[ 1 ] = rtems_build_name( 'S', 'M', '1', ' ' ); |
Semaphore_name[ 2 ] = rtems_build_name( 'S', 'M', '2', ' ' ); |
Semaphore_name[ 3 ] = rtems_build_name( 'S', 'M', '3', ' ' ); |
|
status = rtems_semaphore_create( |
Semaphore_name[ 1 ], |
1, |
RTEMS_DEFAULT_ATTRIBUTES, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 1 ] |
); |
directive_failed( status, "rtems_semaphore_create of SM1" ); |
|
status = rtems_semaphore_create( |
Semaphore_name[ 2 ], |
0, |
RTEMS_PRIORITY, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 2 ] |
); |
directive_failed( status, "rtems_semaphore_create of SM2" ); |
|
status = rtems_semaphore_create( |
Semaphore_name[ 3 ], |
1, |
RTEMS_DEFAULT_ATTRIBUTES, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 3 ] |
); |
directive_failed( status, "rtems_semaphore_create of SM3" ); |
|
puts( "INIT - Forward priority queue test" ); |
Priority_test_driver( 0 ); |
|
puts( "INIT - Backward priority queue test" ); |
Priority_test_driver( 32 ); |
|
rtems_test_pause(); |
|
puts( "INIT - Binary Semaphore and Priority Inheritance Test" ); |
|
status = rtems_semaphore_delete( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_delete of SM2" ); |
|
puts( "INIT - rtems_semaphore_create - allocated binary semaphore" ); |
status = rtems_semaphore_create( |
Semaphore_name[ 2 ], |
0, |
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 2 ] |
); |
directive_failed( status, "rtems_semaphore_create of priority inherit SM2" ); |
|
puts( "INIT - rtems_semaphore_release - allocated binary semaphore" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release of SM2" ); |
|
puts( "INIT - rtems_semaphore_delete - allocated binary semaphore" ); |
status = rtems_semaphore_delete( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_delete of SM2" ); |
|
status = rtems_semaphore_create( |
Semaphore_name[ 2 ], |
1, |
RTEMS_BINARY_SEMAPHORE | RTEMS_PRIORITY | RTEMS_INHERIT_PRIORITY, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 2 ] |
); |
directive_failed( status, "rtems_semaphore_create of priority inherit SM2" ); |
|
Priority_test_driver( 64 ); |
|
rtems_test_pause(); |
|
status = rtems_semaphore_delete( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_delete of SM2" ); |
|
status = rtems_semaphore_create( |
Semaphore_name[ 2 ], |
0, |
RTEMS_PRIORITY, |
RTEMS_NO_PRIORITY, |
&Semaphore_id[ 2 ] |
); |
directive_failed( status, "rtems_semaphore_create of priority SM2" ); |
|
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release of SM2" ); |
|
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, |
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, |
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" ); |
|
status = rtems_task_delete( RTEMS_SELF ); |
directive_failed( status, "rtems_task_delete of RTEMS_SELF" ); |
} |
/task1.c
0,0 → 1,152
/* Task_1 |
* |
* This routine serves as a test task. It verifies the semaphore 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" |
|
rtems_task Task_1( |
rtems_task_argument argument |
) |
{ |
rtems_id smid; |
rtems_status_code status; |
|
status = rtems_semaphore_ident( |
Semaphore_name[ 1 ], |
RTEMS_SEARCH_ALL_NODES, |
&smid |
); |
printf( "TA1 - rtems_semaphore_ident - smid => %08x\n", smid ); |
directive_failed( status, "rtems_semaphore_ident of SM1" ); |
|
puts( "TA1 - rtems_semaphore_obtain - wait forever on SM2" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 2 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain of SM2" ); |
puts( "TA1 - got SM2" ); |
|
puts( "TA1 - rtems_semaphore_obtain - wait forever on SM3" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 3 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain of SM3" ); |
puts( "TA1 - got SM3" ); |
|
puts( "TA1 - rtems_semaphore_obtain - get SM1 - RTEMS_NO_WAIT" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_NO_WAIT, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain of SM1" ); |
puts( "TA1 - got SM1" ); |
|
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(); |
|
puts( "TA1 - rtems_semaphore_release - release SM1" ); |
status = rtems_semaphore_release( Semaphore_id[ 1 ] ); |
directive_failed( status, "rtems_semaphore_release of SM1" ); |
|
puts( |
"TA1 - rtems_semaphore_obtain - waiting for SM1 with 10 second timeout" |
); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_DEFAULT_OPTIONS, |
10 * TICKS_PER_SECOND |
); |
directive_failed( status, "rtems_semaphore_obtain of SM1" ); |
puts( "TA1 - got SM1" ); |
|
puts( "TA1 - rtems_semaphore_release - release SM2" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release of SM2" ); |
|
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(); |
|
puts( "TA1 - rtems_task_delete - delete TA3" ); |
status = rtems_task_delete( Task_id[ 3 ] ); |
directive_failed( status, "rtems_task_delete of TA3" ); |
|
status = rtems_task_create( |
Task_name[ 4 ], |
4, |
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 ], |
4, |
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 - sleep 5 seconds" ); |
status = rtems_task_wake_after( 5*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( "TA1 - rtems_semaphore_release - release SM1" ); |
status = rtems_semaphore_release( Semaphore_id[ 1 ] ); |
directive_failed( status, "rtems_semaphore_release on SM1" ); |
|
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" ); |
|
puts( "TA1 - rtems_semaphore_delete - delete SM1" ); |
status = rtems_semaphore_delete( Semaphore_id[ 1 ] ); |
directive_failed( status, "rtems_semaphore_delete of SM1" ); |
|
puts( "TA1 - rtems_semaphore_delete - delete SM3" ); |
status = rtems_semaphore_delete( Semaphore_id[ 3 ] ); |
directive_failed( status, "rtems_semaphore_delete of SM3" ); |
|
puts( "TA1 - rtems_task_delete - delete self" ); |
status = rtems_task_delete( RTEMS_SELF ); |
directive_failed( status, "rtems_task_delete of TA1" ); |
} |
/task2.c
0,0 → 1,64
/* Task_2 |
* |
* This routine serves as a test task. It simply obtains semaphores |
* 1 and 2, the later when it is a high priority task. |
* |
* 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" |
|
rtems_task Task_2( |
rtems_task_argument argument |
) |
{ |
rtems_status_code status; |
rtems_task_priority previous_priority; |
|
puts( "TA2 - rtems_semaphore_obtain - wait forever on SM1" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
puts( "TA2 - got SM1" ); |
directive_failed( status, "rtems_semaphore_obtain on SM1" ); |
|
puts( "TA2 - rtems_semaphore_release - release SM1" ); |
status = rtems_semaphore_release( Semaphore_id[ 1 ] ); |
directive_failed( status, "rtems_semaphore_release on SM1" ); |
|
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 on TA2" ); |
|
puts( "TA2 - rtems_semaphore_obtain - wait forever on SM2" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 2 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
puts( "TA2 - got SM2" ); |
directive_failed( status, "rtems_semaphore_obtain on SM2" ); |
|
puts( "TA2 - rtems_semaphore_release - release SM2" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release on SM2" ); |
|
puts( "TA2 - rtems_task_delete - delete self" ); |
status = rtems_task_delete( RTEMS_SELF ); |
directive_failed( status, "rtems_task_delete of TA2" ); |
} |
/task3.c
0,0 → 1,49
/* Task_3 |
* |
* This routine serves as a test task. It simply obtains semaphore |
* 2 and waits forever attempting to obtain semaphore 3. |
* |
* 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 |
) |
{ |
rtems_status_code status; |
|
puts( "TA3 - rtems_semaphore_obtain - wait forever on SM2" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 2 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain on SM2" ); |
puts( "TA3 - got SM2" ); |
|
puts( "TA3 - rtems_semaphore_release - release SM2" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release on SM2" ); |
|
puts( "TA3 - rtems_semaphore_obtain - wait forever on SM3" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 3 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain on SM3" ); |
} |
/pridrv.c
0,0 → 1,130
/* Priority_test_driver |
* |
* 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: |
* priority_base - priority_base switch |
* |
* 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: pridrv.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
void Priority_test_driver( |
rtems_unsigned32 priority_base |
) |
{ |
rtems_task_priority previous_priority; |
rtems_unsigned32 index; |
rtems_status_code status; |
|
for ( index = 1 ; index <= 5 ; index++ ) { |
switch ( index ) { |
case 1: |
case 2: |
case 3: |
Task_priority[ index ] = priority_base + index; |
break; |
default: |
Task_priority[ index ] = priority_base + 3; |
break; |
} |
|
status = rtems_task_create( |
Priority_task_name[ index ], |
Task_priority[ index ], |
RTEMS_MINIMUM_STACK_SIZE * 2, |
RTEMS_DEFAULT_MODES, |
RTEMS_DEFAULT_ATTRIBUTES, |
&Priority_task_id[ index ] |
); |
directive_failed( status, "rtems_task_create loop" ); |
|
} |
|
if ( priority_base == 0 ) { |
for ( index = 1 ; index <= 5 ; index++ ) { |
status = rtems_task_start( |
Priority_task_id[ index ], |
Priority_task, |
index |
); |
directive_failed( status, "rtems_task_start loop" ); |
} |
} else { |
for ( index = 5 ; index >= 1 ; index-- ) { |
status = rtems_task_start( |
Priority_task_id[ index ], |
Priority_task, |
index |
); |
directive_failed( status, "rtems_task_start loop" ); |
|
status = rtems_task_wake_after( TICKS_PER_SECOND ); |
directive_failed( status, "rtems_task_wake_after loop" ); |
|
if ( priority_base == 64 ) { |
if ( index == 4 ) { |
status = rtems_task_set_priority( |
Priority_task_id[ 5 ], |
priority_base + 4, |
&previous_priority |
); |
printf( "PDRV - change priority of PRI5 from %d to %d\n", |
previous_priority, |
priority_base + 4 |
); |
directive_failed( status, "PDRV rtems_task_set_priority" ); |
} |
status = rtems_task_set_priority( |
Priority_task_id[ 5 ], |
RTEMS_CURRENT_PRIORITY, |
&previous_priority |
); |
directive_failed( status, "PDRV rtems_task_set_priority CURRENT" ); |
printf( "PDRV - priority of PRI5 is %d\n", previous_priority ); |
} |
} |
} |
|
status = rtems_task_wake_after( TICKS_PER_SECOND ); |
directive_failed( status, "rtems_task_wake_after after loop" ); |
|
if ( priority_base == 0 ) { |
for ( index = 1 ; index <= 5 ; index++ ) { |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release loop" ); |
} |
} |
|
if ( priority_base == 64 ) { |
puts( "PDRV - rtems_task_resume - PRI5" ); |
status = rtems_task_resume( Priority_task_id[ 5 ] ); |
directive_failed( status, "rtems_task_resume" ); |
|
status = rtems_task_wake_after( 1 * TICKS_PER_SECOND ); |
directive_failed( status, "rtems_task_wake_after so PRI5 can run" ); |
|
status = rtems_task_delete( Priority_task_id[ 5 ] ); |
directive_failed( status, "rtems_task_delete of PRI5" ); |
} |
else { |
for ( index = 1 ; index <= 5 ; index++ ) { |
status = rtems_task_delete( Priority_task_id[ index ] ); |
directive_failed( status, "rtems_task_delete loop" ); |
} |
} |
} |
/sp12.scn
0,0 → 1,78
*** TEST 12 *** |
INIT - Forward priority queue test |
PRI1 - rtems_semaphore_obtain - wait forever on SM2 |
PRI2 - rtems_semaphore_obtain - wait forever on SM2 |
PRI3 - rtems_semaphore_obtain - wait forever on SM2 |
PRI4 - rtems_semaphore_obtain - wait forever on SM2 |
PRI5 - rtems_semaphore_obtain - wait forever on SM2 |
INIT - Backward priority queue test |
PRI5 - rtems_semaphore_obtain - wait forever on SM2 |
PRI4 - rtems_semaphore_obtain - wait forever on SM2 |
PRI3 - rtems_semaphore_obtain - wait forever on SM2 |
PRI2 - rtems_semaphore_obtain - wait forever on SM2 |
PRI1 - rtems_semaphore_obtain - wait forever on SM2 |
<pause> |
INIT - Binary Semaphore and Priority Inheritance Test |
INIT - rtems_semaphore_create - allocated binary semaphore |
INIT - rtems_semaphore_release - allocated binary semaphore |
INIT - rtems_semaphore_delete - allocated binary semaphore |
PRI5 - rtems_semaphore_obtain - wait forever on SM2 |
PRI5 - rtems_task_suspend - until all priority tasks blocked |
PDRV - priority of PRI5 is 67 |
PRI4 - rtems_semaphore_obtain - wait forever on SM2 |
PDRV - change priority of PRI5 from 67 to 68 |
PDRV - priority of PRI5 is 67 |
PRI3 - rtems_semaphore_obtain - wait forever on SM2 |
PDRV - priority of PRI5 is 67 |
PRI2 - rtems_semaphore_obtain - wait forever on SM2 |
PDRV - priority of PRI5 is 66 |
PRI1 - rtems_semaphore_obtain - wait forever on SM2 |
PDRV - priority of PRI5 is 65 |
PDRV - rtems_task_resume - PRI5 |
PRI5 - rtems_task_delete - all tasks waiting on SM2 |
PRI5 - rtems_semaphore_obtain - nested |
PRI5 - rtems_semaphore_release - nested |
PRI5 - rtems_semaphore_release - restore priority |
PRI5 - priority of PRI5 is 68 |
<pause> |
TA1 - rtems_semaphore_ident - smid => 18010002 |
TA1 - rtems_semaphore_obtain - wait forever on SM2 |
TA1 - got SM2 |
TA1 - rtems_semaphore_obtain - wait forever on SM3 |
TA1 - got SM3 |
TA1 - rtems_semaphore_obtain - get SM1 - RTEMS_NO_WAIT |
TA1 - got SM1 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA2 - rtems_semaphore_obtain - wait forever on SM1 |
TA3 - rtems_semaphore_obtain - wait forever on SM2 |
<pause> |
TA1 - rtems_semaphore_release - release SM1 |
TA1 - rtems_semaphore_obtain - waiting for SM1 with 10 second timeout |
TA2 - got SM1 |
TA2 - rtems_semaphore_release - release SM1 |
TA2 - rtems_task_set_priority - make self highest priority task |
TA2 - rtems_semaphore_obtain - wait forever on SM2 |
TA1 - got SM1 |
TA1 - rtems_semaphore_release - release SM2 |
TA2 - got SM2 |
TA2 - rtems_semaphore_release - release SM2 |
TA2 - rtems_task_delete - delete self |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA3 - got SM2 |
TA3 - rtems_semaphore_release - release SM2 |
TA3 - rtems_semaphore_obtain - wait forever on SM3 |
<pause> |
TA1 - rtems_task_delete - delete TA3 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA4 - rtems_semaphore_obtain - wait forever on SM1 |
TA5 - rtems_semaphore_obtain - wait forever on SM1 |
TA1 - rtems_task_delete - delete TA4 |
TA1 - rtems_semaphore_release - release SM1 |
TA1 - rtems_task_wake_after - sleep 5 seconds |
TA5 - got SM1 |
TA5 - rtems_semaphore_obtain - wait forever on SM1 |
TA1 - rtems_semaphore_delete - delete SM1 |
TA1 - rtems_semaphore_delete - delete SM3 |
TA1 - rtems_task_delete - delete self |
TA5 - SM1 deleted by TA1 |
*** END OF TEST 12 *** |
/task4.c
0,0 → 1,36
/* Task_4 |
* |
* This routine serves as a test task. It waits forever attempting |
* to obtain semaphore 1. However, it should never get the semaphore! |
* |
* 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: task4.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
rtems_task Task_4( |
rtems_task_argument argument |
) |
{ |
rtems_status_code status; |
|
puts( "TA4 - rtems_semaphore_obtain - wait forever on SM1" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain on SM1" ); |
} |
/task5.c
0,0 → 1,54
/* Task5 |
* |
* This routine serves as a test task. It obtains semaphore 1 correctly |
* once, then waits for semaphore 1 again. Task 1 should delete the |
* semaphore, thus waking this task up. |
* |
* 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: task5.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
rtems_task Task5( |
rtems_task_argument argument |
) |
{ |
rtems_status_code status; |
|
puts( "TA5 - rtems_semaphore_obtain - wait forever on SM1" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
directive_failed( status, "rtems_semaphore_obtain on SM1" ); |
puts( "TA5 - got SM1" ); |
|
puts( "TA5 - rtems_semaphore_obtain - wait forever on SM1" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 1 ], |
RTEMS_DEFAULT_OPTIONS, |
RTEMS_NO_TIMEOUT |
); |
fatal_directive_status( |
status, |
RTEMS_OBJECT_WAS_DELETED, |
"rtems_semaphore_obtain on SM1" |
); |
puts( "TA5 - SM1 deleted by TA1" ); |
|
puts( "*** END OF TEST 12 ***" ); |
exit( 0 ); |
} |
/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 = sp12 |
|
MANAGERS = io semaphore |
|
C_FILES = init.c task1.c task2.c task3.c task4.c task5.c pridrv.c pritask.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 |
/sp12.doc
0,0 → 1,26
# |
# $Id: sp12.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: test12 |
|
directives: |
ex_init, ex_start, t_create, t_start, t_delete, tm_tick, i_return, |
sm_create, sm_ident, sm_delete, sm_p, sm_v, tm_wkafter, t_setpri |
|
concepts: |
|
a. This test checks out the semaphore manager. |
|
b. This test forces _Flush_taskq() to unblock a task waiting |
on a deleted object. |
/system.h
0,0 → 1,82
/* 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 Priority_test_driver( |
rtems_unsigned32 priority_base |
); |
|
rtems_task Priority_task( |
rtems_task_argument its_index |
); |
|
rtems_task Task_1( |
rtems_task_argument argument |
); |
|
rtems_task Task_2( |
rtems_task_argument argument |
); |
|
rtems_task Task_3( |
rtems_task_argument argument |
); |
|
rtems_task Task_4( |
rtems_task_argument argument |
); |
|
rtems_task Task5( |
rtems_task_argument argument |
); |
|
/* configuration information */ |
|
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER |
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER |
|
#define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2) |
#define CONFIGURE_MAXIMUM_TASKS 8 |
#define CONFIGURE_MAXIMUM_SEMAPHORES 10 |
#define CONFIGURE_TICKS_PER_TIMESLICE 100 |
|
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE |
|
#define CONFIGURE_EXTRA_TASK_STACKS (6 * RTEMS_MINIMUM_STACK_SIZE) |
|
#include <confdefs.h> |
|
/* global variables */ |
|
|
TEST_EXTERN rtems_id Task_id[ 6 ]; /* array of task ids */ |
TEST_EXTERN rtems_name Task_name[ 6 ]; /* array of task names */ |
|
TEST_EXTERN rtems_id Priority_task_id[ 6 ]; /* array of task ids */ |
TEST_EXTERN rtems_name Priority_task_name[ 6 ]; /* array of task names */ |
|
TEST_EXTERN rtems_task_priority Task_priority[ 6 ]; |
|
TEST_EXTERN rtems_id Semaphore_id[ 4 ]; /* array of semaphore ids */ |
TEST_EXTERN rtems_name Semaphore_name[ 4 ]; /* array of semaphore names */ |
|
/* end of include file */ |
/pritask.c
0,0 → 1,90
/* Priority_task |
* |
* This routine serves as a test task. It verifies the semaphore manager. |
* |
* Input parameters: |
* its_index - priority index |
* |
* 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: pritask.c,v 1.2 2001-09-27 12:02:32 chris Exp $ |
*/ |
|
#include "system.h" |
|
rtems_task Priority_task( |
rtems_task_argument its_index |
) |
{ |
rtems_interval timeout; |
rtems_task_priority its_priority; |
rtems_task_priority current_priority; |
rtems_status_code status; |
rtems_unsigned32 index; |
|
its_priority = Task_priority[ its_index ]; |
|
if ( its_priority < 3 ) |
timeout = 5 * TICKS_PER_SECOND; |
else |
timeout = RTEMS_NO_TIMEOUT; |
|
put_name( Priority_task_name[ its_index ], FALSE ); |
puts( " - rtems_semaphore_obtain - wait forever on SM2" ); |
|
status = rtems_semaphore_obtain( |
Semaphore_id[ 2 ], |
RTEMS_DEFAULT_OPTIONS, |
timeout |
); |
directive_failed( status, "rtems_semaphore_obtain of SM2" ); |
|
if ( its_priority < 64 ) { |
printf( "PRI%d - WHY AM I HERE? (pri=%d)", its_index, its_priority ); |
exit( 0 ); |
} |
|
if ( its_index == 5 ) |
puts( "PRI5 - rtems_task_suspend - until all priority tasks blocked" ); |
status = rtems_task_suspend( RTEMS_SELF ); |
directive_failed( status, "rtems_task_suspend" ); |
|
puts( "PRI5 - rtems_task_delete - all tasks waiting on SM2" ); |
for ( index = 1 ; index < 5 ; index++ ) { |
status = rtems_task_delete( Priority_task_id[ index ] ); |
directive_failed( status, "rtems_task_delete loop" ); |
} |
|
puts( "PRI5 - rtems_semaphore_obtain - nested" ); |
status = rtems_semaphore_obtain( |
Semaphore_id[ 2 ], |
RTEMS_DEFAULT_OPTIONS, |
timeout |
); |
directive_failed( status, "rtems_semaphore_obtain nested" ); |
|
puts( "PRI5 - rtems_semaphore_release - nested" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release nested " ); |
|
puts( "PRI5 - rtems_semaphore_release - restore priority" ); |
status = rtems_semaphore_release( Semaphore_id[ 2 ] ); |
directive_failed( status, "rtems_semaphore_release" ); |
|
status = rtems_task_set_priority( |
RTEMS_SELF, |
RTEMS_CURRENT_PRIORITY, |
¤t_priority |
); |
directive_failed( status, "PRI5 rtems_task_set_priority CURRENT" ); |
printf( "PRI5 - priority of PRI5 is %d\n", current_priority ); |
|
(void) rtems_task_suspend( RTEMS_SELF ); |
} |