OpenCores
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,
&current_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 );
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.