mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-16 04:18:59 +00:00
Initial revision
This commit is contained in:
235
c/src/ada-tests/mptests/mp01/mptest.adb
Normal file
235
c/src/ada-tests/mptests/mp01/mptest.adb
Normal file
@@ -0,0 +1,235 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 1 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:38:33 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
C : RTEMS.CHARACTER;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 1 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE /= 1 then
|
||||
C := 'S';
|
||||
else
|
||||
C := 'M';
|
||||
end if;
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( C, 'A', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( C, 'A', '2', ' ' );
|
||||
MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( C, 'A', '3', ' ' );
|
||||
|
||||
TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
|
||||
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating task 1 (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating task 2 (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating task 3 (Local)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 3 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
TID : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
|
||||
FALSE
|
||||
);
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
|
||||
TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
|
||||
FALSE
|
||||
);
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( TID ) = 1 then -- TASK 1
|
||||
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
MPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
|
||||
FALSE
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( " - deleting self" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
else if TEST_SUPPORT.TASK_NUMBER( TID ) = 2 then -- TASK 2
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), FALSE );
|
||||
TEXT_IO.PUT( " - waiting to be deleted by " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), TRUE );
|
||||
|
||||
loop
|
||||
TEST_SUPPORT.DO_NOTHING; -- can't be optimized away
|
||||
end loop;
|
||||
|
||||
else -- TASK 3
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
|
||||
TEXT_IO.PUT( " - getting TID of " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( 2 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
TID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 3 ), FALSE );
|
||||
TEXT_IO.PUT( " - deleting " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( 2 ), TRUE );
|
||||
|
||||
RTEMS.TASK_DELETE( TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
end if;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
165
c/src/ada-tests/mptests/mp01/mptest.ads
Normal file
165
c/src/ada-tests/mptests/mp01/mptest.ads
Normal file
@@ -0,0 +1,165 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 1 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:38:34 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.GLOBAL, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
33, -- maximum # global objects
|
||||
33 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:29 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:41 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
213
c/src/ada-tests/mptests/mp02/mptest.adb
Normal file
213
c/src/ada-tests/mptests/mp02/mptest.adb
Normal file
@@ -0,0 +1,213 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 2 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:38:41 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 2 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating test task (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
TEST_TID : RTEMS.ID;
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
NOTE : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
REMOTE_NODE := 2;
|
||||
else
|
||||
REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task (all nodes)" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
--
|
||||
-- We just got this ID above so looping is not necessary.
|
||||
--
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task (1 node)" );
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( REMOTE_NODE ),
|
||||
REMOTE_NODE,
|
||||
TEST_TID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT" );
|
||||
|
||||
if TEST_TID /= REMOTE_TID then
|
||||
TEXT_IO.PUT_LINE( "task_ident tid's do not match!!" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"task_delete of remote task"
|
||||
);
|
||||
TEXT_IO.PUT_LINE(
|
||||
"task_delete of remote task returned the correct error"
|
||||
);
|
||||
|
||||
RTEMS.TASK_START( REMOTE_TID, MPTEST.TEST_TASK'ACCESS, 0, STATUS );
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"task_start of remote task"
|
||||
);
|
||||
TEXT_IO.PUT_LINE(
|
||||
"task_start of remote task returned the correct error"
|
||||
);
|
||||
|
||||
RTEMS.TASK_RESTART( REMOTE_TID, 0, STATUS );
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"task_restart of remote task"
|
||||
);
|
||||
TEXT_IO.PUT_LINE(
|
||||
"task_restart of remote task returned the correct error"
|
||||
);
|
||||
|
||||
|
||||
TEXT_IO.PUT( "Setting notepad " );
|
||||
UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
|
||||
TEXT_IO.PUT( " of the remote task to " );
|
||||
UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ), WIDTH=>1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.TASK_SET_NOTE(
|
||||
REMOTE_TID,
|
||||
RTEMS.GET_NODE( TID ),
|
||||
RTEMS.GET_NODE( TID ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting a notepad of the remote task" );
|
||||
RTEMS.TASK_GET_NOTE(
|
||||
REMOTE_TID,
|
||||
RTEMS.GET_NODE( TID ),
|
||||
NOTE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
|
||||
|
||||
if NOTE = RTEMS.GET_NODE( TID ) then
|
||||
TEXT_IO.PUT_LINE( "Remote notepad set and read correctly" );
|
||||
else
|
||||
TEXT_IO.PUT(
|
||||
"FAILURE!!! Remote notepad was not set and read correctly ("
|
||||
);
|
||||
UNSIGNED32_IO.PUT( NOTE );
|
||||
TEXT_IO.PUT( ", " );
|
||||
UNSIGNED32_IO.PUT( RTEMS.GET_NODE( TID ) );
|
||||
TEXT_IO.PUT_LINE( ")" );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_DELETE( REMOTE_TID, STATUS );
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
165
c/src/ada-tests/mptests/mp02/mptest.ads
Normal file
165
c/src/ada-tests/mptests/mp02/mptest.ads
Normal file
@@ -0,0 +1,165 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 2 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:38:42 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:32:48 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:01 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
277
c/src/ada-tests/mptests/mp03/mptest.adb
Normal file
277
c/src/ada-tests/mptests/mp03/mptest.adb
Normal file
@@ -0,0 +1,277 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 3 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:38:49 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 3 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.TIMER_NAME( 1 ),
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- DELAYED_SEND_EVENT
|
||||
--
|
||||
|
||||
procedure DELAYED_SEND_EVENT (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( MPTEST.TASK_ID( 1 ), RTEMS.EVENT_16, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
end DELAYED_SEND_EVENT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
MPTEST.REMOTE_NODE := 2;
|
||||
else
|
||||
MPTEST.REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.DELAYED_SEND_EVENT'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
MPTEST.TEST_TASK_SUPPORT( 1 );
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
11 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.DELAYED_SEND_EVENT'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
2 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end if;
|
||||
|
||||
MPTEST.TEST_TASK_SUPPORT( 2 );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_SUPPORT
|
||||
--
|
||||
|
||||
|
||||
procedure TEST_TASK_SUPPORT (
|
||||
NODE : in RTEMS.UNSIGNED32
|
||||
) is
|
||||
EVENTS : RTEMS.EVENT_SET;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = NODE then
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTS,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
|
||||
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.UNSATISFIED,
|
||||
"EVENT_RECEIVE"
|
||||
);
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
2 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
|
||||
TEXT_IO.PUT_LINE( " - Suspending remote task" );
|
||||
RTEMS.TASK_SUSPEND( MPTEST.REMOTE_TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
2 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( NODE ), FALSE );
|
||||
TEXT_IO.PUT_LINE( " - Resuming remote task" );
|
||||
|
||||
RTEMS.TASK_RESUME( MPTEST.REMOTE_TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
|
||||
|
||||
end loop;
|
||||
|
||||
else
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTS,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.ARE_STATUSES_EQUAL( RTEMS.SUCCESSFUL, STATUS );
|
||||
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.UNSATISFIED,
|
||||
"EVENT_RECEIVE"
|
||||
);
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( REMOTE_NODE ), FALSE );
|
||||
TEXT_IO.PUT_LINE( " - have I been suspended???" );
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
TEST_SUPPORT.TICKS_PER_SECOND / 2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end loop;
|
||||
|
||||
end if;
|
||||
|
||||
end TEST_TASK_SUPPORT;
|
||||
|
||||
end MPTEST;
|
||||
215
c/src/ada-tests/mptests/mp03/mptest.ads
Normal file
215
c/src/ada-tests/mptests/mp03/mptest.ads
Normal file
@@ -0,0 +1,215 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 3 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:38:50 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- DELAYED_SEND_EVENT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a timer service routine which sends an
|
||||
-- event set to a waiting task.
|
||||
--
|
||||
|
||||
procedure DELAYED_SEND_EVENT (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_SUPPORT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram performs the bulk of the test. Based on the NODE
|
||||
-- specified, this subprogram loops suspending/resuming a remote task
|
||||
-- or waiting for itself to be suspended/resumed.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_SUPPORT (
|
||||
NODE : in RTEMS.UNSIGNED32
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:05 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:16 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
169
c/src/ada-tests/mptests/mp04/mptest.adb
Normal file
169
c/src/ada-tests/mptests/mp04/mptest.adb
Normal file
@@ -0,0 +1,169 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 4 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:38:59 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 4 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
PREVIOUS_PRIORITY_1 : RTEMS.TASK_PRIORITY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
MPTEST.REMOTE_NODE := 2;
|
||||
else
|
||||
MPTEST.REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
MPTEST.REMOTE_TID,
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
if PREVIOUS_PRIORITY /= MPTEST.REMOTE_NODE then
|
||||
|
||||
TEXT_IO.PUT( "Remote priority (0x" );
|
||||
UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY, BASE => 16 );
|
||||
TEXT_IO.PUT( "does not match remote node (0x" );
|
||||
UNSIGNED32_IO.PUT( MPTEST.REMOTE_NODE, BASE => 16 );
|
||||
TEXT_IO.PUT_LINE( ")!!!" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 16#F00000# );
|
||||
|
||||
end if;
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
RTEMS.SELF,
|
||||
RTEMS.CURRENT_PRIORITY,
|
||||
PREVIOUS_PRIORITY_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
exit when PREVIOUS_PRIORITY_1 = MPTEST.REMOTE_NODE;
|
||||
|
||||
end loop;
|
||||
|
||||
|
||||
TEXT_IO.PUT_LINE( "Local task priority has been set" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
179
c/src/ada-tests/mptests/mp04/mptest.ads
Normal file
179
c/src/ada-tests/mptests/mp04/mptest.ads
Normal file
@@ -0,0 +1,179 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 4 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:38:59 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:20 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:31 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
252
c/src/ada-tests/mptests/mp05/mptest.adb
Normal file
252
c/src/ada-tests/mptests/mp05/mptest.adb
Normal file
@@ -0,0 +1,252 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 5 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:06 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 5 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.TIMER_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
SIGNAL : in RTEMS.SIGNAL_SET
|
||||
)
|
||||
is
|
||||
begin
|
||||
|
||||
if SIGNAL /= MPTEST.EXPECTED_SIGNAL then
|
||||
|
||||
TEXT_IO.PUT( "ERROR: I was expecting signal 0x" );
|
||||
UNSIGNED32_IO.PUT( EXPECTED_SIGNAL, BASE => 16 );
|
||||
TEXT_IO.PUT( " got 0x" );
|
||||
UNSIGNED32_IO.PUT( SIGNAL, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.FATAL_ERROR_OCCURRED( 16#000F_0000# );
|
||||
|
||||
end if;
|
||||
|
||||
MPTEST.SIGNAL_CAUGHT := TRUE;
|
||||
|
||||
end PROCESS_ASR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := TRUE;
|
||||
|
||||
end STOP_TEST_TSR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := FALSE;
|
||||
|
||||
MPTEST.SIGNAL_CAUGHT := FALSE;
|
||||
MPTEST.SIGNAL_COUNT := 0;
|
||||
|
||||
TEXT_IO.PUT_LINE( "signal_catch: initializing signal catcher" );
|
||||
RTEMS.SIGNAL_CATCH(
|
||||
MPTEST.PROCESS_ASR'ACCESS,
|
||||
RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
MPTEST.REMOTE_NODE := 2;
|
||||
MPTEST.REMOTE_SIGNAL := RTEMS.SIGNAL_18;
|
||||
MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_17;
|
||||
else
|
||||
MPTEST.REMOTE_NODE := 1;
|
||||
MPTEST.REMOTE_SIGNAL := RTEMS.SIGNAL_17;
|
||||
MPTEST.EXPECTED_SIGNAL := RTEMS.SIGNAL_18;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
3 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.STOP_TEST_TSR'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Sending signal to remote task" );
|
||||
loop
|
||||
RTEMS.SIGNAL_SEND(
|
||||
MPTEST.REMOTE_TID,
|
||||
MPTEST.REMOTE_SIGNAL,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
exit when not RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.NOT_DEFINED );
|
||||
|
||||
end loop;
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
|
||||
|
||||
end if;
|
||||
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
if MPTEST.SIGNAL_CAUGHT = TRUE then
|
||||
|
||||
MPTEST.SIGNAL_CAUGHT := FALSE;
|
||||
MPTEST.SIGNAL_COUNT := MPTEST.SIGNAL_COUNT + 1;
|
||||
|
||||
if MPTEST.SIGNAL_COUNT >= MPTEST.SIGNALS_PER_DOT then
|
||||
|
||||
MPTEST.SIGNAL_COUNT := 0;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "." );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.SIGNAL_SEND(
|
||||
MPTEST.REMOTE_TID,
|
||||
MPTEST.REMOTE_SIGNAL,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
244
c/src/ada-tests/mptests/mp05/mptest.ads
Normal file
244
c/src/ada-tests/mptests/mp05/mptest.ads
Normal file
@@ -0,0 +1,244 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 5 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:07 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable is set when the test should stop executing.
|
||||
--
|
||||
STOP_TEST : RTEMS.BOOLEAN;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- This is the signal set which is sent to the task on the other node.
|
||||
--
|
||||
|
||||
REMOTE_SIGNAL : RTEMS.SIGNAL_SET;
|
||||
|
||||
--
|
||||
-- This is the signal set the task on this node expects to receive
|
||||
-- from the other node.
|
||||
--
|
||||
|
||||
EXPECTED_SIGNAL : RTEMS.SIGNAL_SET;
|
||||
|
||||
--
|
||||
-- These keep track of if a signal set has been caught and how many
|
||||
-- signal sets have been caught cumulative.
|
||||
--
|
||||
|
||||
SIGNAL_CAUGHT : RTEMS.BOOLEAN;
|
||||
SIGNAL_COUNT : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of signals to process per dot printed out.
|
||||
--
|
||||
|
||||
SIGNALS_PER_DOT : constant RTEMS.UNSIGNED32 := 15;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is an ASR for TEST_TASK.
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
SIGNAL : in RTEMS.SIGNAL_SET
|
||||
);
|
||||
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a TSR which sets the "stop test" flag.
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
2, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:35 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:45 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
257
c/src/ada-tests/mptests/mp06/mptest.adb
Normal file
257
c/src/ada-tests/mptests/mp06/mptest.adb
Normal file
@@ -0,0 +1,257 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 6 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:14 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 6 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
MPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.TIMER_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED1 : in RTEMS.ID;
|
||||
IGNORED2 : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := TRUE;
|
||||
|
||||
end STOP_TEST_TSR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
EVENT_OUT : RTEMS.EVENT_SET;
|
||||
EVENT_FOR_THIS_ITERATION : RTEMS.EVENT_SET;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := FALSE;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
MPTEST.REMOTE_NODE := 2;
|
||||
else
|
||||
MPTEST.REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
TEXT_IO.PUT_LINE( "Sending events to remote task" );
|
||||
else
|
||||
TEXT_IO.PUT_LINE( "Receiving events from remote task" );
|
||||
end if;
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
5 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.STOP_TEST_TSR'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
COUNT := 0;
|
||||
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
EVENT_FOR_THIS_ITERATION :=
|
||||
MPTEST.EVENT_SET_TABLE(
|
||||
INTEGER( COUNT ) mod MPTEST.EVENT_SET_TABLE'LAST + 1
|
||||
);
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
RTEMS.EVENT_SEND(
|
||||
MPTEST.REMOTE_TID,
|
||||
EVENT_FOR_THIS_ITERATION,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
else
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
EVENT_FOR_THIS_ITERATION,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
1 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
EVENT_OUT,
|
||||
STATUS
|
||||
);
|
||||
|
||||
if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
|
||||
TEXT_IO.NEW_LINE( 1 );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
TEXT_IO.PUT_LINE(
|
||||
"Correct behavior if the other node exitted."
|
||||
);
|
||||
else
|
||||
TEXT_IO.PUT_LINE(
|
||||
"ERROR... node 1 died"
|
||||
);
|
||||
end if;
|
||||
|
||||
exit;
|
||||
|
||||
else
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
|
||||
|
||||
end if;
|
||||
|
||||
end if;
|
||||
|
||||
if (COUNT mod MPTEST.MAXIMUM_DOTS) = 0 then
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "." );
|
||||
|
||||
end if;
|
||||
|
||||
COUNT := COUNT + 1;
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
1 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
EVENT_OUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
RTEMS.TIMEOUT,
|
||||
STATUS,
|
||||
"EVENT_RECEIVE"
|
||||
);
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEXT_IO.PUT_LINE( "event_receive - correctly returned TIMEOUT" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 6 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
251
c/src/ada-tests/mptests/mp06/mptest.ads
Normal file
251
c/src/ada-tests/mptests/mp06/mptest.ads
Normal file
@@ -0,0 +1,251 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 6 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:15 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable is set when the test should stop executing.
|
||||
--
|
||||
STOP_TEST : RTEMS.BOOLEAN;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of signals to process per dot printed out.
|
||||
--
|
||||
|
||||
MAXIMUM_DOTS : constant RTEMS.UNSIGNED32 := 25;
|
||||
|
||||
--
|
||||
-- The following is a table of the event sets which consist of
|
||||
-- a single event. This test cycles through all of these
|
||||
-- events.
|
||||
--
|
||||
|
||||
EVENT_SET_TABLE : constant array ( 0 .. 30 ) of RTEMS.EVENT_SET := (
|
||||
RTEMS.EVENT_0,
|
||||
RTEMS.EVENT_1,
|
||||
RTEMS.EVENT_2,
|
||||
RTEMS.EVENT_3,
|
||||
RTEMS.EVENT_4,
|
||||
RTEMS.EVENT_5,
|
||||
RTEMS.EVENT_6,
|
||||
RTEMS.EVENT_7,
|
||||
RTEMS.EVENT_8,
|
||||
RTEMS.EVENT_9,
|
||||
RTEMS.EVENT_10,
|
||||
RTEMS.EVENT_11,
|
||||
RTEMS.EVENT_12,
|
||||
RTEMS.EVENT_13,
|
||||
RTEMS.EVENT_14,
|
||||
RTEMS.EVENT_15,
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.EVENT_17,
|
||||
RTEMS.EVENT_18,
|
||||
RTEMS.EVENT_19,
|
||||
RTEMS.EVENT_20,
|
||||
RTEMS.EVENT_21,
|
||||
RTEMS.EVENT_22,
|
||||
RTEMS.EVENT_23,
|
||||
RTEMS.EVENT_24,
|
||||
RTEMS.EVENT_25,
|
||||
RTEMS.EVENT_26,
|
||||
RTEMS.EVENT_27,
|
||||
RTEMS.EVENT_28,
|
||||
RTEMS.EVENT_29,
|
||||
RTEMS.EVENT_30
|
||||
);
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a TSR which sets the "stop test" flag.
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED1 : in RTEMS.ID;
|
||||
IGNORED2 : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
2, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:33:49 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:00 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
210
c/src/ada-tests/mptests/mp07/mptest.adb
Normal file
210
c/src/ada-tests/mptests/mp07/mptest.adb
Normal file
@@ -0,0 +1,210 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 7 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:22 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 7 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.TIMER_NAME( 1 ),
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED1 : in RTEMS.ID;
|
||||
IGNORED2 : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := TRUE;
|
||||
|
||||
end STOP_TEST_TSR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
EVENT_OUT : RTEMS.EVENT_SET;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := FALSE;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
MPTEST.REMOTE_NODE := 2;
|
||||
else
|
||||
MPTEST.REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ), TRUE );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
loop
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.TASK_NAME( MPTEST.REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.SUCCESSFUL );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Sending first event to remote task" );
|
||||
RTEMS.EVENT_SEND(
|
||||
MPTEST.REMOTE_TID,
|
||||
RTEMS.EVENT_16,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
5 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.STOP_TEST_TSR'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
for COUNT in 1 .. MPTEST.PER_DOT
|
||||
loop
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
EVENT_OUT,
|
||||
STATUS
|
||||
);
|
||||
if RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ) then
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - TIMEOUT .. probably OK if the other node exits"
|
||||
);
|
||||
exit;
|
||||
else
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
|
||||
end if;
|
||||
|
||||
RTEMS.EVENT_SEND(
|
||||
MPTEST.REMOTE_TID,
|
||||
RTEMS.EVENT_16,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "." );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
211
c/src/ada-tests/mptests/mp07/mptest.ads
Normal file
211
c/src/ada-tests/mptests/mp07/mptest.ads
Normal file
@@ -0,0 +1,211 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 7 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:23 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable is set when the test should stop executing.
|
||||
--
|
||||
STOP_TEST : RTEMS.BOOLEAN;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of events to process per dot printed out.
|
||||
--
|
||||
|
||||
PER_DOT : constant RTEMS.UNSIGNED32 := 100;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a TSR which sets the "stop test" flag.
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED1 : in RTEMS.ID;
|
||||
IGNORED2 : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
2, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:05 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:15 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
207
c/src/ada-tests/mptests/mp08/mptest.adb
Normal file
207
c/src/ada-tests/mptests/mp08/mptest.adb
Normal file
@@ -0,0 +1,207 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 8 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:34 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 8 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore(Global)" );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
DOTS : RTEMS.UNSIGNED32;
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
|
||||
RTEMS.SEMAPHORE_DELETE(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"SEMAPHORE_DELETE"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"semaphore_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
|
||||
);
|
||||
|
||||
end if;
|
||||
|
||||
COUNT := 0;
|
||||
|
||||
loop
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "p" );
|
||||
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
|
||||
if not RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
|
||||
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.OBJECT_WAS_DELETED,
|
||||
"SEMAPHORE_OBTAIN"
|
||||
);
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Global semaphore deleted" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end if;
|
||||
|
||||
COUNT := COUNT + 1;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 and then
|
||||
COUNT >= 1000 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting global semaphore" );
|
||||
|
||||
RTEMS.SEMAPHORE_DELETE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "v" );
|
||||
|
||||
RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
193
c/src/ada-tests/mptests/mp08/mptest.ads
Normal file
193
c/src/ada-tests/mptests/mp08/mptest.ads
Normal file
@@ -0,0 +1,193 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 8 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:38 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphores created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of events to process per dot printed out.
|
||||
--
|
||||
|
||||
PER_DOT : constant RTEMS.UNSIGNED32 := 100;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
1, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:19 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:30 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
381
c/src/ada-tests/mptests/mp09/mptest.adb
Normal file
381
c/src/ada-tests/mptests/mp09/mptest.adb
Normal file
@@ -0,0 +1,381 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 9 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:46 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 9 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.RECEIVE_BUFFER :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.RECEIVE_BUFFER_AREA'ADDRESS );
|
||||
|
||||
MPTEST.BUFFER_1 :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_1'ADDRESS );
|
||||
|
||||
MPTEST.BUFFER_2 :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_2'ADDRESS );
|
||||
|
||||
MPTEST.BUFFER_3 :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_3'ADDRESS );
|
||||
|
||||
MPTEST.BUFFER_4 :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREA_4'ADDRESS );
|
||||
|
||||
MPTEST.FILL_BUFFER( "123456789012345 ", MPTEST.BUFFER_AREA_1 );
|
||||
MPTEST.FILL_BUFFER( "abcdefghijklmno ", MPTEST.BUFFER_AREA_2 );
|
||||
MPTEST.FILL_BUFFER( "ABCDEFGHIJKLMNO ", MPTEST.BUFFER_AREA_3 );
|
||||
MPTEST.FILL_BUFFER( "PQRSTUVWXYZ(){} ", MPTEST.BUFFER_AREA_4 );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
3,
|
||||
RTEMS.GLOBAL + RTEMS.LIMIT,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( MPTEST.MULTIPROCESSING_CONFIGURATION.NODE ),
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- SEND_MESSAGES
|
||||
--
|
||||
|
||||
procedure SEND_MESSAGES is
|
||||
BROADCAST_COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "message_queue_send : " );
|
||||
MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFER_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Delaying for a second" );
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
1 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT( "message_queue_urgent : " );
|
||||
MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_URGENT(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFER_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Delaying for a second" );
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
1 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT( "message_queue_broadcast : " );
|
||||
MPTEST.PUT_BUFFER( MPTEST.BUFFER_AREA_3 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_BROADCAST(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFER_3,
|
||||
BROADCAST_COUNT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Delaying for a second" );
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
1 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end SEND_MESSAGES;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- RECEIVE_MESSAGES
|
||||
--
|
||||
|
||||
procedure RECEIVE_MESSAGES is
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
for INDEX in 1 .. 3
|
||||
loop
|
||||
|
||||
TEXT_IO.PUT_LINE( "Receiving message ..." );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.RECEIVE_BUFFER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
|
||||
TEXT_IO.PUT( "Received : " );
|
||||
MPTEST.PUT_BUFFER( MPTEST.RECEIVE_BUFFER_AREA );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Receiver delaying for a second" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end RECEIVE_MESSAGES;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- FILL_BUFFER
|
||||
--
|
||||
|
||||
--
|
||||
-- Depends on tricks to make the copy work.
|
||||
--
|
||||
|
||||
procedure FILL_BUFFER (
|
||||
SOURCE : in STRING;
|
||||
BUFFER : out RTEMS.BUFFER
|
||||
) is
|
||||
SOURCE_BUFFER : RTEMS.BUFFER_POINTER;
|
||||
begin
|
||||
|
||||
SOURCE_BUFFER := RTEMS.TO_BUFFER_POINTER(
|
||||
SOURCE( SOURCE'FIRST )'ADDRESS
|
||||
);
|
||||
|
||||
BUFFER.FIELD1 := SOURCE_BUFFER.FIELD1;
|
||||
BUFFER.FIELD2 := SOURCE_BUFFER.FIELD2;
|
||||
BUFFER.FIELD3 := SOURCE_BUFFER.FIELD3;
|
||||
BUFFER.FIELD4 := SOURCE_BUFFER.FIELD4;
|
||||
|
||||
end FILL_BUFFER;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_BUFFER
|
||||
--
|
||||
|
||||
--
|
||||
-- Depends on tricks to make the output work.
|
||||
--
|
||||
|
||||
procedure PUT_BUFFER (
|
||||
BUFFER : in RTEMS.BUFFER
|
||||
) is
|
||||
begin
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
|
||||
|
||||
end PUT_BUFFER;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting QID of message queue" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_IDENT(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_DELETE( MPTEST.QUEUE_ID( 1 ), STATUS );
|
||||
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"MESSAGE_QUEUE_DELETE"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"message_queue_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT"
|
||||
);
|
||||
|
||||
MPTEST.SEND_MESSAGES;
|
||||
|
||||
MPTEST.RECEIVE_MESSAGES;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Flushing remote empty queue" );
|
||||
RTEMS.MESSAGE_QUEUE_FLUSH( MPTEST.QUEUE_ID( 1 ), COUNT, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 1 );
|
||||
TEXT_IO.PUT_LINE(
|
||||
" messages were flushed from remote empty queue"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"Send messages to be flushed from remote queue"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFER_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Flushing remote queue" );
|
||||
RTEMS.MESSAGE_QUEUE_FLUSH( MPTEST.QUEUE_ID( 1 ), COUNT, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 1 );
|
||||
TEXT_IO.PUT_LINE(
|
||||
" messages were flushed from the remote queue"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "Waiting for message queue to be deleted" );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.RECEIVE_BUFFER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.OBJECT_WAS_DELETED,
|
||||
"MESSAGE_QUEUE_FLUSH"
|
||||
);
|
||||
|
||||
else
|
||||
|
||||
MPTEST.RECEIVE_MESSAGES;
|
||||
|
||||
MPTEST.SEND_MESSAGES;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
5 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_DELETE( MPTEST.QUEUE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 9 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
end MPTEST;
|
||||
255
c/src/ada-tests/mptests/mp09/mptest.ads
Normal file
255
c/src/ada-tests/mptests/mp09/mptest.ads
Normal file
@@ -0,0 +1,255 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 9 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:47 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message
|
||||
-- queues created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- The following are message buffers used to contain the test messages
|
||||
-- and pointers to those buffers.
|
||||
--
|
||||
|
||||
RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
|
||||
BUFFER_AREA_1 : RTEMS.BUFFER;
|
||||
BUFFER_AREA_2 : RTEMS.BUFFER;
|
||||
BUFFER_AREA_3 : RTEMS.BUFFER;
|
||||
BUFFER_AREA_4 : RTEMS.BUFFER;
|
||||
|
||||
RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
|
||||
BUFFER_1 : RTEMS.BUFFER_POINTER;
|
||||
BUFFER_2 : RTEMS.BUFFER_POINTER;
|
||||
BUFFER_3 : RTEMS.BUFFER_POINTER;
|
||||
BUFFER_4 : RTEMS.BUFFER_POINTER;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of events to process per dot printed out.
|
||||
--
|
||||
|
||||
PER_DOT : constant RTEMS.UNSIGNED32 := 100;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- SEND_MESSAGES
|
||||
--
|
||||
-- This subprogram prints and sends a sequence of three test messages.
|
||||
-- One of the messages is sent, one is urgent, and one is broadcast.
|
||||
-- A one second pause is between each the sending of each message.
|
||||
--
|
||||
|
||||
procedure SEND_MESSAGES;
|
||||
|
||||
--
|
||||
-- RECEIVE_MESSAGES
|
||||
--
|
||||
-- This subprogram receives and prints a sequence of three test messages.
|
||||
--
|
||||
|
||||
procedure RECEIVE_MESSAGES;
|
||||
|
||||
--
|
||||
-- FILL_BUFFER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram takes the SOURCE input string and places
|
||||
-- up to the first sixteen characters of that string into
|
||||
-- the message BUFFER.
|
||||
--
|
||||
|
||||
procedure FILL_BUFFER (
|
||||
SOURCE : in STRING;
|
||||
BUFFER : out RTEMS.BUFFER
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_BUFFER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the specified message BUFFER.
|
||||
--
|
||||
|
||||
procedure PUT_BUFFER (
|
||||
BUFFER : in RTEMS.BUFFER
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
1, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:34 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:45 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
301
c/src/ada-tests/mptests/mp10/mptest.adb
Normal file
301
c/src/ada-tests/mptests/mp10/mptest.adb
Normal file
@@ -0,0 +1,301 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 10 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:39:54 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 10 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'A', '3', ' ' );
|
||||
|
||||
MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
3,
|
||||
RTEMS.GLOBAL + RTEMS.LIMIT,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
0,
|
||||
RTEMS.GLOBAL + RTEMS.PRIORITY,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 10 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
else
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
MPTEST.TEST_TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task 3 (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task 3 (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 3 ),
|
||||
MPTEST.TEST_TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Sleeping for 1 second ..." );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting Test_task 2" );
|
||||
RTEMS.TASK_DELETE( MPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting Test_task 1" );
|
||||
RTEMS.TASK_DELETE( MPTEST.TASK_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Restarting Test_task 3" );
|
||||
RTEMS.TASK_RESTART( MPTEST.TASK_ID( 3 ), 1, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF 3" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 10 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_1
|
||||
--
|
||||
|
||||
procedure TEST_TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
|
||||
RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RECEIVE_BUFFER :=
|
||||
RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting QID of message queue" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_IDENT(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Attempting to receive message ..." );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
RECEIVE_BUFFER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
|
||||
end TEST_TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_2
|
||||
--
|
||||
|
||||
procedure TEST_TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
end TEST_TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_3
|
||||
--
|
||||
|
||||
procedure TEST_TASK_3 (
|
||||
RESTART : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
if RESTART = 1 then
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
end TEST_TASK_3;
|
||||
|
||||
end MPTEST;
|
||||
225
c/src/ada-tests/mptests/mp10/mptest.ads
Normal file
225
c/src/ada-tests/mptests/mp10/mptest.ads
Normal file
@@ -0,0 +1,225 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 10 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:39:54 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message
|
||||
-- queues created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- The number of events to process per dot printed out.
|
||||
--
|
||||
|
||||
PER_DOT : constant RTEMS.UNSIGNED32 := 100;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of one of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of one of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of one of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_3 (
|
||||
RESTART : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
1, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:49 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:34:59 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
138
c/src/ada-tests/mptests/mp11/mptest.adb
Normal file
138
c/src/ada-tests/mptests/mp11/mptest.adb
Normal file
@@ -0,0 +1,138 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 11 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.2 1995/05/31 16:35:09 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 11 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
|
||||
|
||||
MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Attempting to create Test_task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TOO_MANY,
|
||||
"TASK_CREATE"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "task_create correctly returned TOO_MANY" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Attempting to create Message Queue (Global)" );
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
3,
|
||||
RTEMS.GLOBAL + RTEMS.LIMIT,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TOO_MANY,
|
||||
"MESSAGE_QUEUE_CREATE"
|
||||
);
|
||||
TEXT_IO.PUT_LINE(
|
||||
"message_queue_create correctly returned TOO_MANY"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TOO_MANY,
|
||||
"SEMAPHORE_CREATE"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "semaphore_create correctly returned TOO_MANY" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
|
||||
RTEMS.PARTITION_CREATE(
|
||||
MPTEST.PARTITION_NAME( 1 ),
|
||||
MPTEST.PARTITION_AREA( 0 )'ADDRESS,
|
||||
128,
|
||||
64,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TOO_MANY,
|
||||
"PARTITION_CREATE"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "partition_create correctly returned TOO_MANY" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 11 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end INIT;
|
||||
|
||||
end MPTEST;
|
||||
185
c/src/ada-tests/mptests/mp11/mptest.ads
Normal file
185
c/src/ada-tests/mptests/mp11/mptest.ads
Normal file
@@ -0,0 +1,185 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 11 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:40:02 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message
|
||||
-- queues created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS partition
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This is the area used for the partition.
|
||||
--
|
||||
|
||||
PARTITION_AREA :
|
||||
array ( RTEMS.UNSIGNED32 range 0 .. 1023 ) of RTEMS.UNSIGNED8;
|
||||
for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
0, -- maximum # global objects
|
||||
0 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
1, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
1, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:03 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:15 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
152
c/src/ada-tests/mptests/mp12/mptest.adb
Normal file
152
c/src/ada-tests/mptests/mp12/mptest.adb
Normal file
@@ -0,0 +1,152 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 12 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.2 1995/05/31 16:35:25 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
BUFFER_ADDRESS : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 12 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Got to the initialization task" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 2 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting ID of remote Partition (Global)" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.PARTITION_IDENT(
|
||||
MPTEST.PARTITION_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"Attempting to delete remote Partition (Global)"
|
||||
);
|
||||
|
||||
RTEMS.PARTITION_DELETE( MPTEST.PARTITION_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ILLEGAL_ON_REMOTE_OBJECT,
|
||||
"PARTITION_DELETE"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"partition_delete correctly returned ILLEGAL_ON_REMOTE_OBJECT!!"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "Obtaining a buffer from the global partition" );
|
||||
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
TEXT_IO.PUT( "Address returned was : " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( BUFFER_ADDRESS, RTEMS.NULL_ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
else
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
|
||||
RTEMS.PARTITION_CREATE(
|
||||
MPTEST.PARTITION_NAME( 1 ),
|
||||
MPTEST.PARTITION_AREA( 0 )'ADDRESS,
|
||||
128,
|
||||
64,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Sleeping for three seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 3 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting Partition (Global)" );
|
||||
RTEMS.PARTITION_DELETE( MPTEST.PARTITION_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end INIT;
|
||||
|
||||
end MPTEST;
|
||||
183
c/src/ada-tests/mptests/mp12/mptest.ads
Normal file
183
c/src/ada-tests/mptests/mp12/mptest.ads
Normal file
@@ -0,0 +1,183 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 12 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:40:11 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the area used for the partition.
|
||||
--
|
||||
|
||||
PARTITION_AREA :
|
||||
array ( RTEMS.UNSIGNED32 range 0 .. 1023 ) of RTEMS.UNSIGNED8;
|
||||
for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
1, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:19 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:30 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
328
c/src/ada-tests/mptests/mp13/mptest.adb
Normal file
328
c/src/ada-tests/mptests/mp13/mptest.adb
Normal file
@@ -0,0 +1,328 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 13 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:40:19 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 13 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
3,
|
||||
RTEMS.GLOBAL + RTEMS.LIMIT,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.GLOBAL + RTEMS.PRIORITY,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
|
||||
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 2 ),
|
||||
MPTEST.TEST_TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting initialization task" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_1
|
||||
--
|
||||
|
||||
procedure TEST_TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
|
||||
RECEIVE_BUFFER : RTEMS.BUFFER_POINTER;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RECEIVE_BUFFER :=
|
||||
RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting QID of message queue" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_IDENT(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Receiving message ..." );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
RECEIVE_BUFFER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "How did I get back from here???" );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Receiving message ..." );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
RECEIVE_BUFFER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
2 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TIMEOUT,
|
||||
"MESSAGE_QUEUE_RECEIVE"
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TIMEOUT,
|
||||
"MESSAGE_QUEUE_OBTAIN"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"message_queue_receive correctly returned TIMEOUT"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "Deleting self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end TEST_TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TEST_TASK_2
|
||||
--
|
||||
|
||||
procedure TEST_TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
|
||||
RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "How did I get back from here???" );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Releasing semaphore ..." );
|
||||
RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting semaphore ..." );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
2 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.TIMEOUT,
|
||||
"SEMAPHORE_OBTAIN"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "semaphore_obtain correctly returned TIMEOUT" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TEST_TASK_2;
|
||||
|
||||
end MPTEST;
|
||||
207
c/src/ada-tests/mptests/mp13/mptest.ads
Normal file
207
c/src/ada-tests/mptests/mp13/mptest.ads
Normal file
@@ -0,0 +1,207 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 13 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:40:20 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message
|
||||
-- queues created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphore
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable contains the ID of the remote task with which this
|
||||
-- test interacts.
|
||||
--
|
||||
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- This variable contains the node on which the remote task with which
|
||||
-- this test interacts resides.
|
||||
--
|
||||
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of one of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of one of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TEST_TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
1, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:34 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:45 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
764
c/src/ada-tests/mptests/mp14/mptest.adb
Normal file
764
c/src/ada-tests/mptests/mp14/mptest.adb
Normal file
@@ -0,0 +1,764 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 14 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:40:27 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with BSP;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- STOP_TEST_TSR
|
||||
--
|
||||
|
||||
procedure STOP_TEST_TSR (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
MPTEST.STOP_TEST := TRUE;
|
||||
|
||||
end STOP_TEST_TSR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- EXIT_TEST
|
||||
--
|
||||
|
||||
procedure EXIT_TEST is
|
||||
OLD_MODE : RTEMS.MODE;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_MODE( RTEMS.NO_PREEMPT, RTEMS.PREEMPT_MASK, OLD_MODE, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
BSP_MPCI.PRINT_STATISTICS;
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end EXIT_TEST;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** TEST 14 -- NODE " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE,
|
||||
WIDTH => 1
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " ***" );
|
||||
|
||||
MPTEST.STOP_TIMER_NAME := RTEMS.BUILD_NAME( 'S', 'T', 'O', 'P' );
|
||||
|
||||
MPTEST.STOP_TEST := FALSE;
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.STOP_TIMER_NAME,
|
||||
MPTEST.STOP_TIMER_ID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.STOP_TIMER_ID,
|
||||
BSP.MAXIMUM_LONG_TEST_DURATION * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
MPTEST.STOP_TEST_TSR'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
MPTEST.EVENT_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( '1', '1', '1', ' ' );
|
||||
MPTEST.EVENT_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( '2', '2', '2', ' ' );
|
||||
|
||||
MPTEST.QUEUE_TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'T', '1', ' ' );
|
||||
MPTEST.QUEUE_TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'T', '2', ' ' );
|
||||
|
||||
MPTEST.PARTITION_TASK_NAME( 1 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
|
||||
MPTEST.PARTITION_TASK_NAME( 2 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'T', '2', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_TASK_NAME( 1 ) :=
|
||||
RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
|
||||
MPTEST.SEMAPHORE_TASK_NAME( 2 ) :=
|
||||
RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
|
||||
|
||||
MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'E', 'M', ' ' );
|
||||
|
||||
MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'S', 'G', ' ' );
|
||||
|
||||
MPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'A', 'R', ' ' );
|
||||
|
||||
MPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', 'R', ' ' );
|
||||
|
||||
for INDEX in MPTEST.BUFFERS'FIRST .. MPTEST.BUFFERS'LAST
|
||||
loop
|
||||
|
||||
MPTEST.BUFFERS( INDEX ) :=
|
||||
RTEMS.TO_BUFFER_POINTER( MPTEST.BUFFER_AREAS( INDEX )'ADDRESS );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Partition (Global)" );
|
||||
RTEMS.PARTITION_CREATE(
|
||||
MPTEST.PARTITION_NAME( 1 ),
|
||||
MPTEST.PARTITION_AREA( 0 )'ADDRESS,
|
||||
16#8000#,
|
||||
16#3000#,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Event task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.EVENT_TASK_NAME(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
|
||||
),
|
||||
2,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.EVENT_TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Event task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.EVENT_TASK_ID( 1 ),
|
||||
MPTEST.TEST_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Semaphore task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.SEMAPHORE_TASK_NAME(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
|
||||
),
|
||||
2,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.SEMAPHORE_TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Semaphore task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.SEMAPHORE_TASK_ID( 1 ),
|
||||
MPTEST.SEMAPHORE_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Message Queue task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.QUEUE_TASK_NAME(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
|
||||
),
|
||||
2,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.QUEUE_TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Message Queue task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.QUEUE_TASK_ID( 1 ),
|
||||
MPTEST.MESSAGE_QUEUE_TASK'ACCESS,
|
||||
1, -- index of buffer
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Creating Partition task (Global)" );
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.PARTITION_TASK_NAME(
|
||||
MPTEST.MULTIPROCESSING_CONFIGURATION.NODE
|
||||
),
|
||||
2,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.GLOBAL,
|
||||
MPTEST.PARTITION_TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Starting Partition task (Global)" );
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.PARTITION_TASK_ID( 1 ),
|
||||
MPTEST.PARTITION_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 2, PREVIOUS_PRIORITY, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
MPTEST.DELAYED_EVENTS_TASK( 1 );
|
||||
|
||||
end INIT;
|
||||
|
||||
--
|
||||
-- DELAYED_SEND_EVENT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a timer service routine which sends an
|
||||
-- event set to a waiting task.
|
||||
--
|
||||
|
||||
procedure DELAYED_SEND_EVENT (
|
||||
TIMER_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND(
|
||||
MPTEST.TASK_ID( RTEMS.GET_INDEX( TIMER_ID ) ),
|
||||
RTEMS.EVENT_16,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
end DELAYED_SEND_EVENT;
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
REMOTE_NODE : RTEMS.UNSIGNED32;
|
||||
REMOTE_TID : RTEMS.ID;
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
EVENT_OUT : RTEMS.EVENT_SET;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
REMOTE_NODE := 2;
|
||||
else
|
||||
REMOTE_NODE := 1;
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "About to go to sleep!" );
|
||||
RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
TEXT_IO.PUT_LINE( "Waking up!" );
|
||||
|
||||
TEXT_IO.PUT( "Remote task's name is : " );
|
||||
TEST_SUPPORT.PUT_NAME( MPTEST.EVENT_TASK_NAME( REMOTE_NODE ), TRUE );
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting TID of remote task" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
MPTEST.EVENT_TASK_NAME( REMOTE_NODE ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
REMOTE_TID,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "task_ident" );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
TEXT_IO.PUT_LINE( "Sending events to remote task" );
|
||||
|
||||
loop
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
|
||||
loop
|
||||
RTEMS.EVENT_SEND(
|
||||
REMOTE_TID,
|
||||
RTEMS.EVENT_16,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND" );
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "e" );
|
||||
|
||||
end loop;
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Receiving events from remote task" );
|
||||
|
||||
loop
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
for COUNT in 1 .. MPTEST.EVENT_TASK_DOT_COUNT
|
||||
loop
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENT_OUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "e" );
|
||||
|
||||
end loop;
|
||||
|
||||
MPTEST.EXIT_TEST;
|
||||
|
||||
end TEST_TASK;
|
||||
|
||||
--
|
||||
-- DELAYED_EVENTS_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure DELAYED_EVENTS_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
PREVIOUS_MODE : RTEMS.MODE;
|
||||
EVENTS_OUT : RTEMS.EVENT_SET;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.PREEMPT + RTEMS.TIMESLICE,
|
||||
RTEMS.PREEMPT_MASK + RTEMS.TIMESLICE_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
MPTEST.TIMER_NAME( 1 ),
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
RTEMS.SELF,
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.TASK_ID( RTEMS.GET_INDEX( MPTEST.TIMER_ID( 1 ) ) ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENTS" );
|
||||
|
||||
loop
|
||||
|
||||
for COUNT in 1 .. MPTEST.DELAYED_EVENT_DOT_COUNT
|
||||
loop
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
MPTEST.TIMER_ID( 1 ),
|
||||
1,
|
||||
MPTEST.DELAYED_SEND_EVENT'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTS_OUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "." );
|
||||
|
||||
end loop;
|
||||
|
||||
MPTEST.EXIT_TEST;
|
||||
|
||||
end DELAYED_EVENTS_TASK;
|
||||
|
||||
--
|
||||
-- MESSAGE_QUEUE_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure MESSAGE_QUEUE_TASK (
|
||||
INDEX : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
YIELD_COUNT : RTEMS.UNSIGNED32;
|
||||
OVERFLOW_COUNT : RTEMS.UNSIGNED32_POINTER;
|
||||
BUFFER_COUNT : RTEMS.UNSIGNED32_POINTER;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
MPTEST.BUFFERS( INDEX ).FIELD1 := 0;
|
||||
MPTEST.BUFFERS( INDEX ).FIELD2 := 0;
|
||||
MPTEST.BUFFERS( INDEX ).FIELD3 := 0;
|
||||
MPTEST.BUFFERS( INDEX ).FIELD4 := 0;
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting ID of message queue" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_IDENT(
|
||||
MPTEST.QUEUE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "message_queue_ident FAILED!!" );
|
||||
|
||||
end loop;
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFERS( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
|
||||
MPTEST.BUFFERS( INDEX ).FIELD1'ADDRESS
|
||||
);
|
||||
|
||||
BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
|
||||
MPTEST.BUFFERS( INDEX ).FIELD2'ADDRESS
|
||||
);
|
||||
|
||||
else
|
||||
|
||||
OVERFLOW_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
|
||||
MPTEST.BUFFERS( INDEX ).FIELD3'ADDRESS
|
||||
);
|
||||
|
||||
BUFFER_COUNT := RTEMS.TO_UNSIGNED32_POINTER(
|
||||
MPTEST.BUFFERS( INDEX ).FIELD4'ADDRESS
|
||||
);
|
||||
|
||||
end if;
|
||||
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
YIELD_COUNT := 100;
|
||||
|
||||
for COUNT in 1 .. MPTEST.MESSAGE_DOT_COUNT
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFERS( INDEX ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"MESSAGE_QUEUE_RECEIVE"
|
||||
);
|
||||
|
||||
if BUFFER_COUNT.ALL = RTEMS.UNSIGNED32'LAST then
|
||||
BUFFER_COUNT.ALL := 0;
|
||||
OVERFLOW_COUNT.ALL := OVERFLOW_COUNT.ALL + 1;
|
||||
else
|
||||
BUFFER_COUNT.ALL := BUFFER_COUNT.ALL + 1;
|
||||
end if;
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
MPTEST.QUEUE_ID( 1 ),
|
||||
MPTEST.BUFFERS( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
if MPTEST.STOP_TEST = FALSE then
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
YIELD_COUNT := YIELD_COUNT - 1;
|
||||
|
||||
if YIELD_COUNT = 0 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
|
||||
|
||||
YIELD_COUNT := 100;
|
||||
|
||||
end if;
|
||||
|
||||
end if;
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "m" );
|
||||
|
||||
end loop;
|
||||
|
||||
MPTEST.EXIT_TEST;
|
||||
|
||||
end MESSAGE_QUEUE_TASK;
|
||||
|
||||
--
|
||||
-- PARTITION_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure PARTITION_TASK (
|
||||
IGNORED : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
BUFFER : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting ID of partition" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.PARTITION_IDENT(
|
||||
MPTEST.PARTITION_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "partition_ident FAILED!!" );
|
||||
|
||||
end loop;
|
||||
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
for COUNT in 1 .. MPTEST.PARTITION_DOT_COUNT
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
MPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"PARTITION_RETURN_BUFFER"
|
||||
);
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "p" );
|
||||
|
||||
end loop;
|
||||
|
||||
MPTEST.EXIT_TEST;
|
||||
|
||||
end PARTITION_TASK;
|
||||
|
||||
--
|
||||
-- SEMAPHORE_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure SEMAPHORE_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
YIELD_COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "Getting ID of semaphore" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
MPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
|
||||
|
||||
TEXT_IO.PUT_LINE( "semaphore_ident FAILED!!" );
|
||||
|
||||
end loop;
|
||||
|
||||
loop
|
||||
|
||||
YIELD_COUNT := 100;
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
for COUNT in 1 .. MPTEST.SEMAPHORE_DOT_COUNT
|
||||
loop
|
||||
|
||||
exit when MPTEST.STOP_TEST = TRUE;
|
||||
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
MPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
|
||||
|
||||
RTEMS.SEMAPHORE_RELEASE( MPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
|
||||
|
||||
if MPTEST.MULTIPROCESSING_CONFIGURATION.NODE = 1 then
|
||||
|
||||
YIELD_COUNT := YIELD_COUNT - 1;
|
||||
|
||||
if YIELD_COUNT = 0 then
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "YIELD" );
|
||||
|
||||
YIELD_COUNT := 100;
|
||||
|
||||
end if;
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
TEST_SUPPORT.PUT_DOT( "s" );
|
||||
|
||||
end loop;
|
||||
|
||||
MPTEST.EXIT_TEST;
|
||||
|
||||
end SEMAPHORE_TASK;
|
||||
|
||||
end MPTEST;
|
||||
348
c/src/ada-tests/mptests/mp14/mptest.ads
Normal file
348
c/src/ada-tests/mptests/mp14/mptest.ads
Normal file
@@ -0,0 +1,348 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 14 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:40:28 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test for passing event sets.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test for passing event sets.
|
||||
--
|
||||
|
||||
EVENT_TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
EVENT_TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test for manipulating semaphores.
|
||||
--
|
||||
|
||||
SEMAPHORE_TASK_ID :
|
||||
array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
SEMAPHORE_TASK_NAME :
|
||||
array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test for passing messages.
|
||||
--
|
||||
|
||||
QUEUE_TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
QUEUE_TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test for manipulating the global partitions.
|
||||
--
|
||||
|
||||
PARTITION_TASK_ID :
|
||||
array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
PARTITION_TASK_NAME :
|
||||
array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS partitions
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphores
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message_queues
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- The following are message buffers used to contain the test messages
|
||||
-- and pointers to those buffers.
|
||||
--
|
||||
|
||||
BUFFER_AREAS : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.BUFFER;
|
||||
BUFFERS :
|
||||
array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.BUFFER_POINTER;
|
||||
|
||||
--
|
||||
-- This is the area used for the partition.
|
||||
--
|
||||
|
||||
PARTITION_AREA :
|
||||
array ( RTEMS.UNSIGNED32 range 0 .. 16#7FFF# ) of RTEMS.UNSIGNED8;
|
||||
for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
--
|
||||
-- The following constants control the flow of "dot" indicators
|
||||
-- from the various test componenents.
|
||||
--
|
||||
|
||||
EVENT_TASK_DOT_COUNT : constant RTEMS.UNSIGNED32 := 100;
|
||||
EVENT_SEND_DOT_COUNT : constant RTEMS.UNSIGNED32 := 100;
|
||||
DELAYED_EVENT_DOT_COUNT : constant RTEMS.UNSIGNED32 := 1000;
|
||||
MESSAGE_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
|
||||
PARTITION_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
|
||||
SEMAPHORE_DOT_COUNT : constant RTEMS.UNSIGNED32 := 200;
|
||||
|
||||
--
|
||||
-- These contain the IDs and NAMEs of the RTEMS timers used
|
||||
-- by this test to stop.
|
||||
--
|
||||
|
||||
STOP_TIMER_ID : RTEMS.ID;
|
||||
STOP_TIMER_NAME : RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable is set when the test should stop executing.
|
||||
--
|
||||
|
||||
STOP_TEST : RTEMS.BOOLEAN;
|
||||
|
||||
--
|
||||
-- EXIT_TEST
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is invoked to stop this test.
|
||||
--
|
||||
|
||||
procedure EXIT_TEST;
|
||||
|
||||
--
|
||||
-- DELAYED_SEND_EVENT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is a timer service routine which sends an
|
||||
-- event set to a waiting task.
|
||||
--
|
||||
|
||||
procedure DELAYED_SEND_EVENT (
|
||||
TIMER_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TEST_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure TEST_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- DELAYED_EVENTS_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure DELAYED_EVENTS_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- MESSAGE_QUEUE_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure MESSAGE_QUEUE_TASK (
|
||||
INDEX : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PARTITION_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure PARTITION_TASK (
|
||||
IGNORED : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- SEMAPHORE_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is one of the test tasks.
|
||||
--
|
||||
|
||||
procedure SEMAPHORE_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.TIMESLICE, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
32, -- maximum # global objects
|
||||
32 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
12, -- maximum # timers
|
||||
1, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
1, -- maximum # messages
|
||||
1, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
1 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:35:50 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:00 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
108
c/src/ada-tests/samples/base_mp/mptest.adb
Normal file
108
c/src/ada-tests/samples/base_mp/mptest.adb
Normal file
@@ -0,0 +1,108 @@
|
||||
--
|
||||
-- MPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation for Test 1 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.adb,v 1.3 1995/07/12 19:40:36 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body MPTEST is
|
||||
|
||||
package body PER_NODE_CONFIGURATION is separate;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
C : RTEMS.CHARACTER;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT( "*** SAMPLE MULTIPROCESSOR APPLICATION ***" );
|
||||
TEXT_IO.PUT( "Creating and starting an application task" );
|
||||
|
||||
|
||||
MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
MPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.INTERRUPT_LEVEL( 0 ),
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
MPTEST.TASK_ID( 1 ),
|
||||
MPTEST.APPLICATION_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- APPLICATION_TASK
|
||||
--
|
||||
|
||||
procedure APPLICATION_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
TID : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
TEXT_IO.PUT( "This task was invoked with node argument (" );
|
||||
UNSIGNED32_IO.PUT( ARGUMENT );
|
||||
TEXT_IO.PUT_LINE( ")" );
|
||||
|
||||
TEXT_IO.PUT( "This task has the id of 0x" );
|
||||
UNSIGNED32_IO.PUT( TID, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF SAMPLE MULTIPROCESSOR APPLICATION ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end APPLICATION_TASK;
|
||||
|
||||
end MPTEST;
|
||||
167
c/src/ada-tests/samples/base_mp/mptest.ads
Normal file
167
c/src/ada-tests/samples/base_mp/mptest.ads
Normal file
@@ -0,0 +1,167 @@
|
||||
--
|
||||
-- MPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 1 of the RTEMS
|
||||
-- Multiprocessor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest.ads,v 1.3 1995/07/12 19:40:37 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with BSP_MPCI;
|
||||
with RTEMS;
|
||||
|
||||
package MPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- APPLICATION_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This routine is as an example of an application task which
|
||||
-- prints a message including its RTEMS task id. This task
|
||||
-- then invokes exit to return to the monitor.
|
||||
--
|
||||
|
||||
procedure APPLICATION_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.GLOBAL, -- attributes
|
||||
MPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- BEGIN SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
|
||||
package PER_NODE_CONFIGURATION is
|
||||
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This function returns the node number for this node.
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32;
|
||||
|
||||
pragma INLINE ( LOCAL_NODE_NUMBER );
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
-- END SUBPACKAGE --
|
||||
----------------------------------------------------------------------------
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
--
|
||||
-- This is the Multiprocessor Configuration Table for this test.
|
||||
--
|
||||
|
||||
MULTIPROCESSING_CONFIGURATION : aliased RTEMS.MULTIPROCESSING_TABLE := (
|
||||
MPTEST.PER_NODE_CONFIGURATION.LOCAL_NODE_NUMBER,
|
||||
2, -- maximum # nodes in system
|
||||
33, -- maximum # global objects
|
||||
33 -- maximum # proxies
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end MPTEST;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:05 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 1;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
@@ -0,0 +1,43 @@
|
||||
--
|
||||
-- MPTEST.PER_NODE_CONFIGURATION / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the subpackage
|
||||
-- which will define the per node configuration parameters.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- mptest-per_node_configuration.adb,v 1.2 1995/05/31 16:36:17 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
separate ( MPTEST )
|
||||
|
||||
package body PER_NODE_CONFIGURATION is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- LOCAL_NODE_NUMBER
|
||||
--
|
||||
|
||||
function LOCAL_NODE_NUMBER
|
||||
return RTEMS.UNSIGNED32 is
|
||||
begin
|
||||
|
||||
return 2;
|
||||
|
||||
end LOCAL_NODE_NUMBER;
|
||||
|
||||
end PER_NODE_CONFIGURATION;
|
||||
98
c/src/ada-tests/samples/base_sp/sptest.adb
Normal file
98
c/src/ada-tests/samples/base_sp/sptest.adb
Normal file
@@ -0,0 +1,98 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:40:50 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** SAMPLE SINGLE PROCESSOR APPLICATION ***" );
|
||||
TEXT_IO.PUT_LINE( "Creating and starting an application task" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.INTERRUPT_LEVEL( 0 ),
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.APPLICATION_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- APPLICATION_TASK
|
||||
--
|
||||
|
||||
procedure APPLICATION_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
|
||||
TEXT_IO.PUT( "Application task was invoked with argument (" );
|
||||
UNSIGNED32_IO.PUT( ARGUMENT );
|
||||
TEXT_IO.PUT( ") and has id of 0x" );
|
||||
UNSIGNED32_IO.PUT( TID, BASE => 16 );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF SAMPLE SINGLE PROCESSOR APPLICATION ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end APPLICATION_TASK;
|
||||
|
||||
end SPTEST;
|
||||
115
c/src/ada-tests/samples/base_sp/sptest.ads
Normal file
115
c/src/ada-tests/samples/base_sp/sptest.ads
Normal file
@@ -0,0 +1,115 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:40:51 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- APPLICATION_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS task which constitutes this test.
|
||||
--
|
||||
|
||||
procedure APPLICATION_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
52
c/src/ada-tests/samples/hello/sptest.adb
Normal file
52
c/src/ada-tests/samples/hello/sptest.adb
Normal file
@@ -0,0 +1,52 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.2 1995/05/31 16:36:34 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** HELLO WORLD TEST ***" );
|
||||
TEXT_IO.PUT_LINE( "Hello World" );
|
||||
TEXT_IO.PUT_LINE( "*** END OF HELLO WORLD TEST ***" );
|
||||
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end INIT;
|
||||
|
||||
end SPTEST;
|
||||
90
c/src/ada-tests/samples/hello/sptest.ads
Normal file
90
c/src/ada-tests/samples/hello/sptest.ads
Normal file
@@ -0,0 +1,90 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for the Hello World Test of the RTEMS
|
||||
-- Sample Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:40:54 joel Exp
|
||||
--
|
||||
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- No Device Drivers for this test.
|
||||
--
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
162
c/src/ada-tests/samples/ticker/sptest.adb
Normal file
162
c/src/ada-tests/samples/ticker/sptest.adb
Normal file
@@ -0,0 +1,162 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:40:57 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
|
||||
|
||||
TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
|
||||
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1_THROUGH_3
|
||||
--
|
||||
|
||||
procedure TASK_1_THROUGH_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
if TIME.SECOND >= 35 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF CLOCK TICK TEST ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
|
||||
FALSE
|
||||
);
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
|
||||
TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_1_THROUGH_3;
|
||||
|
||||
end SPTEST;
|
||||
115
c/src/ada-tests/samples/ticker/sptest.ads
Normal file
115
c/src/ada-tests/samples/ticker/sptest.ads
Normal file
@@ -0,0 +1,115 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:40:58 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1_THROUGH_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TASK_1_THROUGH_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
162
c/src/ada-tests/sptests/sp01/sptest.adb
Normal file
162
c/src/ada-tests/sptests/sp01/sptest.adb
Normal file
@@ -0,0 +1,162 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:04 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
|
||||
|
||||
TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
|
||||
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.INTERRUPT_LEVEL( 31 ),
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_1_THROUGH_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1_THROUGH_3
|
||||
--
|
||||
|
||||
procedure TASK_1_THROUGH_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID : RTEMS.ID;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
if TIME.SECOND >= 35 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
|
||||
FALSE
|
||||
);
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER(
|
||||
TEST_SUPPORT.TASK_NUMBER( TID ) * 5 *
|
||||
TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_1_THROUGH_3;
|
||||
|
||||
end SPTEST;
|
||||
115
c/src/ada-tests/sptests/sp01/sptest.ads
Normal file
115
c/src/ada-tests/sptests/sp01/sptest.ads
Normal file
@@ -0,0 +1,115 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 1 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:05 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1_THROUGH_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This is the body of the RTEMS tasks which constitute this test.
|
||||
--
|
||||
|
||||
procedure TASK_1_THROUGH_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
331
c/src/ada-tests/sptests/sp02/sptest.adb
Normal file
331
c/src/ada-tests/sptests/sp02/sptest.adb
Normal file
@@ -0,0 +1,331 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 2 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:09 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 2 ***" );
|
||||
|
||||
SPTEST.PREEMPT_TASK_NAME := RTEMS.BUILD_NAME( 'P', 'R', 'M', 'T' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.PREEMPT_TASK_NAME,
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.PREEMPT_TASK_ID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF PREEMPT" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.PREEMPT_TASK_ID,
|
||||
SPTEST.PREEMPT_TASK'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF PREEMPT" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "INIT - task_wake_after - yielding processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
3,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
3,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
3,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"INIT - suspending TA2 while middle task on a ready chain"
|
||||
);
|
||||
|
||||
RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
3,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
3,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PREEMPT_TASK
|
||||
--
|
||||
|
||||
procedure PREEMPT_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "PREEMPT - task_delete - deleting self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PREEMPT" );
|
||||
|
||||
end PREEMPT_TASK;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID2 : RTEMS.ID;
|
||||
TID3 : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
TID2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - task_ident - tid of TA2 (" );
|
||||
UNSIGNED32_IO.PUT( TID2, WIDTH => 8, BASE => 10#16# );
|
||||
TEXT_IO.PUT_LINE( ")" );
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
TID3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - task_ident - tid of TA3 (" );
|
||||
UNSIGNED32_IO.PUT( TID3, WIDTH => 8, BASE => 10#16# );
|
||||
TEXT_IO.PUT_LINE( ")" );
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY( TID3, 2, PREVIOUS_PRIORITY, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - task_set_priority - set TA3's priority to 2"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
|
||||
RTEMS.TASK_SUSPEND( TID2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
|
||||
RTEMS.TASK_DELETE( TID2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep for 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 minute" );
|
||||
RTEMS.TASK_WAKE_AFTER( 60 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA2" );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
|
||||
|
||||
end TASK_3;
|
||||
|
||||
end SPTEST;
|
||||
154
c/src/ada-tests/sptests/sp02/sptest.ads
Normal file
154
c/src/ada-tests/sptests/sp02/sptest.ads
Normal file
@@ -0,0 +1,154 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 2 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:10 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
PREEMPT_TASK_ID : RTEMS.ID;
|
||||
PREEMPT_TASK_NAME : RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PREEMPT_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the basic preemption capability.
|
||||
--
|
||||
|
||||
procedure PREEMPT_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
173
c/src/ada-tests/sptests/sp03/sptest.adb
Normal file
173
c/src/ada-tests/sptests/sp03/sptest.adb
Normal file
@@ -0,0 +1,173 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 3 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:13 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 3 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
|
||||
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
||||
TEST_SUPPORT.PRINT_TIME( "sets clock: ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
||||
TEST_SUPPORT.PRINT_TIME( "going to sleep: ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TIME.SECOND := TIME.SECOND + 5;
|
||||
TIME.MINUTE := TIME.MINUTE + (TIME.SECOND / 60 );
|
||||
TIME.SECOND := TIME.SECOND mod 60;
|
||||
TIME.HOUR := TIME.HOUR + (TIME.MINUTE / 60 );
|
||||
TIME.MINUTE := TIME.MINUTE mod 60;
|
||||
TIME.HOUR := TIME.HOUR mod 24;
|
||||
|
||||
RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
|
||||
TEST_SUPPORT.PRINT_TIME( "awakened: ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
if TIME.SECOND >= 17 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 2 ), FALSE );
|
||||
TEST_SUPPORT.PRINT_TIME( " ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
end SPTEST;
|
||||
129
c/src/ada-tests/sptests/sp03/sptest.ads
Normal file
129
c/src/ada-tests/sptests/sp03/sptest.ads
Normal file
@@ -0,0 +1,129 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 3 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:14 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the TASK_WAKE_WHEN directive of
|
||||
-- the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the TASK_WAKE_AFTER directive of
|
||||
-- the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
311
c/src/ada-tests/sptests/sp04/sptest.adb
Normal file
311
c/src/ada-tests/sptests/sp04/sptest.adb
Normal file
@@ -0,0 +1,311 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 4 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:17 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 4 ***" );
|
||||
|
||||
TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
|
||||
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
|
||||
|
||||
SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME( 'E', 'X', 'T', ' ' );
|
||||
|
||||
RTEMS.EXTENSION_CREATE(
|
||||
SPTEST.EXTENSION_NAME( 1 ),
|
||||
SPTEST.EXTENSIONS'ACCESS,
|
||||
EXTENSION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
SPTEST.RUN_COUNT( 1 ) := 0;
|
||||
SPTEST.RUN_COUNT( 2 ) := 0;
|
||||
SPTEST.RUN_COUNT( 3 ) := 0;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
SECONDS : RTEMS.UNSIGNED32;
|
||||
OLD_SECONDS : RTEMS.UNSIGNED32;
|
||||
STARTED_DELAY : RTEMS.UNSIGNED32;
|
||||
PREVIOUS_MODE : RTEMS.MODE;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
START_TIME : RTEMS.INTERVAL;
|
||||
END_TIME : RTEMS.INTERVAL;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 2" );
|
||||
RTEMS.TASK_SUSPEND( TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 3" );
|
||||
RTEMS.TASK_SUSPEND( TASK_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - killing time" );
|
||||
|
||||
RTEMS.CLOCK_GET(
|
||||
RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
|
||||
START_TIME'ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
loop
|
||||
RTEMS.CLOCK_GET(
|
||||
RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
|
||||
END_TIME'ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
exit when END_TIME > (START_TIME + 2);
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 2" );
|
||||
RTEMS.TASK_RESUME( TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 3" );
|
||||
RTEMS.TASK_RESUME( TASK_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
|
||||
|
||||
loop
|
||||
|
||||
if SPTEST.RUN_COUNT( 1 ) = 3 then
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - task_mode - change mode to NO PREEMPT"
|
||||
);
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
OLD_SECONDS := TIME.SECOND;
|
||||
|
||||
SECONDS := 0;
|
||||
loop
|
||||
|
||||
exit when SECONDS >= 6;
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
if TIME.SECOND /= OLD_SECONDS then
|
||||
OLD_SECONDS := TIME.SECOND;
|
||||
SECONDS := SECONDS + 1;
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - task_mode - change mode to PREEMPT"
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
<<LOOP_LABEL>>
|
||||
goto LOOP_LABEL;
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
begin
|
||||
|
||||
<<LOOP_LABEL>>
|
||||
goto LOOP_LABEL;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
begin
|
||||
|
||||
<<LOOP_LABEL>>
|
||||
goto LOOP_LABEL;
|
||||
|
||||
end TASK_3;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_SWITCH
|
||||
--
|
||||
|
||||
procedure TASK_SWITCH (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
HEIR : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
INDEX := TEST_SUPPORT.TASK_NUMBER( HEIR.OBJECT.ID );
|
||||
|
||||
case INDEX is
|
||||
when 1 | 2 | 3 =>
|
||||
SPTEST.RUN_COUNT( INDEX ) := SPTEST.RUN_COUNT( INDEX ) + 1;
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INDEX ), FALSE );
|
||||
TEST_SUPPORT.PRINT_TIME( "- ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
if TIME.SECOND >= 16 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
when others =>
|
||||
NULL;
|
||||
end case;
|
||||
|
||||
end TASK_SWITCH;
|
||||
|
||||
end SPTEST;
|
||||
187
c/src/ada-tests/sptests/sp04/sptest.ads
Normal file
187
c/src/ada-tests/sptests/sp04/sptest.ads
Normal file
@@ -0,0 +1,187 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 4 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:18 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS extensions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
EXTENSION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This array contains the number of times each of the test tasks has
|
||||
-- been context switched TO.
|
||||
--
|
||||
|
||||
RUN_COUNT : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task is used as a background task to suspend, resume,
|
||||
-- and context switch to.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task is used as a background task to suspend, resume,
|
||||
-- and context switch to.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_SWITCH
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_SWITCH extension for this test.
|
||||
-- It is invoked at each context switch and counts the number
|
||||
-- of times each application task has been context switched to.
|
||||
--
|
||||
|
||||
procedure TASK_SWITCH (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
HEIR : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the User Extension Table for this test.
|
||||
--
|
||||
|
||||
EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE :=
|
||||
(
|
||||
NULL, -- Task create
|
||||
NULL, -- Task start
|
||||
NULL, -- Task restart
|
||||
NULL, -- Task delete
|
||||
SPTEST.TASK_SWITCH'ACCESS, -- Task switch
|
||||
NULL, -- Task begin
|
||||
NULL, -- Task exitted
|
||||
NULL -- Fatal error
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
1, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
229
c/src/ada-tests/sptests/sp05/sptest.adb
Normal file
229
c/src/ada-tests/sptests/sp05/sptest.adb
Normal file
@@ -0,0 +1,229 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 5 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:23 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 5 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TID2 : RTEMS.ID;
|
||||
TID3 : RTEMS.ID;
|
||||
PASS : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
TID2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
|
||||
|
||||
RTEMS.TASK_IDENT(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
1,
|
||||
TID3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
|
||||
|
||||
for PASS in 1 .. 3
|
||||
loop
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA3" );
|
||||
RTEMS.TASK_SUSPEND( TID3, STATUS );
|
||||
if PASS = 1 then
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.ALREADY_SUSPENDED,
|
||||
"TASK_SUSPEND OF TA3"
|
||||
);
|
||||
else
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA2" );
|
||||
RTEMS.TASK_RESUME( TID2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
|
||||
RTEMS.TASK_SUSPEND( TID2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA3" );
|
||||
RTEMS.TASK_RESUME( TID3, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend self" );
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
loop
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 second" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA2" );
|
||||
end loop;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - task_suspend - suspend self" );
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
|
||||
|
||||
loop
|
||||
TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 1 second" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA3" );
|
||||
end loop;
|
||||
|
||||
end TASK_3;
|
||||
|
||||
end SPTEST;
|
||||
139
c/src/ada-tests/sptests/sp05/sptest.ads
Normal file
139
c/src/ada-tests/sptests/sp05/sptest.ads
Normal file
@@ -0,0 +1,139 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 5 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:24 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Message Queue Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
222
c/src/ada-tests/sptests/sp06/sptest.adb
Normal file
222
c/src/ada-tests/sptests/sp06/sptest.adb
Normal file
@@ -0,0 +1,222 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 6 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:27 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 6 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
SPTEST.ARGUMENT := 0;
|
||||
SPTEST.RESTART_ARGUMENT := 1;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
10,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
SPTEST.ARGUMENT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
SPTEST.ARGUMENT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
5,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
PASS : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - is beginning to run" );
|
||||
|
||||
PASS := ARGUMENT + 1;
|
||||
|
||||
if PASS = 5 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 6 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
if PASS = 1 then
|
||||
TEXT_IO.PUT_LINE( "TA1 - restarting TA3" );
|
||||
RTEMS.TASK_RESTART(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.RESTART_ARGUMENT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting TA2" );
|
||||
RTEMS.TASK_RESTART(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.RESTART_ARGUMENT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA2" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting self" );
|
||||
RTEMS.TASK_RESTART( SPTEST.TASK_ID( 1 ), PASS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - is beginning to run" );
|
||||
|
||||
if ARGUMENT = SPTEST.ARGUMENT then
|
||||
RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
end if;
|
||||
|
||||
loop
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1/2 second" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end TASK_3;
|
||||
|
||||
end SPTEST;
|
||||
146
c/src/ada-tests/sptests/sp06/sptest.ads
Normal file
146
c/src/ada-tests/sptests/sp06/sptest.ads
Normal file
@@ -0,0 +1,146 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 6 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:28 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- The following are used as arguments to the various RTEMS tasks
|
||||
-- in this test to indicate when a restart should be performed.
|
||||
|
||||
ARGUMENT : RTEMS.UNSIGNED32;
|
||||
RESTART_ARGUMENT : RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
486
c/src/ada-tests/sptests/sp07/sptest.adb
Normal file
486
c/src/ada-tests/sptests/sp07/sptest.adb
Normal file
@@ -0,0 +1,486 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 7 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:32 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 7 ***" );
|
||||
|
||||
SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME( 'E', 'X', 'T', ' ' );
|
||||
|
||||
RTEMS.EXTENSION_CREATE(
|
||||
SPTEST.EXTENSION_NAME( 1 ),
|
||||
SPTEST.EXTENSIONS'ACCESS,
|
||||
EXTENSION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
250,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 4 ),
|
||||
254,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
SPTEST.TASK_4'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
|
||||
|
||||
RTEMS.TASK_RESTART( SPTEST.TASK_ID( 3 ), 0, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
|
||||
|
||||
RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 1 ), 8, 4, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA1" );
|
||||
TEXT_IO.PUT( "INIT - task_set_note - set TA1's NOTEPAD_8" );
|
||||
TEXT_IO.PUT_LINE( " to TA1's initial priority: 4" );
|
||||
|
||||
RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 2 ), 8, 4, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA2" );
|
||||
TEXT_IO.PUT( "INIT - task_set_note - set TA2's NOTEPAD_8" );
|
||||
TEXT_IO.PUT_LINE( " to TA2's initial priority: 4" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
THE_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
RTEMS.SELF,
|
||||
RTEMS.CURRENT_PRIORITY,
|
||||
THE_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
TEXT_IO.PUT( "TA1 - task_set_priority - ");
|
||||
TEXT_IO.PUT( "get initial priority of self: ");
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
|
||||
TEXT_IO.PUT( "TA1 - task_get_note - ");
|
||||
TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
THE_PRIORITY := THE_PRIORITY - 1;
|
||||
|
||||
if THE_PRIORITY = 0 then
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
|
||||
RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - task_set_priority - ");
|
||||
TEXT_IO.PUT_LINE( "set priority of TA2 ( blocked )");
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
5,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - task_set_note - set TA2's NOTEPAD_8: " );
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.TASK_SET_NOTE(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
8,
|
||||
THE_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
|
||||
|
||||
TEXT_IO.PUT("TA1 - task_set_priority - set TA2's priority: ");
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
THE_PRIORITY,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
THE_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
|
||||
TEXT_IO.PUT( "TA2 - task_get_note - ");
|
||||
TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
THE_PRIORITY := THE_PRIORITY - 1;
|
||||
|
||||
if THE_PRIORITY = 0 then
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend TA1" );
|
||||
RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
|
||||
|
||||
TEXT_IO.PUT( "TA2 - task_set_priority - ");
|
||||
TEXT_IO.PUT_LINE( "set priority of TA1 ( blocked )");
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
5,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
RTEMS.TASK_DELETE(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
); -- TA1 is blocked
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
|
||||
|
||||
RTEMS.TASK_DELETE(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
); -- TA3 is ready
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
else
|
||||
|
||||
TEXT_IO.PUT( "TA2 - task_set_note - set TA1's NOTEPAD_8: " );
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.TASK_SET_NOTE(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
8,
|
||||
THE_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
|
||||
|
||||
TEXT_IO.PUT( "TA2 - task_set_priority - ");
|
||||
TEXT_IO.PUT( "set TA1's priority: ");
|
||||
UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2);
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
THE_PRIORITY,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
end loop;
|
||||
|
||||
end TASK_3;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA4 - exitting task" );
|
||||
|
||||
end TASK_4;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_EXIT_EXTENSION
|
||||
--
|
||||
|
||||
procedure TASK_EXIT_EXTENSION (
|
||||
RUNNING_TASK : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
begin
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT_LINE( "TASK_EXITTED - user extension invoked correctly" );
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_EXIT_EXTENSION;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_CREATE_EXTENSION
|
||||
--
|
||||
|
||||
procedure TASK_CREATE_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
CREATED_TASK : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
begin
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT( "TASKS_CREATE - " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME(
|
||||
TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID )
|
||||
),
|
||||
FALSE
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "- created." );
|
||||
end if;
|
||||
|
||||
end TASK_CREATE_EXTENSION;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_DELETE_EXTENSION
|
||||
--
|
||||
|
||||
procedure TASK_DELETE_EXTENSION (
|
||||
RUNNING_TASK : in RTEMS.TCB_POINTER;
|
||||
DELETED_TASK : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
begin
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT( "TASKS_DELETE - " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME(
|
||||
TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID )
|
||||
),
|
||||
FALSE
|
||||
);
|
||||
end if;
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT( "deleting " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME(
|
||||
TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID )
|
||||
),
|
||||
TRUE
|
||||
);
|
||||
end if;
|
||||
|
||||
end TASK_DELETE_EXTENSION;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_RESTART_EXTENSION
|
||||
--
|
||||
|
||||
procedure TASK_RESTART_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
RESTARTED_TASK : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
begin
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT( "TASKS_RESTART - " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME(
|
||||
TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID )
|
||||
),
|
||||
FALSE
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " - restarted." );
|
||||
end if;
|
||||
|
||||
end TASK_RESTART_EXTENSION;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_START_EXTENSION
|
||||
--
|
||||
|
||||
procedure TASK_START_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
STARTED_TASK : in RTEMS.TCB_POINTER
|
||||
) is
|
||||
begin
|
||||
|
||||
if TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID ) > 0 then
|
||||
TEXT_IO.PUT( "TASKS_START - " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME(
|
||||
TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID )
|
||||
),
|
||||
FALSE
|
||||
);
|
||||
TEXT_IO.PUT_LINE( " - started." );
|
||||
end if;
|
||||
|
||||
end TASK_START_EXTENSION;
|
||||
|
||||
end SPTEST;
|
||||
240
c/src/ada-tests/sptests/sp07/sptest.ads
Normal file
240
c/src/ada-tests/sptests/sp07/sptest.ads
Normal file
@@ -0,0 +1,240 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 7 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:33 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS extensions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
EXTENSION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests some of the capabilities of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Message Queue Manager.
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_CREATE_EXTENSION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_CREATE extension for this test.
|
||||
--
|
||||
|
||||
procedure TASK_CREATE_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
CREATED_TASK : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_DELETE_EXTENSION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_DELETE extension for this test.
|
||||
--
|
||||
|
||||
procedure TASK_DELETE_EXTENSION (
|
||||
RUNNING_TASK : in RTEMS.TCB_POINTER;
|
||||
DELETED_TASK : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_RESTART_EXTENSION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_RESTART extension for this test.
|
||||
--
|
||||
|
||||
procedure TASK_RESTART_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
RESTARTED_TASK : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_START_EXTENSION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_START extension for this test.
|
||||
--
|
||||
|
||||
procedure TASK_START_EXTENSION (
|
||||
UNUSED : in RTEMS.TCB_POINTER;
|
||||
STARTED_TASK : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_EXIT_EXTENSION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the TASK_EXIT extension for this test.
|
||||
-- It is invoked when a RTEMS task exits from its entry point.
|
||||
--
|
||||
|
||||
procedure TASK_EXIT_EXTENSION (
|
||||
RUNNING_TASK : in RTEMS.TCB_POINTER
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the User Extension Table for this test.
|
||||
--
|
||||
|
||||
EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE :=
|
||||
(
|
||||
SPTEST.TASK_CREATE_EXTENSION'ACCESS, -- Task create
|
||||
SPTEST.TASK_START_EXTENSION'ACCESS, -- Task start
|
||||
SPTEST.TASK_RESTART_EXTENSION'ACCESS, -- Task restart
|
||||
SPTEST.TASK_DELETE_EXTENSION'ACCESS, -- Task delete
|
||||
NULL, -- Task switch
|
||||
NULL, -- Task begin
|
||||
SPTEST.TASK_EXIT_EXTENSION'ACCESS, -- Task exitted
|
||||
NULL -- Fatal error
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
1, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
351
c/src/ada-tests/sptests/sp08/sptest.adb
Normal file
351
c/src/ada-tests/sptests/sp08/sptest.adb
Normal file
@@ -0,0 +1,351 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 8 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:36 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 8 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_MODE
|
||||
--
|
||||
|
||||
procedure PUT_MODE(
|
||||
COMMENT : in STRING;
|
||||
OUTPUT_MODE : in RTEMS.MODE
|
||||
) is
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( COMMENT );
|
||||
UNSIGNED32_IO.PUT( OUTPUT_MODE, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end PUT_MODE;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
PREVIOUS_MODE : RTEMS.MODE;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
-- BEGINNING OF ASR
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - ASR - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_ASR - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_ASR - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - ASR - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF ASR
|
||||
|
||||
-- BEGINNING OF TIMESLICE
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_TIMESLICE,
|
||||
RTEMS.TIMESLICE_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_TIMESLICE - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.TIMESLICE_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - TIMESLICE - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.TIMESLICE,
|
||||
RTEMS.TIMESLICE_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - TIMESLICE - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_TIMESLICE,
|
||||
RTEMS.TIMESLICE_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_TIMESLICE - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF TIMESLICE
|
||||
|
||||
-- BEGINNING OF PREEMPT
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - PREEMPT - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_PREEMPT - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - NO_PREEMPT - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - PREEMPT - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF PREEMPT
|
||||
|
||||
-- BEGINNING OF INTERRUPT LEVEL
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.INTERRUPT_LEVEL( 3 ),
|
||||
RTEMS.INTERRUPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - INTERRUPT_LEVEL( 3 ) - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.INTERRUPT_LEVEL( 5 ),
|
||||
RTEMS.INTERRUPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - INTERRUPT_LEVEL( 5 ) - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF INTERRUPT LEVEL
|
||||
|
||||
-- BEGINNING OF COMBINATIONS
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR +
|
||||
RTEMS.TIMESLICE + RTEMS.NO_PREEMPT,
|
||||
RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
|
||||
RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - set all modes - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR +
|
||||
RTEMS.TIMESLICE + RTEMS.NO_PREEMPT,
|
||||
RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
|
||||
RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - set all modes - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.INTERRUPT_LEVEL( 0 ) + RTEMS.ASR +
|
||||
RTEMS.NO_TIMESLICE + RTEMS.PREEMPT,
|
||||
RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK +
|
||||
RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - clear all modes - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF COMBINATIONS
|
||||
|
||||
-- BEGINNING OF CURRENT MODE
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.CURRENT_MODE,
|
||||
RTEMS.CURRENT_MODE,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
SPTEST.PUT_MODE(
|
||||
"TA1 - task_mode - get current mode - previous mode: ",
|
||||
PREVIOUS_MODE
|
||||
);
|
||||
|
||||
-- END OF CURRENT MODE
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end TASK_1;
|
||||
|
||||
end SPTEST;
|
||||
129
c/src/ada-tests/sptests/sp08/sptest.ads
Normal file
129
c/src/ada-tests/sptests/sp08/sptest.ads
Normal file
@@ -0,0 +1,129 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 8 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:37 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_MODE
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the COMMENT and the OUTPUT_MODE followed
|
||||
-- by a carriage return.
|
||||
--
|
||||
|
||||
procedure PUT_MODE(
|
||||
COMMENT : in STRING;
|
||||
OUTPUT_MODE : in RTEMS.MODE
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the TASK_MODE directive of the Task Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
3151
c/src/ada-tests/sptests/sp09/sptest.adb
Normal file
3151
c/src/ada-tests/sptests/sp09/sptest.adb
Normal file
File diff suppressed because it is too large
Load Diff
444
c/src/ada-tests/sptests/sp09/sptest.ads
Normal file
444
c/src/ada-tests/sptests/sp09/sptest.ads
Normal file
@@ -0,0 +1,444 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 9 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:42 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
with SYSTEM;
|
||||
with System.Storage_Elements;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS semaphores created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message queues
|
||||
-- created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS partitions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
|
||||
PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS regions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
|
||||
REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS ports created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
PORT_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
|
||||
PORT_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS periods created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
PERIOD_ID : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
|
||||
PERIOD_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This variable is used as the output ID on directives which return
|
||||
-- an ID but are invoked in a manner which returns a non-SUCCESSFUL
|
||||
-- status code.
|
||||
--
|
||||
|
||||
JUNK_ID : RTEMS.ID;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- internal address space of the port.
|
||||
--
|
||||
|
||||
INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
|
||||
System.Storage_Elements.To_Address(16#00001000#);
|
||||
|
||||
INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
|
||||
of RTEMS.UNSIGNED8;
|
||||
for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- external address space of the port.
|
||||
--
|
||||
|
||||
EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
|
||||
System.Storage_Elements.To_Address(16#00002000#);
|
||||
|
||||
EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
|
||||
of RTEMS.UNSIGNED8;
|
||||
for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- memory space for a partition.
|
||||
--
|
||||
|
||||
PARTITION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
|
||||
of RTEMS.UNSIGNED8;
|
||||
for PARTITION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- memory space for a partition which starts at an invalid address.
|
||||
--
|
||||
|
||||
PARTITION_BAD_AREA_ADDRESS : constant System.Address :=
|
||||
System.Storage_Elements.To_Address(16#00000006#);
|
||||
|
||||
PARTITION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
|
||||
of RTEMS.UNSIGNED8;
|
||||
for PARTITION_BAD_AREA use at PARTITION_BAD_AREA_ADDRESS;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- memory space for a region and constants used to define the regions
|
||||
-- starting area and length.
|
||||
--
|
||||
|
||||
REGION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 4095 )
|
||||
of RTEMS.UNSIGNED32;
|
||||
for REGION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
REGION_START_OFFSET : constant RTEMS.UNSIGNED32 := 1024;
|
||||
REGION_LENGTH : constant RTEMS.UNSIGNED32 := 512;
|
||||
|
||||
--
|
||||
-- The following area defines a memory area to be used as the
|
||||
-- memory space for a region which starts at an invalid address.
|
||||
--
|
||||
|
||||
REGION_BAD_AREA_ADDRESS : constant System.Address :=
|
||||
System.Storage_Elements.To_Address(16#00000006#);
|
||||
|
||||
REGION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
|
||||
of RTEMS.UNSIGNED8;
|
||||
for REGION_BAD_AREA use at REGION_BAD_AREA_ADDRESS;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- DELAYED_SUBPROGRAM
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled as a timer service routine.
|
||||
-- It performs no actions if it fires.
|
||||
--
|
||||
|
||||
procedure DELAYED_SUBPROGRAM (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests numerous error conditions.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests numerous error conditions.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests numerous error conditions.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests numerous error conditions.
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- SERVICE_ROUTINE
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram serves as a dummy ISR which is installed at an
|
||||
-- illegal vector number.
|
||||
--
|
||||
|
||||
procedure SERVICE_ROUTINE (
|
||||
IGNORED : in RTEMS.VECTOR_NUMBER
|
||||
);
|
||||
|
||||
--
|
||||
-- SCREEN_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_1;
|
||||
|
||||
--
|
||||
-- SCREEN_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_2;
|
||||
|
||||
--
|
||||
-- SCREEN_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_3;
|
||||
|
||||
--
|
||||
-- SCREEN_4
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_4;
|
||||
|
||||
--
|
||||
-- SCREEN_5
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_5;
|
||||
|
||||
--
|
||||
-- SCREEN_6
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_6;
|
||||
|
||||
--
|
||||
-- SCREEN_7
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_7;
|
||||
|
||||
--
|
||||
-- SCREEN_8
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_8;
|
||||
|
||||
--
|
||||
-- SCREEN_9
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_9;
|
||||
|
||||
--
|
||||
-- SCREEN_10
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_10;
|
||||
|
||||
--
|
||||
-- SCREEN_11
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_11;
|
||||
|
||||
--
|
||||
-- SCREEN_12
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_12;
|
||||
|
||||
--
|
||||
-- SCREEN_13
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram processes the a single output screen of this test.
|
||||
--
|
||||
|
||||
procedure SCREEN_13;
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
2, -- maximum # semaphores
|
||||
1, -- maximum # message queues
|
||||
2, -- maximum # messages
|
||||
1, -- maximum # partitions
|
||||
1, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
1, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
900
c/src/ada-tests/sptests/sp11/sptest.adb
Normal file
900
c/src/ada-tests/sptests/sp11/sptest.adb
Normal file
@@ -0,0 +1,900 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 11 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:45 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 11 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'M', '2', ' ' );
|
||||
SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'M', '3', ' ' );
|
||||
SPTEST.TIMER_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'M', '4', ' ' );
|
||||
SPTEST.TIMER_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'M', '5', ' ' );
|
||||
SPTEST.TIMER_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'M', '6', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 1 ),
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 2 ),
|
||||
SPTEST.TIMER_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM2" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 3 ),
|
||||
SPTEST.TIMER_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM3" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 4 ),
|
||||
SPTEST.TIMER_ID( 4 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM4" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 5 ),
|
||||
SPTEST.TIMER_ID( 5 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM5" );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 6 ),
|
||||
SPTEST.TIMER_ID( 6 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM6" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
EVENTOUT : RTEMS.EVENT_SET;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_16 to TA2" );
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_16, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 16" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - waiting forever on EVENT_14 and EVENT_15"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_14 + RTEMS.EVENT_15,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14 and 15" );
|
||||
TEXT_IO.PUT( "TA1 - EVENT_14 and EVENT_15 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_18 to TA2" );
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_18, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - waiting with 10 second timeout on EVENT_14"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_14,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14" );
|
||||
TEXT_IO.PUT( "TA1 - EVENT_14 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_19 to TA2" );
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_19, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 19" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_18 to self after 5 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
5 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - waiting forever on EVENT_18"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_18,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 18" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - EVENT_18 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_3 to self" );
|
||||
RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_3, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 3" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - EVENT_3 or EVENT_22 - NO_WAIT and EVENT_ANY"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_3 + RTEMS.EVENT_22,
|
||||
RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 3 and 22" );
|
||||
TEXT_IO.PUT( "TA1 - EVENT_3 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_4 to self" );
|
||||
RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_4, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 4" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - waiting forever on EVENT_4 or EVENT_5 - EVENT_ANY"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_4 + RTEMS.EVENT_5,
|
||||
RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 4 and 5" );
|
||||
TEXT_IO.PUT( "TA1 - EVENT_4 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_18 to self after 5 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
5 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - timer_cancel - cancelling timer for event EVENT_18"
|
||||
);
|
||||
RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_8 to self after 60 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
60 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_8_TO_SELF_60_SECONDS'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_9 to self after 60 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 2 ),
|
||||
60 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_9_TO_SELF_60_SECONDS'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_10 to self after 60 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 3 ),
|
||||
60 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - timer_cancel - cancelling timer for event EVENT_8"
|
||||
);
|
||||
RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
|
||||
|
||||
TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_1 every second"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SPTEST.TA1_SEND_1_TO_SELF_EVERY_SECOND'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 1 SECOND" );
|
||||
|
||||
INDEX := 0;
|
||||
|
||||
loop
|
||||
|
||||
exit when INDEX = 3;
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_1,
|
||||
RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 1" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - EVENT_1 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEST_SUPPORT.PRINT_TIME( " - at ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
if INDEX < 2 then
|
||||
RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 TIMER RESET" );
|
||||
end if;
|
||||
|
||||
INDEX := INDEX + 1;
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - timer_cancel - cancelling timer for event EVENT_1"
|
||||
);
|
||||
RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TIME.DAY := 13;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 1 day"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
|
||||
|
||||
TIME.HOUR := 7;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 1 day"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 2 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
|
||||
TIME.HOUR := 8;
|
||||
|
||||
TIME.DAY := 14;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 2 days"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 3 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - timer_cancel - cancelling EVENT_11 to self in 1 day"
|
||||
);
|
||||
RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - timer_cancel - cancelling EVENT_11 to self in 2 days"
|
||||
);
|
||||
RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - resending EVENT_11 to self in 2 days"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 3 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
|
||||
|
||||
TIME.DAY := 15;
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive - waiting forever on EVENT_11"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_11,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 11" );
|
||||
TEXT_IO.PUT( "TA1 - EVENT_11 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
-- The following code tests the case of deleting a timer ???
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - event_send/event_receive combination" );
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
10,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 10 ticks" );
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_11,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
11,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
|
||||
|
||||
TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
|
||||
|
||||
TIME.DAY := 13;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_receive all outstanding events"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.ALL_EVENTS,
|
||||
RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.UNSATISFIED,
|
||||
"EVENT_RECEIVE all events"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_10 to self in 1 day"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
|
||||
|
||||
TIME.DAY := 14;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 2 days"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 2 ),
|
||||
TIME,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
|
||||
|
||||
TIME := ( 1988, 2, 12, 7, 15, 0, 0 );
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEXT_IO.PUT_LINE( "TA1 - set time backwards" );
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.ALL_EVENTS,
|
||||
RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
if EVENTOUT >= RTEMS.EVENT_0 then
|
||||
TEXT_IO.PUT( "ERROR - " );
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.PUT_LINE( " events received" );
|
||||
else
|
||||
TEXT_IO.PUT_LINE( "TA1 - no events received" );
|
||||
end if;
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.UNSATISFIED,
|
||||
"EVENT_RECEIVE all events"
|
||||
);
|
||||
|
||||
TIME := ( 1988, 2, 14, 7, 15, 0, 0 );
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEXT_IO.PUT_LINE( "TA1 - set time forwards (leave a timer)" );
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
|
||||
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.ALL_EVENTS,
|
||||
RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE all events" );
|
||||
if EVENTOUT = RTEMS.EVENT_10 then
|
||||
TEXT_IO.PUT_LINE( "TA1 - EVENT_10 received" );
|
||||
else
|
||||
TEXT_IO.PUT( "ERROR - " );
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.PUT_LINE( " events received" );
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 100 ticks"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
100,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 100 ticks" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - event_send - send EVENT_11 to self in 200 ticks"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 2 ),
|
||||
100,
|
||||
SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 200 ticks" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 11 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
EVENTOUT : RTEMS.EVENT_SET;
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_receive - waiting forever on EVENT_16"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_16,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 16" );
|
||||
TEXT_IO.PUT( "TA2 - EVENT_16 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_send - send EVENT_14 and EVENT_15 to TA1"
|
||||
);
|
||||
RTEMS.EVENT_SEND(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
RTEMS.EVENT_14 + RTEMS.EVENT_15,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14 and 15" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_receive - waiting forever on EVENT_17 or EVENT_18 - EVENT_ANY"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_17 + RTEMS.EVENT_18,
|
||||
RTEMS.EVENT_ANY,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 17 and 18" );
|
||||
TEXT_IO.PUT( "TA2 - EVENT_17 or EVENT_18 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_send - send EVENT_14 to TA1"
|
||||
);
|
||||
RTEMS.EVENT_SEND(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
RTEMS.EVENT_14,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14" );
|
||||
|
||||
TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA2 - clock_set - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.CLOCK_SET( TIME, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA2 CLOCK_SET" );
|
||||
|
||||
TIME.SECOND := TIME.SECOND + 5;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_send - sending EVENT_10 to self after 5 seconds"
|
||||
);
|
||||
RTEMS.TIMER_FIRE_WHEN(
|
||||
SPTEST.TIMER_ID( 5 ),
|
||||
TIME,
|
||||
SPTEST.TA2_SEND_10_TO_SELF'ACCESS,
|
||||
RTEMS.NULL_ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 5 SECONDS" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_receive - waiting forever on EVENT_10"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_10,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
|
||||
|
||||
RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
|
||||
|
||||
TEXT_IO.PUT( "TA2 - EVENT_10 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - event_receive - PENDING_EVENTS" );
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.PENDING_EVENTS,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
|
||||
TEXT_IO.PUT( "TA2 - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - event_receive - EVENT_19 - NO_WAIT"
|
||||
);
|
||||
RTEMS.EVENT_RECEIVE(
|
||||
RTEMS.EVENT_19,
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
EVENTOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
|
||||
TEXT_IO.PUT( "TA2 - EVENT_19 received - eventout => ");
|
||||
UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_delete - deletes self" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE of TA2" );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_18_TO_SELF_5_SECONDS
|
||||
--
|
||||
|
||||
procedure TA1_SEND_18_TO_SELF_5_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_18, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
|
||||
|
||||
end TA1_SEND_18_TO_SELF_5_SECONDS;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_8_TO_SELF_60_SECONDS
|
||||
--
|
||||
|
||||
procedure TA1_SEND_8_TO_SELF_60_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_8, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 8" );
|
||||
|
||||
end TA1_SEND_8_TO_SELF_60_SECONDS;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_9_TO_SELF_60_SECONDS
|
||||
--
|
||||
|
||||
procedure TA1_SEND_9_TO_SELF_60_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_9, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 9" );
|
||||
|
||||
end TA1_SEND_9_TO_SELF_60_SECONDS;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_10_TO_SELF
|
||||
--
|
||||
|
||||
procedure TA1_SEND_10_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_10, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
|
||||
|
||||
end TA1_SEND_10_TO_SELF;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_1_TO_SELF_EVERY_SECOND
|
||||
--
|
||||
|
||||
procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_1, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 1" );
|
||||
|
||||
end TA1_SEND_1_TO_SELF_EVERY_SECOND;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA1_SEND_11_TO_SELF
|
||||
--
|
||||
|
||||
procedure TA1_SEND_11_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_11, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 11" );
|
||||
|
||||
end TA1_SEND_11_TO_SELF;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TA2_SEND_10_TO_SELF
|
||||
--
|
||||
|
||||
procedure TA2_SEND_10_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
)
|
||||
is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_10, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
|
||||
|
||||
end TA2_SEND_10_TO_SELF;
|
||||
|
||||
end SPTEST;
|
||||
233
c/src/ada-tests/sptests/sp11/sptest.ads
Normal file
233
c/src/ada-tests/sptests/sp11/sptest.ads
Normal file
@@ -0,0 +1,233 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 11 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:47 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- TA1_SEND_18_TO_SELF_5_SECONDS
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer after 5 seconds
|
||||
-- and to send EVENT_18 to TASK_1.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_18_TO_SELF_5_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA1_SEND_8_TO_SELF_60_SECONDS
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer after 60 seconds
|
||||
-- and to send EVENT_8 to TASK_1.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_8_TO_SELF_60_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA1_SEND_9_TO_SELF_5_SECONDS
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer after 60 seconds
|
||||
-- and to send EVENT_9 to TASK_1.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_9_TO_SELF_60_SECONDS (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA1_SEND_10_TO_SELF
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer after 60 seconds
|
||||
-- and to send EVENT_10 to TASK_1.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_10_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA1_SEND_1_TO_SELF_EVERY_SECOND
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer every second
|
||||
-- and to send EVENT_1 to TASK_1 until the timer is cancelled.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA1_SEND_11_TO_SELF
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer at a
|
||||
-- specific time of day and to send EVENT_11 to TASK_1.
|
||||
--
|
||||
|
||||
procedure TA1_SEND_11_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TA2_SEND_10_TO_SELF
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is scheduled to be fired by a timer after 5 seconds
|
||||
-- and to send EVENT_10 to TASK_2.
|
||||
--
|
||||
|
||||
procedure TA2_SEND_10_TO_SELF (
|
||||
IGNORED_ID : in RTEMS.ID;
|
||||
IGNORED_ADDRESS : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Event and Timer Managers.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Event and Timer Managers.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
6, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
806
c/src/ada-tests/sptests/sp12/sptest.adb
Normal file
806
c/src/ada-tests/sptests/sp12/sptest.adb
Normal file
@@ -0,0 +1,806 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 12 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:50 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 12 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
|
||||
SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
|
||||
|
||||
SPTEST.PRIORITY_TASK_NAME( 1 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'R', 'I', '1' );
|
||||
SPTEST.PRIORITY_TASK_NAME( 2 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'R', 'I', '2' );
|
||||
SPTEST.PRIORITY_TASK_NAME( 3 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'R', 'I', '3' );
|
||||
SPTEST.PRIORITY_TASK_NAME( 4 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'R', 'I', '4' );
|
||||
SPTEST.PRIORITY_TASK_NAME( 5 ) :=
|
||||
RTEMS.BUILD_NAME( 'P', 'R', 'I', '5' );
|
||||
|
||||
SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
|
||||
SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
|
||||
SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'M', '3', ' ' );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 1 ),
|
||||
1,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 2 ),
|
||||
0,
|
||||
RTEMS.PRIORITY,
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 3 ),
|
||||
1,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.SEMAPHORE_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "INIT - Forward priority queue test" );
|
||||
SPTEST.PRIORITY_TEST_DRIVER( 0 );
|
||||
|
||||
TEXT_IO.PUT_LINE( "INIT - Backward priority queue test" );
|
||||
SPTEST.PRIORITY_TEST_DRIVER( 32 );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"INIT - Binary Semaphore and Priority Inheritance Test"
|
||||
);
|
||||
|
||||
RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"INIT - semaphore_create - allocated binary semaphore"
|
||||
);
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 2 ),
|
||||
0,
|
||||
RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"INIT - semaphore_release - allocated binary semaphore"
|
||||
);
|
||||
RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"INIT - semaphore_delete - allocated binary semaphore"
|
||||
);
|
||||
RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 2 ),
|
||||
1,
|
||||
RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
|
||||
|
||||
SPTEST.PRIORITY_TEST_DRIVER( 64 );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
|
||||
|
||||
RTEMS.SEMAPHORE_CREATE(
|
||||
SPTEST.SEMAPHORE_NAME( 2 ),
|
||||
0,
|
||||
RTEMS.PRIORITY,
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
|
||||
|
||||
RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PRIORITY_TEST_DRIVER
|
||||
--
|
||||
|
||||
procedure PRIORITY_TEST_DRIVER (
|
||||
PRIORITY_BASE : in RTEMS.UNSIGNED32
|
||||
) is
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
case INDEX is
|
||||
when 1 | 2 | 3 =>
|
||||
SPTEST.TASK_PRIORITY( INDEX ) :=
|
||||
PRIORITY_BASE + RTEMS.TASK_PRIORITY( INDEX );
|
||||
when others =>
|
||||
SPTEST.TASK_PRIORITY( INDEX ) := PRIORITY_BASE + 3;
|
||||
end case;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.PRIORITY_TASK_NAME( INDEX ),
|
||||
SPTEST.TASK_PRIORITY( INDEX ),
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.PRIORITY_TASK_ID( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
|
||||
|
||||
end loop;
|
||||
|
||||
if PRIORITY_BASE = 0 then
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.PRIORITY_TASK_ID( INDEX ),
|
||||
SPTEST.PRIORITY_TASK'ACCESS,
|
||||
RTEMS.TASK_ARGUMENT( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
|
||||
|
||||
end loop;
|
||||
|
||||
else
|
||||
|
||||
for INDEX in reverse 1 .. 5
|
||||
loop
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.PRIORITY_TASK_ID( INDEX ),
|
||||
SPTEST.PRIORITY_TASK'ACCESS,
|
||||
RTEMS.TASK_ARGUMENT( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER LOOP" );
|
||||
|
||||
if PRIORITY_BASE = 64 then
|
||||
if INDEX = 4 then
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.PRIORITY_TASK_ID( 5 ),
|
||||
PRIORITY_BASE + 4,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEXT_IO.PUT( "PDRV - change priority of PRI5 from " );
|
||||
UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
|
||||
TEXT_IO.PUT( " to " );
|
||||
UNSIGNED32_IO.PUT( PRIORITY_BASE + 4 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"PDRV TASK_SET_PRIORITY"
|
||||
);
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.PRIORITY_TASK_ID( 5 ),
|
||||
RTEMS.CURRENT_PRIORITY,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEXT_IO.PUT( "PDRV - priority of PRI5 is " );
|
||||
UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"PDRV TASK_SET_PRIORITY"
|
||||
);
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER AFTER LOOP" );
|
||||
|
||||
if PRIORITY_BASE = 0 then
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SEMAPHORE_RELEASE LOOP"
|
||||
);
|
||||
|
||||
end loop;
|
||||
end if;
|
||||
|
||||
if PRIORITY_BASE = 64 then
|
||||
|
||||
TEXT_IO.PUT_LINE( "PDRV - task_resume - PRI5" );
|
||||
RTEMS.TASK_RESUME( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"TASK_WAKE_AFTER SO PRI5 can run"
|
||||
);
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PRI5" );
|
||||
else
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
RTEMS.TASK_DELETE(
|
||||
SPTEST.PRIORITY_TASK_ID( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
|
||||
|
||||
end loop;
|
||||
end if;
|
||||
|
||||
|
||||
end PRIORITY_TEST_DRIVER;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PRIORITY_TASK
|
||||
--
|
||||
|
||||
procedure PRIORITY_TASK (
|
||||
ITS_INDEX : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIMEOUT : RTEMS.INTERVAL;
|
||||
ITS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
CURRENT_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
ITS_PRIORITY := SPTEST.TASK_PRIORITY( INTEGER( ITS_INDEX ) );
|
||||
|
||||
if ITS_PRIORITY < 3 then
|
||||
TIMEOUT := 5 * TEST_SUPPORT.TICKS_PER_SECOND;
|
||||
else
|
||||
TIMEOUT := RTEMS.NO_TIMEOUT;
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( PRIORITY_TASK_NAME( INTEGER(ITS_INDEX) ), FALSE );
|
||||
TEXT_IO.PUT_LINE( " - semaphore_obtain - wait forever on SM2" );
|
||||
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN OF SM2" );
|
||||
|
||||
if ITS_PRIORITY < 64 then
|
||||
TEXT_IO.PUT( "PRI" );
|
||||
UNSIGNED32_IO.PUT( ITS_INDEX );
|
||||
TEXT_IO.PUT( " - WHY AM I HERE? (priority = " );
|
||||
UNSIGNED32_IO.PUT( ITS_PRIORITY );
|
||||
TEXT_IO.PUT_LINE( " )" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
if ITS_INDEX = 5 then
|
||||
TEXT_IO.PUT_LINE(
|
||||
"PRI5 - task_suspend - until all priority tasks blocked"
|
||||
);
|
||||
end if;
|
||||
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "PRI5 - task_delete - all tasks waiting on SM2" );
|
||||
for INDEX in 1 .. 4
|
||||
loop
|
||||
|
||||
RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( INDEX ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
|
||||
|
||||
end loop;
|
||||
|
||||
TEXT_IO.PUT_LINE( "PRI5 - semaphore_obtain - nested" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN NESTED" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - nested" );
|
||||
RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE NESTED" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - restore priority" );
|
||||
RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
|
||||
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
SPTEST.PRIORITY_TASK_ID( 5 ),
|
||||
RTEMS.CURRENT_PRIORITY,
|
||||
CURRENT_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEXT_IO.PUT( "PRI5 - priority of PRI5 is " );
|
||||
UNSIGNED32_IO.PUT( CURRENT_PRIORITY );
|
||||
TEXT_IO.NEW_LINE;
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"PRI5 TASK_SET_PRIORITY CURRENT"
|
||||
);
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
|
||||
end PRIORITY_TASK;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
SMID : RTEMS.ID;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.SEMAPHORE_IDENT(
|
||||
SPTEST.SEMAPHORE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
SMID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_IDENT OF SM1" );
|
||||
TEXT_IO.PUT( "TA1 - semaphore_ident - smid => " );
|
||||
UNSIGNED32_IO.PUT( SMID, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM2" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - got SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM3" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 3 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - got SM3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - get SM1 - NO_WAIT" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - got SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
|
||||
RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - semaphore_obtain - waiting for SM1 with 10 second timeout"
|
||||
);
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - got SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM2" );
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 4 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 5 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 5 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
SPTEST.TASK_4'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 5 ),
|
||||
SPTEST.TASK_5'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM1" );
|
||||
RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM3" );
|
||||
RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM3" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM1" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - got SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM1" );
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - task_set_priority - make self highest priority task"
|
||||
);
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
RTEMS.SELF,
|
||||
3,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY ON TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM2" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - got SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM2" );
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM2" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
|
||||
TEXT_IO.PUT_LINE( "TA3 - got SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - semaphore_release - release SM2" );
|
||||
RTEMS.SEMAPHORE_RELEASE(
|
||||
SPTEST.SEMAPHORE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM3" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 3 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
|
||||
|
||||
end TASK_3;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA4 - semaphore_obtain - wait forever on SM1" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
|
||||
|
||||
end TASK_4;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_5
|
||||
--
|
||||
|
||||
procedure TASK_5 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA5 - got SM1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
|
||||
RTEMS.SEMAPHORE_OBTAIN(
|
||||
SPTEST.SEMAPHORE_ID( 1 ),
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
|
||||
STATUS,
|
||||
RTEMS.OBJECT_WAS_DELETED,
|
||||
"SEMAPHORE_OBTAIN ON SM1"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "TA5 - SM1 deleted by TA1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_5;
|
||||
|
||||
end SPTEST;
|
||||
197
c/src/ada-tests/sptests/sp12/sptest.ads
Normal file
197
c/src/ada-tests/sptests/sp12/sptest.ads
Normal file
@@ -0,0 +1,197 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 12 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:51 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
|
||||
|
||||
PRIORITY_TASK_ID : array ( 1 .. 5 ) of RTEMS.ID;
|
||||
PRIORITY_TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
|
||||
TASK_PRIORITY : array ( 1 .. 5 ) of RTEMS.TASK_PRIORITY;
|
||||
|
||||
SEMAPHORE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PRIORITY_TEST_DRIVER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram creates and starts RTEMS tasks of different priority
|
||||
-- so that those tasks may exercise the priority blocking algorithm.
|
||||
--
|
||||
|
||||
procedure PRIORITY_TEST_DRIVER (
|
||||
PRIORITY_BASE : in RTEMS.UNSIGNED32
|
||||
);
|
||||
|
||||
--
|
||||
-- PRIORITY_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- Copies of this RTEMS are executed at different priorities and each
|
||||
-- instantiation blocks on a semaphore with priority blocking. This
|
||||
-- is done to exercise the priority blocking algorithms.
|
||||
--
|
||||
|
||||
procedure PRIORITY_TASK (
|
||||
ITS_INDEX : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Semaphore Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Semaphore Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Semaphore Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Semaphore Manager.
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_5
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Semaphore Manager.
|
||||
--
|
||||
|
||||
procedure TASK_5 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
10, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
673
c/src/ada-tests/sptests/sp13/sptest.adb
Normal file
673
c/src/ada-tests/sptests/sp13/sptest.adb
Normal file
@@ -0,0 +1,673 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 13 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:41:55 joel Exp
|
||||
--
|
||||
|
||||
with BSP;
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNCHECKED_CONVERSION;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 13 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'Q', '1', ' ', ' ' );
|
||||
SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME( 'Q', '2', ' ', ' ' );
|
||||
SPTEST.QUEUE_NAME( 3 ) := RTEMS.BUILD_NAME( 'Q', '3', ' ', ' ' );
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
SPTEST.QUEUE_NAME( 1 ),
|
||||
0,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q1" );
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
SPTEST.QUEUE_NAME( 2 ),
|
||||
10,
|
||||
RTEMS.PRIORITY + RTEMS.LIMIT,
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q2" );
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_CREATE(
|
||||
SPTEST.QUEUE_NAME( 3 ),
|
||||
0,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q3" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- FILL_BUFFER
|
||||
--
|
||||
|
||||
--
|
||||
-- Depends on tricks to make the copy work.
|
||||
--
|
||||
|
||||
procedure FILL_BUFFER (
|
||||
SOURCE : in STRING;
|
||||
BUFFER : out RTEMS.BUFFER
|
||||
) is
|
||||
SOURCE_BUFFER : RTEMS.BUFFER_POINTER;
|
||||
begin
|
||||
|
||||
SOURCE_BUFFER := RTEMS.TO_BUFFER_POINTER(
|
||||
SOURCE( SOURCE'FIRST )'ADDRESS
|
||||
);
|
||||
|
||||
BUFFER.FIELD1 := SOURCE_BUFFER.FIELD1;
|
||||
BUFFER.FIELD2 := SOURCE_BUFFER.FIELD2;
|
||||
BUFFER.FIELD3 := SOURCE_BUFFER.FIELD3;
|
||||
BUFFER.FIELD4 := SOURCE_BUFFER.FIELD4;
|
||||
|
||||
end FILL_BUFFER;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_BUFFER
|
||||
--
|
||||
|
||||
--
|
||||
-- Depends on tricks to make the output work.
|
||||
--
|
||||
|
||||
procedure PUT_BUFFER (
|
||||
BUFFER : in RTEMS.BUFFER
|
||||
) is
|
||||
begin
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
|
||||
TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
|
||||
|
||||
end PUT_BUFFER;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
QID : RTEMS.ID;
|
||||
BUFFER : RTEMS.BUFFER;
|
||||
BUFFER_POINTER : RTEMS.BUFFER_POINTER;
|
||||
TIMES : RTEMS.UNSIGNED32;
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_IDENT(
|
||||
SPTEST.QUEUE_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
QID,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_IDENT" );
|
||||
TEXT_IO.PUT( "TA1 - message_queue_ident - qid => " );
|
||||
UNSIGNED32_IO.PUT( QID, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 1 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 1" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 1 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 1" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 1" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 2 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 2" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - message_queue_receive - receive from queue 1 - "
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "10 second timeout" );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA1 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
|
||||
RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 4 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 4 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 5 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 5 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_URGENT(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
|
||||
|
||||
for TIMES in 1 .. 4
|
||||
loop
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - message_queue_receive - receive from queue 3 - "
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "WAIT FOREVER" );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA1 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
end loop;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
|
||||
RTEMS.MESSAGE_QUEUE_URGENT(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - message_queue_receive - receive from queue 2 - "
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "WAIT FOREVER" );
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA1 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
|
||||
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
|
||||
RTEMS.MESSAGE_QUEUE_URGENT(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 2" );
|
||||
RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
|
||||
TEXT_IO.PUT( "TA1 - " );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
|
||||
TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
|
||||
TEXT_IO.PUT( "TA1 - " );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
|
||||
TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - message_queue_send - until all message buffers consumed"
|
||||
);
|
||||
loop
|
||||
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
|
||||
exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
end loop;
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA1 - message_queue_send - all message buffers consumed"
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
|
||||
RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
|
||||
TEXT_IO.PUT( "TA1 - " );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
|
||||
TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
|
||||
|
||||
if COUNT /= BSP.CONFIGURATION.MAXIMUM_MESSAGES then
|
||||
TEXT_IO.PUT( "TA1 - ERROR - " );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
|
||||
TEXT_IO.PUT_LINE( " messages flushed" );
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
BUFFER : RTEMS.BUFFER;
|
||||
BUFFER_POINTER : RTEMS.BUFFER_POINTER;
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 1 - NO_WAIT"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - task_set_priority - make self highest priority task"
|
||||
);
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
RTEMS.SELF,
|
||||
3,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 2 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA2 - message_queue_send - BUFFER 2 TO Q 2" );
|
||||
RTEMS.MESSAGE_QUEUE_SEND(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 1 - 10 second timeout"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA2 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
BUFFER : RTEMS.BUFFER;
|
||||
BUFFER_POINTER : RTEMS.BUFFER_POINTER;
|
||||
COUNT : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA3 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 2 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA3 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
|
||||
TEXT_IO.PUT_LINE( "TA3 - message_queue_broadcast - BUFFER 3 TO Q 1" );
|
||||
RTEMS.MESSAGE_QUEUE_BROADCAST(
|
||||
SPTEST.QUEUE_ID( 1 ),
|
||||
BUFFER_POINTER,
|
||||
COUNT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
|
||||
TEXT_IO.PUT( "TA3 - number of tasks awakened = " );
|
||||
UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA3 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
|
||||
);
|
||||
RTEMS.MESSAGE_QUEUE_RECEIVE(
|
||||
SPTEST.QUEUE_ID( 3 ),
|
||||
BUFFER_POINTER,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
|
||||
TEXT_IO.PUT( "TA3 - buffer received: " );
|
||||
SPTEST.PUT_BUFFER( BUFFER );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end TASK_3;
|
||||
|
||||
end SPTEST;
|
||||
174
c/src/ada-tests/sptests/sp13/sptest.ads
Normal file
174
c/src/ada-tests/sptests/sp13/sptest.ads
Normal file
@@ -0,0 +1,174 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 13 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:41:57 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS message
|
||||
-- queues created by this test.
|
||||
--
|
||||
|
||||
QUEUE_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- FILL_BUFFER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram takes the SOURCE input string and places
|
||||
-- up to the first sixteen characters of that string into
|
||||
-- the message BUFFER.
|
||||
--
|
||||
|
||||
procedure FILL_BUFFER (
|
||||
SOURCE : in STRING;
|
||||
BUFFER : out RTEMS.BUFFER
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_BUFFER
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the specified message BUFFER.
|
||||
--
|
||||
|
||||
procedure PUT_BUFFER (
|
||||
BUFFER : in RTEMS.BUFFER
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Message Queue Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Message Queue Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Message Queue Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
10, -- maximum # message queues
|
||||
100, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
329
c/src/ada-tests/sptests/sp14/sptest.adb
Normal file
329
c/src/ada-tests/sptests/sp14/sptest.adb
Normal file
@@ -0,0 +1,329 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 14 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:42:00 joel Exp
|
||||
--
|
||||
|
||||
with ADDRESS_IO;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
with INTERFACES; use INTERFACES;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
TIME : RTEMS.TIME_OF_DAY;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 14 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
|
||||
|
||||
RTEMS.TIMER_CREATE(
|
||||
SPTEST.TIMER_NAME( 1 ),
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- SIGNAL_3_TO_TASK_1
|
||||
--
|
||||
|
||||
procedure SIGNAL_3_TO_TASK_1 (
|
||||
ID : in RTEMS.ID;
|
||||
POINTER : in RTEMS.ADDRESS
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_3, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND of 3" );
|
||||
|
||||
SPTEST.TIMER_GOT_THIS_ID := ID;
|
||||
SPTEST.TIMER_GOT_THIS_POINTER := POINTER;
|
||||
|
||||
SPTEST.SIGNAL_SENT := TRUE;
|
||||
|
||||
end SIGNAL_3_TO_TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
PREVIOUS_MODE : RTEMS.MODE;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_catch - INTERRUPT_LEVEL( 3 )" );
|
||||
RTEMS.SIGNAL_CATCH(
|
||||
SPTEST.PROCESS_ASR'ACCESS,
|
||||
RTEMS.INTERRUPT_LEVEL( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH INTERRUPT(3)" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_16 to self" );
|
||||
RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_SEND - SIGNAL_16 to SELF"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_0 to self" );
|
||||
RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_0, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_SEND - SIGNAL_0 to SELF"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_catch - NO_ASR" );
|
||||
RTEMS.SIGNAL_CATCH(SPTEST.PROCESS_ASR'ACCESS, RTEMS.NO_ASR, STATUS);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH - NO_ASR" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_1 to self" );
|
||||
RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_SEND - SIGNAL_1 to SELF"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_mode - disable ASRs" );
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
SPTEST.TIMER_GOT_THIS_ID := 0;
|
||||
SPTEST.TIMER_GOT_THIS_POINTER := RTEMS.NULL_ADDRESS;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - sending signal to SELF from timer" );
|
||||
RTEMS.TIMER_FIRE_AFTER(
|
||||
SPTEST.TIMER_ID( 1 ),
|
||||
TEST_SUPPORT.TICKS_PER_SECOND / 2,
|
||||
SPTEST.SIGNAL_3_TO_TASK_1'ACCESS,
|
||||
SPTEST.TASK_1'ADDRESS,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - waiting for signal to arrive" );
|
||||
|
||||
SPTEST.SIGNAL_SENT := FALSE;
|
||||
SPTEST.ASR_FIRED := FALSE;
|
||||
|
||||
loop
|
||||
exit when SPTEST.SIGNAL_SENT = TRUE;
|
||||
end loop;
|
||||
|
||||
if SPTEST.TIMER_GOT_THIS_ID = SPTEST.TIMER_ID( 1 ) and then
|
||||
SPTEST.TIMER_GOT_THIS_POINTER = SPTEST.TASK_1'ADDRESS then
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - timer routine got the correct arguments" );
|
||||
|
||||
else
|
||||
|
||||
TEXT_IO.PUT( "TA1 - timer got (" );
|
||||
UNSIGNED32_IO.PUT( SPTEST.TIMER_GOT_THIS_ID );
|
||||
TEXT_IO.PUT( "," );
|
||||
ADDRESS_IO.PUT( SPTEST.TIMER_GOT_THIS_POINTER );
|
||||
TEXT_IO.PUT( ") instead of (" );
|
||||
UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ) );
|
||||
TEXT_IO.PUT( "," );
|
||||
ADDRESS_IO.PUT( SPTEST.TASK_1'ADDRESS );
|
||||
TEXT_IO.PUT_LINE( ")!!!!" );
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_mode - enable ASRs" );
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.ASR,
|
||||
RTEMS.ASR_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_catch - ASR ADDRESS of NULL" );
|
||||
RTEMS.SIGNAL_CATCH( NULL, RTEMS.DEFAULT_MODES, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_CATCH - NULL ADDRESS"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - signal_send - SIGNAL_17 to TA1" );
|
||||
RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_17, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_SEND - SIGNAL_17 to TA1"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
|
||||
|
||||
TEXT_IO.PUT_LINE(
|
||||
"TA2 - signal_send - SIGNAL_18 and SIGNAL_19 to TA1"
|
||||
);
|
||||
RTEMS.SIGNAL_SEND(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"SIGNAL_SEND - SIGNAL_18 and SIGNAL_19 to TA1"
|
||||
);
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 14 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
THE_SIGNAL_SET : in RTEMS.SIGNAL_SET
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "ASR - ENTRY - signal => " );
|
||||
UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
if THE_SIGNAL_SET = RTEMS.SIGNAL_16 or else
|
||||
THE_SIGNAL_SET = RTEMS.SIGNAL_17 or else
|
||||
THE_SIGNAL_SET = RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19 then
|
||||
NULL;
|
||||
|
||||
elsif THE_SIGNAL_SET = RTEMS.SIGNAL_0 or else
|
||||
THE_SIGNAL_SET = RTEMS.SIGNAL_1 then
|
||||
TEXT_IO.PUT_LINE( "ASR - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"TASK_WAKE_AFTER YIELD"
|
||||
);
|
||||
|
||||
elsif THE_SIGNAL_SET = RTEMS.SIGNAL_3 then
|
||||
|
||||
SPTEST.ASR_FIRED := TRUE;
|
||||
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT( "ASR - EXIT - signal => " );
|
||||
UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
end PROCESS_ASR;
|
||||
|
||||
end SPTEST;
|
||||
186
c/src/ada-tests/sptests/sp14/sptest.ads
Normal file
186
c/src/ada-tests/sptests/sp14/sptest.ads
Normal file
@@ -0,0 +1,186 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 14 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:42:02 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS timers created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TIMER_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
|
||||
TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- SIGNAL_SENT is set to TRUE to indicate that a signal set has
|
||||
-- been sent from an ISR to the executing task.
|
||||
--
|
||||
|
||||
SIGNAL_SENT : RTEMS.BOOLEAN;
|
||||
pragma volatile( SIGNAL_SENT );
|
||||
|
||||
--
|
||||
-- These hold the arguments passed to the timer service routine.
|
||||
--
|
||||
|
||||
TIMER_GOT_THIS_ID : RTEMS.ID;
|
||||
pragma volatile( TIMER_GOT_THIS_ID );
|
||||
|
||||
TIMER_GOT_THIS_POINTER : RTEMS.ADDRESS;
|
||||
pragma volatile( TIMER_GOT_THIS_POINTER );
|
||||
|
||||
--
|
||||
-- ASR_FIRED is set to TRUE to indicate that the ASR has executed
|
||||
-- and was passed the correct signal set.
|
||||
--
|
||||
|
||||
ASR_FIRED : RTEMS.BOOLEAN;
|
||||
pragma volatile( ASR_FIRED );
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- SIGNAL_3_TO_TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram sends signal 3 to TASK_1.
|
||||
--
|
||||
|
||||
procedure SIGNAL_3_TO_TASK_1 (
|
||||
ID : in RTEMS.ID;
|
||||
POINTER : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is an ASR for TASK_1.
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
THE_SIGNAL_SET : in RTEMS.SIGNAL_SET
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Signal Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Signal Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
1, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
284
c/src/ada-tests/sptests/sp15/sptest.adb
Normal file
284
c/src/ada-tests/sptests/sp15/sptest.adb
Normal file
@@ -0,0 +1,284 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 15 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:42:05 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 15 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
|
||||
SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
|
||||
SPTEST.PARTITION_NAME( 2 ) := RTEMS.BUILD_NAME( 'P', 'T', '2', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
4,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "INIT - partition_create - partition 1" );
|
||||
RTEMS.PARTITION_CREATE(
|
||||
SPTEST.PARTITION_NAME( 1 ),
|
||||
AREA_1'ADDRESS,
|
||||
4096,
|
||||
512,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.PARTITION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "INIT - partition_create - partition 2" );
|
||||
RTEMS.PARTITION_CREATE(
|
||||
SPTEST.PARTITION_NAME( 2 ),
|
||||
AREA_2'ADDRESS,
|
||||
274,
|
||||
128,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.PARTITION_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT2" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_1
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_1 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
) is
|
||||
|
||||
begin
|
||||
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
|
||||
end PUT_ADDRESS_FROM_AREA_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_2
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_2 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
|
||||
end PUT_ADDRESS_FROM_AREA_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
PTID_1 : RTEMS.ID;
|
||||
PTID_2 : RTEMS.ID;
|
||||
BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
|
||||
BUFFER_ADDRESS_4 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "TA1 - partition_ident - partition 1 id = " );
|
||||
RTEMS.PARTITION_IDENT(
|
||||
SPTEST.PARTITION_NAME( 1 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
PTID_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT1" );
|
||||
UNSIGNED32_IO.PUT( PTID_1, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - partition_ident - partition 2 id = " );
|
||||
RTEMS.PARTITION_IDENT(
|
||||
SPTEST.PARTITION_NAME( 2 ),
|
||||
RTEMS.SEARCH_ALL_NODES,
|
||||
PTID_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT2" );
|
||||
UNSIGNED32_IO.PUT( PTID_2, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_get_buffer - get buffer 1 from partition 1 - "
|
||||
);
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
SPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_get_buffer - get buffer 2 from partition 1 - "
|
||||
);
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
SPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_get_buffer - get buffer 1 from partition 2 - "
|
||||
);
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
SPTEST.PARTITION_ID( 2 ),
|
||||
BUFFER_ADDRESS_3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_get_buffer - get buffer 2 from partition 2 - "
|
||||
);
|
||||
RTEMS.PARTITION_GET_BUFFER(
|
||||
SPTEST.PARTITION_ID( 2 ),
|
||||
BUFFER_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_return_buffer - return buffer 1 to partition 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
SPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_return_buffer - return buffer 2 to partition 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
SPTEST.PARTITION_ID( 1 ),
|
||||
BUFFER_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_return_buffer - return buffer 1 to partition 2 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
SPTEST.PARTITION_ID( 2 ),
|
||||
BUFFER_ADDRESS_3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - partition_return_buffer - return buffer 2 to partition 2 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.PARTITION_RETURN_BUFFER(
|
||||
SPTEST.PARTITION_ID( 2 ),
|
||||
BUFFER_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 1" );
|
||||
RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 2" );
|
||||
RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 15 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
end SPTEST;
|
||||
173
c/src/ada-tests/sptests/sp15/sptest.ads
Normal file
173
c/src/ada-tests/sptests/sp15/sptest.ads
Normal file
@@ -0,0 +1,173 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 15 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:42:06 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS partitions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
PARTITION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays define the memory areas used for the partitions in
|
||||
-- this test.
|
||||
--
|
||||
|
||||
AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
|
||||
for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
AREA_2 : array ( RTEMS.UNSIGNED32 range 0 .. 273 ) of RTEMS.UNSIGNED8;
|
||||
for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subpgram prints the offset of the address TO_BE_PRINTED
|
||||
-- from the first byte of AREA_1.
|
||||
--
|
||||
-- NOTE:
|
||||
--
|
||||
-- This subprogram is used because the actual address of AREA_1
|
||||
-- varies based upon the size of the executable, the target board,
|
||||
-- and the target processor.
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_1 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the offset of the address TO_BE_PRINTED
|
||||
-- from the first byte of AREA_2.
|
||||
--
|
||||
-- NOTE:
|
||||
--
|
||||
-- This subprogram is used because the actual address of AREA_1
|
||||
-- varies based upon the size of the executable, the target board,
|
||||
-- and the target processor.
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_2 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Partition Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
2, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
686
c/src/ada-tests/sptests/sp16/sptest.adb
Normal file
686
c/src/ada-tests/sptests/sp16/sptest.adb
Normal file
@@ -0,0 +1,686 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 16 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:42:10 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 16 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
|
||||
SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
SPTEST.BASE_PRIORITY,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
SPTEST.BASE_PRIORITY,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 3 ),
|
||||
SPTEST.BASE_PRIORITY,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 3 ),
|
||||
SPTEST.TASK_3'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
|
||||
|
||||
SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
|
||||
SPTEST.REGION_NAME( 2 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
|
||||
SPTEST.REGION_NAME( 3 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
|
||||
|
||||
RTEMS.REGION_CREATE(
|
||||
SPTEST.REGION_NAME( 1 ),
|
||||
SPTEST.AREA_1'ADDRESS,
|
||||
4096,
|
||||
128,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" );
|
||||
|
||||
RTEMS.REGION_CREATE(
|
||||
SPTEST.REGION_NAME( 2 ),
|
||||
SPTEST.AREA_2'ADDRESS,
|
||||
4096,
|
||||
128,
|
||||
RTEMS.PRIORITY,
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN2" );
|
||||
|
||||
RTEMS.REGION_CREATE(
|
||||
SPTEST.REGION_NAME( 3 ),
|
||||
SPTEST.AREA_3'ADDRESS,
|
||||
4096,
|
||||
128,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.REGION_ID( 3 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN3" );
|
||||
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_1
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_1 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
) is
|
||||
|
||||
begin
|
||||
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
|
||||
end PUT_ADDRESS_FROM_AREA_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_2
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_2 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
|
||||
end PUT_ADDRESS_FROM_AREA_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_3
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_3 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
) is
|
||||
begin
|
||||
|
||||
UNSIGNED32_IO.PUT(
|
||||
RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_3'ADDRESS ),
|
||||
WIDTH => 8,
|
||||
BASE => 16
|
||||
);
|
||||
|
||||
end PUT_ADDRESS_FROM_AREA_3;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
RNID : RTEMS.ID;
|
||||
SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_4 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.REGION_IDENT( SPTEST.REGION_NAME( 1 ), RNID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_IDENT OF RN1" );
|
||||
TEXT_IO.PUT( "TA1 - region_ident - rnid => " );
|
||||
UNSIGNED32_IO.PUT( RNID, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
|
||||
TEXT_IO.PUT_LINE( "100 byte segment from region 2" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
100,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA1 - got segment from region 2 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
|
||||
TEXT_IO.PUT_LINE( "3K segment from region 3" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 3 ),
|
||||
3072,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA1 - got segment from region 3 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_3( SEGMENT_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - region_get_segment - get 3080 byte segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1 - NO_WAIT" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
3080,
|
||||
RTEMS.NO_WAIT,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - region_return_segment - return segment to region 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_3,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
|
||||
TEXT_IO.PUT_LINE( "segment from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
3072,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SEGMENT_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - region_return_segment - return segment to region 2 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
|
||||
|
||||
TEST_SUPPORT.PAUSE;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 4 ),
|
||||
SPTEST.BASE_PRIORITY,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 5 ),
|
||||
SPTEST.BASE_PRIORITY,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 5 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 4 ),
|
||||
SPTEST.TASK_4'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 5 ),
|
||||
SPTEST.TASK_5'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - region_return_segment - return segment to region 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
|
||||
TEXT_IO.PUT_LINE( "segment from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
3072,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
10 * TEST_SUPPORT.TICKS_PER_SECOND,
|
||||
SEGMENT_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
|
||||
RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA1 - region_return_segment - return segment to region 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_4,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
|
||||
RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - region_delete - delete region 1" );
|
||||
RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 16 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
|
||||
SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "TA2 - region_get_segment - wait on 2K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
2048,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA2 - got segment from region 1 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA2 - region_return_segment - return segment to region 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA2 - task_set_priority - make self " );
|
||||
TEXT_IO.PUT_LINE( "highest priority task" );
|
||||
RTEMS.TASK_SET_PRIORITY(
|
||||
RTEMS.SELF,
|
||||
SPTEST.BASE_PRIORITY - 1,
|
||||
PREVIOUS_PRIORITY,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA2 - region_get_segment - wait on 3968 byte segment "
|
||||
);
|
||||
TEXT_IO.PUT_LINE( "from region 2" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
3968,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA2 - got segment from region 2 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT(
|
||||
"TA2 - region_return_segment - return segment to region 2 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "TA3 - region_get_segment - wait on 3968 byte segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 2" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 2 ),
|
||||
3968,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA3 - got segment from region 2 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT( "TA3 - region_get_segment - wait on 2K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 3" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 3 ),
|
||||
2048,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
|
||||
end TASK_3;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "TA4 - region_get_segment - wait on 1.5K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
1536,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA4 - got and returned " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT( "TA4 - region_get_segment - wait on 3K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
3072,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
|
||||
end TASK_4;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_5
|
||||
--
|
||||
|
||||
procedure TASK_5 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
|
||||
SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT( "TA5 - region_get_segment - wait on 1.5K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
1536,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_1,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA5 - got and returned " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
TEXT_IO.PUT( "TA5 - region_get_segment - wait on 3K segment " );
|
||||
TEXT_IO.PUT_LINE( "from region 1" );
|
||||
RTEMS.REGION_GET_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
3072,
|
||||
RTEMS.DEFAULT_OPTIONS,
|
||||
RTEMS.NO_TIMEOUT,
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
|
||||
TEXT_IO.PUT( "TA5 - got segment from region 1 - " );
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.REGION_RETURN_SEGMENT(
|
||||
SPTEST.REGION_ID( 1 ),
|
||||
SEGMENT_ADDRESS_2,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
|
||||
TEXT_IO.PUT(
|
||||
"TA5 - region_return_segment - return segment to region 1 - "
|
||||
);
|
||||
SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA5 - task_delete - delete self" );
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA5" );
|
||||
|
||||
end TASK_5;
|
||||
|
||||
end SPTEST;
|
||||
250
c/src/ada-tests/sptests/sp16/sptest.ads
Normal file
250
c/src/ada-tests/sptests/sp16/sptest.ads
Normal file
@@ -0,0 +1,250 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 16 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:42:11 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS regions created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- The following constant defines the priority of most of the
|
||||
-- RTEMS tasks in this test. This allows one of the tasks to
|
||||
-- easily set itself to a higher priority than the rest.
|
||||
--
|
||||
|
||||
BASE_PRIORITY : constant RTEMS.TASK_PRIORITY := 140;
|
||||
|
||||
--
|
||||
-- These arrays define the memory areas used for the regions in
|
||||
-- this test.
|
||||
--
|
||||
|
||||
AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
|
||||
for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
AREA_2 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
|
||||
for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
AREA_3 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
|
||||
for AREA_3'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the offset of the address TO_BE_PRINTED
|
||||
-- from the first byte of AREA_1.
|
||||
--
|
||||
-- NOTE:
|
||||
--
|
||||
-- This subprogram is used because the actual address of AREA_1
|
||||
-- varies based upon the size of the executable, the target board,
|
||||
-- and the target processor.
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_1 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the offset of the address TO_BE_PRINTED
|
||||
-- from the first byte of AREA_2.
|
||||
--
|
||||
-- NOTE:
|
||||
--
|
||||
-- This subprogram is used because the actual address of AREA_2
|
||||
-- varies based upon the size of the executable, the target board,
|
||||
-- and the target processor.
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_2 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- PUT_ADDRESS_FROM_AREA_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram prints the offset of the address TO_BE_PRINTED
|
||||
-- from the first byte of AREA_3.
|
||||
--
|
||||
-- NOTE:
|
||||
--
|
||||
-- This subprogram is used because the actual address of AREA_3
|
||||
-- varies based upon the size of the executable, the target board,
|
||||
-- and the target processor.
|
||||
--
|
||||
|
||||
procedure PUT_ADDRESS_FROM_AREA_3 (
|
||||
TO_BE_PRINTED : in RTEMS.ADDRESS
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Region Manager.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Region Manager.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_3
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Region Manager.
|
||||
--
|
||||
|
||||
procedure TASK_3 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_4
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Region Manager.
|
||||
--
|
||||
|
||||
procedure TASK_4 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_5
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the Region Manager.
|
||||
--
|
||||
|
||||
procedure TASK_5 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
3, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
100 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
173
c/src/ada-tests/sptests/sp17/sptest.adb
Normal file
173
c/src/ada-tests/sptests/sp17/sptest.adb
Normal file
@@ -0,0 +1,173 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 17 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:42:14 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 17 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
|
||||
SPTEST.TASK_2_PREEMPTED := FALSE;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 1 ),
|
||||
2,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( 2 ),
|
||||
1,
|
||||
2048,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
SPTEST.TASK_1'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( 2 ),
|
||||
SPTEST.TASK_2'ACCESS,
|
||||
0,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
SIGNALS : in RTEMS.SIGNAL_SET
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "ASR - TASK_RESUME OF TA2" );
|
||||
|
||||
end PROCESS_ASR;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - signal_catch: initializing signal catcher" );
|
||||
RTEMS.SIGNAL_CATCH(
|
||||
SPTEST.PROCESS_ASR'ACCESS,
|
||||
RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - Sending signal to self" );
|
||||
RTEMS.SIGNAL_SEND(
|
||||
SPTEST.TASK_ID( 1 ),
|
||||
RTEMS.SIGNAL_16,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
|
||||
|
||||
if SPTEST.TASK_2_PREEMPTED = TRUE then
|
||||
TEXT_IO.PUT_LINE( "TA1 - TA2 correctly preempted me" );
|
||||
end if;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA1 - Got Back!!!" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 17 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
|
||||
end TASK_1;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
SPTEST.TASK_2_PREEMPTED := FALSE;
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - Suspending self" );
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
TEXT_IO.PUT_LINE( "TA2 - signal_return preempted correctly" );
|
||||
|
||||
SPTEST.TASK_2_PREEMPTED := TRUE;
|
||||
|
||||
RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
|
||||
|
||||
end TASK_2;
|
||||
|
||||
end SPTEST;
|
||||
148
c/src/ada-tests/sptests/sp17/sptest.ads
Normal file
148
c/src/ada-tests/sptests/sp17/sptest.ads
Normal file
@@ -0,0 +1,148 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 17 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:42:15 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- The following is set to TRUE by TASK_2 when it preempts TASK_1.
|
||||
--
|
||||
|
||||
TASK_2_PREEMPTED : RTEMS.BOOLEAN;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- PROCESS_ASR
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This subprogram is the ASR for TASK_1.
|
||||
--
|
||||
|
||||
procedure PROCESS_ASR (
|
||||
SIGNALS : in RTEMS.SIGNAL_SET
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests that when the transfer from the task
|
||||
-- to the ASR (and vice-versa) is performed, that the new mode
|
||||
-- is taken into account. If this occurs, then TASK_2 will be
|
||||
-- able to preempt upon completion of the ASR of TASK_1.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_2
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task is designed to preempt TASK_1.
|
||||
--
|
||||
|
||||
procedure TASK_2 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(25), -- # us in a tick
|
||||
1000 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
157
c/src/ada-tests/sptests/sp19/sptest.ads
Normal file
157
c/src/ada-tests/sptests/sp19/sptest.ads
Normal file
@@ -0,0 +1,157 @@
|
||||
--
|
||||
-- SPTEST / SPECIFICATION
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the specification for Test 19 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.ads,v 1.3 1995/07/12 19:42:21 joel Exp
|
||||
--
|
||||
|
||||
with CLOCK_DRIVER;
|
||||
with RTEMS;
|
||||
|
||||
package SPTEST is
|
||||
|
||||
--
|
||||
-- These arrays contain the IDs and NAMEs of all RTEMS tasks created
|
||||
-- by this test.
|
||||
--
|
||||
|
||||
TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
|
||||
TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
|
||||
|
||||
--
|
||||
-- This array contains the floating point factors used by the
|
||||
-- floating point tasks in this test.
|
||||
--
|
||||
|
||||
FP_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of FLOAT;
|
||||
|
||||
--
|
||||
-- This array contains the integer factors used by the
|
||||
-- integer tasks in this test.
|
||||
--
|
||||
|
||||
INTEGER_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of
|
||||
RTEMS.UNSIGNED32;
|
||||
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task initializes the application.
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- FIRST_FP_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the restart and deletion of floating point tasks.
|
||||
--
|
||||
|
||||
procedure FIRST_FP_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- FP_TASK
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task tests the basic capabilities of a floating point
|
||||
-- task.
|
||||
--
|
||||
|
||||
procedure FP_TASK (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- TASK_1
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This RTEMS task provides a non-floating point task to test
|
||||
-- that an application can utilize a mixture of floating point
|
||||
-- and non-floating point tasks.
|
||||
--
|
||||
|
||||
procedure TASK_1 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Driver Address Table for this test.
|
||||
--
|
||||
|
||||
DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
CLOCK_DRIVER.INITIALIZE'ACCESS, -- Initialization
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Open
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Close
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Read
|
||||
RTEMS.NO_DRIVER_ENTRY, -- Write
|
||||
RTEMS.NO_DRIVER_ENTRY -- Control
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Initialization Tasks Table for this test.
|
||||
--
|
||||
|
||||
INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) :=
|
||||
(1=>
|
||||
(
|
||||
RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name
|
||||
2048, -- stack size
|
||||
1, -- priority
|
||||
RTEMS.DEFAULT_ATTRIBUTES, -- attributes
|
||||
SPTEST.INIT'ACCESS, -- entry point
|
||||
RTEMS.NO_PREEMPT, -- initial mode
|
||||
0 -- argument list
|
||||
)
|
||||
);
|
||||
|
||||
--
|
||||
-- This is the Configuration Table for this test.
|
||||
--
|
||||
|
||||
CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
|
||||
RTEMS.NULL_ADDRESS, -- will be replaced by BSP
|
||||
64 * 1024, -- executive RAM size
|
||||
10, -- maximum # tasks
|
||||
0, -- maximum # timers
|
||||
0, -- maximum # semaphores
|
||||
0, -- maximum # message queues
|
||||
0, -- maximum # messages
|
||||
0, -- maximum # partitions
|
||||
0, -- maximum # regions
|
||||
0, -- maximum # dp memory areas
|
||||
0, -- maximum # periods
|
||||
0, -- maximum # user extensions
|
||||
RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
|
||||
50 -- # ticks in a timeslice
|
||||
);
|
||||
|
||||
end SPTEST;
|
||||
282
c/src/ada-tests/sptests/sp20/sptest.adb
Normal file
282
c/src/ada-tests/sptests/sp20/sptest.adb
Normal file
@@ -0,0 +1,282 @@
|
||||
--
|
||||
-- SPTEST / BODY
|
||||
--
|
||||
-- DESCRIPTION:
|
||||
--
|
||||
-- This package is the implementation of Test 20 of the RTEMS
|
||||
-- Single Processor Test Suite.
|
||||
--
|
||||
-- DEPENDENCIES:
|
||||
--
|
||||
--
|
||||
--
|
||||
-- COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
-- On-Line Applications Research Corporation (OAR).
|
||||
-- All rights assigned to U.S. Government, 1994.
|
||||
--
|
||||
-- This material may be reproduced by or for the U.S. Government pursuant
|
||||
-- to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
-- notice must appear in all copies of this file and its derivatives.
|
||||
--
|
||||
-- sptest.adb,v 1.3 1995/07/12 19:42:24 joel Exp
|
||||
--
|
||||
|
||||
with INTERFACES; use INTERFACES;
|
||||
with RTEMS;
|
||||
with TEST_SUPPORT;
|
||||
with TEXT_IO;
|
||||
with UNSIGNED32_IO;
|
||||
|
||||
package body SPTEST is
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- INIT
|
||||
--
|
||||
|
||||
procedure INIT (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
TEXT_IO.NEW_LINE( 2 );
|
||||
TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
|
||||
|
||||
SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' );
|
||||
SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' );
|
||||
SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' );
|
||||
SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME( 'T', 'A', '4', ' ' );
|
||||
SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME( 'T', 'A', '5', ' ' );
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
SPTEST.COUNT( INDEX ) := 0;
|
||||
|
||||
RTEMS.TASK_CREATE(
|
||||
SPTEST.TASK_NAME( INDEX ),
|
||||
SPTEST.PRIORITIES( INDEX ),
|
||||
4096,
|
||||
RTEMS.DEFAULT_MODES,
|
||||
RTEMS.DEFAULT_ATTRIBUTES,
|
||||
SPTEST.TASK_ID( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
|
||||
|
||||
end loop;
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
RTEMS.TASK_START(
|
||||
SPTEST.TASK_ID( INDEX ),
|
||||
SPTEST.TASK_1_THROUGH_5'ACCESS,
|
||||
RTEMS.TASK_ARGUMENT( INDEX ),
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
|
||||
|
||||
end loop;
|
||||
|
||||
RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
|
||||
|
||||
end INIT;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- TASK_1_THROUGH_5
|
||||
--
|
||||
|
||||
procedure TASK_1_THROUGH_5 (
|
||||
ARGUMENT : in RTEMS.TASK_ARGUMENT
|
||||
) is
|
||||
RMID : RTEMS.ID;
|
||||
TEST_RMID : RTEMS.ID;
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
PASS : RTEMS.UNSIGNED32;
|
||||
FAILED : RTEMS.UNSIGNED32;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
begin
|
||||
|
||||
RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
|
||||
TEXT_IO.PUT( "- rate_monotonic_create id = " );
|
||||
UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
|
||||
TEXT_IO.PUT( "- rate_monotonic_ident id = " );
|
||||
UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
|
||||
TEXT_IO.NEW_LINE;
|
||||
if TEST_RMID /= RMID then
|
||||
TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
|
||||
TEXT_IO.PUT( " - (" );
|
||||
UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
|
||||
TEXT_IO.PUT( ") period " );
|
||||
UNSIGNED32_IO.PUT(
|
||||
SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
|
||||
WIDTH => 1,
|
||||
BASE => 10
|
||||
);
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
RTEMS.TASK_WAKE_AFTER( 2, STATUS );
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
|
||||
|
||||
case ARGUMENT is
|
||||
when 1 .. 4 =>
|
||||
loop
|
||||
RTEMS.RATE_MONOTONIC_PERIOD(
|
||||
RMID,
|
||||
SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"RATE_MONOTONIC_PERIOD"
|
||||
);
|
||||
|
||||
SPTEST.COUNT( INTEGER( ARGUMENT ) ) :=
|
||||
SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
|
||||
|
||||
end loop;
|
||||
|
||||
when 5 =>
|
||||
|
||||
PASS := 0;
|
||||
FAILED := 0;
|
||||
|
||||
RTEMS.RATE_MONOTONIC_PERIOD(
|
||||
RMID,
|
||||
SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"RATE_MONOTONIC_PERIOD 1 OF TA5"
|
||||
);
|
||||
|
||||
SPTEST.GET_ALL_COUNTERS;
|
||||
|
||||
loop
|
||||
|
||||
RTEMS.RATE_MONOTONIC_PERIOD(
|
||||
RMID,
|
||||
SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
|
||||
STATUS
|
||||
);
|
||||
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED(
|
||||
STATUS,
|
||||
"RATE_MONOTONIC_PERIOD 2 OF TA5"
|
||||
);
|
||||
|
||||
SPTEST.GET_ALL_COUNTERS;
|
||||
|
||||
for INDEX in 1 .. 4
|
||||
loop
|
||||
|
||||
if SPTEST.TEMPORARY_COUNT( INDEX ) /=
|
||||
SPTEST.ITERATIONS( INDEX ) then
|
||||
|
||||
TEXT_IO.PUT( "FAIL -- " );
|
||||
TEST_SUPPORT.PUT_NAME(
|
||||
SPTEST.TASK_NAME( INDEX ),
|
||||
FALSE
|
||||
);
|
||||
TEXT_IO.PUT( "ACTUAL=" );
|
||||
UNSIGNED32_IO.PUT(
|
||||
SPTEST.TEMPORARY_COUNT( INDEX ),
|
||||
WIDTH => 3,
|
||||
BASE => 10
|
||||
);
|
||||
TEXT_IO.PUT( " EXPECTED=" );
|
||||
UNSIGNED32_IO.PUT(
|
||||
SPTEST.ITERATIONS( INDEX ),
|
||||
WIDTH => 3,
|
||||
BASE => 10
|
||||
);
|
||||
TEXT_IO.NEW_LINE;
|
||||
|
||||
FAILED := FAILED + 1;
|
||||
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
if FAILED = 5 then
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
PASS := PASS + 1;
|
||||
TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
|
||||
UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
|
||||
TEXT_IO.PUT_LINE( ")" );
|
||||
|
||||
if PASS = 10 then
|
||||
TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
|
||||
RTEMS.SHUTDOWN_EXECUTIVE( 0 );
|
||||
end if;
|
||||
|
||||
end loop;
|
||||
|
||||
when others =>
|
||||
NULL;
|
||||
|
||||
end case;
|
||||
|
||||
end TASK_1_THROUGH_5;
|
||||
|
||||
--PAGE
|
||||
--
|
||||
-- GET_ALL_COUNTERS
|
||||
--
|
||||
|
||||
procedure GET_ALL_COUNTERS
|
||||
is
|
||||
PREVIOUS_MODE : RTEMS.MODE;
|
||||
STATUS : RTEMS.STATUS_CODES;
|
||||
INDEX : RTEMS.UNSIGNED32;
|
||||
begin
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.NO_PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
|
||||
|
||||
SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
|
||||
|
||||
for INDEX in 1 .. 5
|
||||
loop
|
||||
|
||||
SPTEST.COUNT( INDEX ) := 0;
|
||||
|
||||
end loop;
|
||||
|
||||
RTEMS.TASK_MODE(
|
||||
RTEMS.PREEMPT,
|
||||
RTEMS.PREEMPT_MASK,
|
||||
PREVIOUS_MODE,
|
||||
STATUS
|
||||
);
|
||||
TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
|
||||
|
||||
end GET_ALL_COUNTERS;
|
||||
|
||||
end SPTEST;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user