diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1997-06-02 20:19:03 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1997-06-02 20:19:03 +0000 |
commit | 6d4e604be8b43c0555cd1c9531fe78ae199a1189 (patch) | |
tree | adc303bfeaddf541a8f45ea1597f43bf8bf7a09d /c/src/ada-tests/sptests | |
parent | Changed bitwise OR's used to build up option and attribute sets (diff) | |
download | rtems-6d4e604be8b43c0555cd1c9531fe78ae199a1189.tar.bz2 |
Initial revision
Diffstat (limited to 'c/src/ada-tests/sptests')
47 files changed, 15263 insertions, 0 deletions
diff --git a/c/src/ada-tests/sptests/sp01/sptest.adb b/c/src/ada-tests/sptests/sp01/sptest.adb new file mode 100644 index 0000000000..5c0b7ae79c --- /dev/null +++ b/c/src/ada-tests/sptests/sp01/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp01/sptest.ads b/c/src/ada-tests/sptests/sp01/sptest.ads new file mode 100644 index 0000000000..348f8f48ce --- /dev/null +++ b/c/src/ada-tests/sptests/sp01/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp02/sptest.adb b/c/src/ada-tests/sptests/sp02/sptest.adb new file mode 100644 index 0000000000..1597b6549c --- /dev/null +++ b/c/src/ada-tests/sptests/sp02/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp02/sptest.ads b/c/src/ada-tests/sptests/sp02/sptest.ads new file mode 100644 index 0000000000..8cfacaf25e --- /dev/null +++ b/c/src/ada-tests/sptests/sp02/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp03/sptest.adb b/c/src/ada-tests/sptests/sp03/sptest.adb new file mode 100644 index 0000000000..95df5bc436 --- /dev/null +++ b/c/src/ada-tests/sptests/sp03/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp03/sptest.ads b/c/src/ada-tests/sptests/sp03/sptest.ads new file mode 100644 index 0000000000..ca947842a5 --- /dev/null +++ b/c/src/ada-tests/sptests/sp03/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp04/sptest.adb b/c/src/ada-tests/sptests/sp04/sptest.adb new file mode 100644 index 0000000000..f777d4091e --- /dev/null +++ b/c/src/ada-tests/sptests/sp04/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp04/sptest.ads b/c/src/ada-tests/sptests/sp04/sptest.ads new file mode 100644 index 0000000000..86d8e6f735 --- /dev/null +++ b/c/src/ada-tests/sptests/sp04/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp05/sptest.adb b/c/src/ada-tests/sptests/sp05/sptest.adb new file mode 100644 index 0000000000..9313ce4c76 --- /dev/null +++ b/c/src/ada-tests/sptests/sp05/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp05/sptest.ads b/c/src/ada-tests/sptests/sp05/sptest.ads new file mode 100644 index 0000000000..d5a5428f56 --- /dev/null +++ b/c/src/ada-tests/sptests/sp05/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp06/sptest.adb b/c/src/ada-tests/sptests/sp06/sptest.adb new file mode 100644 index 0000000000..b356e302b7 --- /dev/null +++ b/c/src/ada-tests/sptests/sp06/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp06/sptest.ads b/c/src/ada-tests/sptests/sp06/sptest.ads new file mode 100644 index 0000000000..e54bb9e535 --- /dev/null +++ b/c/src/ada-tests/sptests/sp06/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp07/sptest.adb b/c/src/ada-tests/sptests/sp07/sptest.adb new file mode 100644 index 0000000000..db373468ab --- /dev/null +++ b/c/src/ada-tests/sptests/sp07/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp07/sptest.ads b/c/src/ada-tests/sptests/sp07/sptest.ads new file mode 100644 index 0000000000..ff75d8e67e --- /dev/null +++ b/c/src/ada-tests/sptests/sp07/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp08/sptest.adb b/c/src/ada-tests/sptests/sp08/sptest.adb new file mode 100644 index 0000000000..722af5d6b4 --- /dev/null +++ b/c/src/ada-tests/sptests/sp08/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp08/sptest.ads b/c/src/ada-tests/sptests/sp08/sptest.ads new file mode 100644 index 0000000000..f985758e4d --- /dev/null +++ b/c/src/ada-tests/sptests/sp08/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp09/sptest.adb b/c/src/ada-tests/sptests/sp09/sptest.adb new file mode 100644 index 0000000000..9897b5b7ee --- /dev/null +++ b/c/src/ada-tests/sptests/sp09/sptest.adb @@ -0,0 +1,3151 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of 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.adb,v 1.3 1995/07/12 19:41:40 joel Exp +-- + +with BSP; +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 9 ***" ); + + 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.TASK_NAME( 6 ) := RTEMS.BUILD_NAME( 'T', 'A', '6', ' ' ); + SPTEST.TASK_NAME( 7 ) := RTEMS.BUILD_NAME( 'T', 'A', '7', ' ' ); + SPTEST.TASK_NAME( 8 ) := RTEMS.BUILD_NAME( 'T', 'A', '8', ' ' ); + SPTEST.TASK_NAME( 9 ) := RTEMS.BUILD_NAME( 'T', 'A', '9', ' ' ); + SPTEST.TASK_NAME( 10 ) := RTEMS.BUILD_NAME( 'T', 'A', 'A', ' ' ); + + SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' ); + + 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', ' ' ); + + SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ); + SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME( 'M', 'Q', '2', ' ' ); + + SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' ); + + SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' ); + + SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' ); + + SPTEST.PERIOD_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' ); + +-- RTEMS.TASK_CREATE( +-- SPTEST.TASK_NAME( 1 ), +-- 4, +-- 10, +-- RTEMS.DEFAULT_MODES, +-- RTEMS.DEFAULT_ATTRIBUTES, +-- SPTEST.TASK_ID( 1 ), +-- STATUS +-- ); +-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( +-- STATUS, +-- RTEMS.INVALID_SIZE, +-- "TASK_CREATE WITH ILLEGAL STACK SIZE" +-- ); + TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_SIZE -- NOT CHECKED" ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 1 ), + 0, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_PRIORITY, + "TASK_CREATE WITH ILLEGAL PRIORITY" + ); + TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_PRIORITY" ); + + 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_RESTART( + SPTEST.TASK_ID( 1 ), + 0, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INCORRECT_STATE, + "TASK_RESTART OF DORMANT TASK" + ); + TEXT_IO.PUT_LINE( "INIT - task_restart - INCORRECT_STATE" ); + + 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 +-- +-- DELAYED_SUBPROGRAM +-- + + procedure DELAYED_SUBPROGRAM ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ) is + begin + + NULL; + + end DELAYED_SUBPROGRAM; + +--PAGE +-- +-- SERVICE_ROUTINE +-- + + procedure SERVICE_ROUTINE ( + IGNORED : in RTEMS.VECTOR_NUMBER + ) is + begin + + NULL; + + end SERVICE_ROUTINE; + +--PAGE +-- +-- SCREEN_1 +-- + + procedure SCREEN_1 + is + NOTEPAD_VALUE : RTEMS.UNSIGNED32; + SELF_ID : RTEMS.ID; + PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_delete - INVALID_ID" ); + +-- RTEMS.TASK_GET_NOTE( RTEMS.SELF, +-- RTEMS.NOTEPAD_INDEX'LAST + 10, +-- NOTEPAD_VALUE, +-- STATUS +-- ); +-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( +-- STATUS, +-- RTEMS.INVALID_NUMBER, +-- "TASK_GET_NOTE WITH ILLEGAL NOTEPAD" +-- ); +-- TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_NUMBER" ); + TEXT_IO.PUT_LINE( + "TA1 - task_get_note - INVALID_NUMBER -- constraint error" + ); + + RTEMS.TASK_GET_NOTE( + 100, + RTEMS.NOTEPAD_INDEX'LAST, + NOTEPAD_VALUE, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_GET_NOTE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_ID" ); + + RTEMS.TASK_IDENT( + RTEMS.SELF, + RTEMS.SEARCH_ALL_NODES, + SELF_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" ); + if SELF_ID /= SPTEST.TASK_ID( 1 ) then + TEXT_IO.PUT_LINE( "ERROR - task_ident - incorrect ID returned!" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + end if; + TEXT_IO.PUT_LINE( + "TA1 - task_ident - current task SUCCESSFUL" + ); + + RTEMS.TASK_IDENT( + 100, + RTEMS.SEARCH_ALL_NODES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "TASK_IDENT WITH ILLEGAL NAME (local)" + ); + TEXT_IO.PUT_LINE( "TA1 - task_ident - global INVALID_NAME" ); + + RTEMS.TASK_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "TASK_IDENT WITH ILLEGAL NAME (global)" + ); + TEXT_IO.PUT_LINE( "TA1 - task_ident - local INVALID_NAME" ); + + RTEMS.TASK_IDENT( 100, 2, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NODE, + "TASK_IDENT WITH ILLEGAL NODE" + ); + TEXT_IO.PUT_LINE( "TA1 - task_ident - INVALID_NODE" ); + + RTEMS.TASK_RESTART( 100, 0, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_RESTART WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_restart - INVALID_ID" ); + + RTEMS.TASK_RESUME( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_RESUME WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_resume - INVALID_ID" ); + + RTEMS.TASK_RESUME( RTEMS.SELF, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INCORRECT_STATE, + "TASK_RESUME OF READY TASK" + ); + TEXT_IO.PUT_LINE( "TA1 - task_resume - INCORRECT_STATE" ); + +-- RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 512, PREVIOUS_PRIORITY, STATUS ); +-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( +-- STATUS, +-- RTEMS.INVALID_PRIORITY, +-- "TASK_SET_PRIORITY WITH ILLEGAL PRIORITY" +-- ); +-- TEXT_IO.PUT_LINE( +-- "TA1 - task_set_priority - INVALID_PRIORITY" +-- ); + TEXT_IO.PUT_LINE( + "TA1 - task_set_priority - INVALID_PRIORITY -- constraint error" + ); + + RTEMS.TASK_SET_PRIORITY( 100, 8, PREVIOUS_PRIORITY, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_SET_PRIORITY WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_set_priority - INVALID_ID" ); + +-- RTEMS.TASK_SET_NOTE( RTEMS.SELF, +-- RTEMS.NOTEPAD_INDEX'LAST + 10, +-- NOTEPAD_VALUE, +-- STATUS +-- ); +-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( +-- STATUS, +-- RTEMS.INVALID_NUMBER, +-- "TASK_SET_NOTE WITH ILLEGAL NOTEPAD" +-- ); +-- TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_NUMBER" ); + TEXT_IO.PUT_LINE( + "TA1 - task_set_note - INVALID_NUMBER -- constraint error" + ); + + RTEMS.TASK_SET_NOTE( + 100, + RTEMS.NOTEPAD_INDEX'LAST, + NOTEPAD_VALUE, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_SET_NOTE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_ID" ); + + RTEMS.TASK_START( 100, SPTEST.TASK_1'ACCESS, 0, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_START WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_start - INVALID_ID" ); + + RTEMS.TASK_START( RTEMS.SELF, SPTEST.TASK_1'ACCESS, 0, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INCORRECT_STATE, + "TASK_START OF READY TASK" + ); + TEXT_IO.PUT_LINE( "TA1 - task_start - INCORRECT_STATE" ); + + RTEMS.TASK_SUSPEND( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_SUSPEND WITH INVALID ID" + ); + TEXT_IO.PUT_LINE( "TA1 - task_suspend - INVALID_ID" ); + + end SCREEN_1; + +--PAGE +-- +-- SCREEN_2 +-- + + procedure SCREEN_2 + is + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + +-- errors before clock is set + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + + if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then + TEXT_IO.PUT_LINE( + "TA1 - clock_get - NOT_DEFINED -- DID THE BSP SET THE TIME OF DAY?" + ); + else + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "CLOCK_GET BEFORE CLOCK IS SET" + ); + TEXT_IO.PUT_LINE( "TA1 - clock_get - NOT_DEFINED" ); + end if; + + RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then + TEXT_IO.PUT( "TA1 - task_wake_when - NOT_DEFINED -- " ); + TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" ); + else + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "TASK_WAKE_WHEN BEFORE CLOCK IS SET" + ); + TEXT_IO.PUT_LINE( "TA1 - task_wake_when - NOT_DEFINED" ); + end if; + + RTEMS.TIMER_FIRE_WHEN( + 0, + TIME, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + + if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then + TEXT_IO.PUT( "TA1 - task_fire_when - NOT_DEFINED -- " ); + TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" ); + else + + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "TIMER_FIRE_WHEN BEFORE CLOCK IS SET" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - NOT_DEFINED" ); + + end if; + +-- invalid time of day field + + TIME := ( 1987, 2, 5, 8, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID YEAR" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 15, 5, 8, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID MONTH" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 32, 8, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID DAY" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 25, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID HOUR" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 8, 61, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID MINUTE" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 8, 30, 61, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID SECOND" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 8, 30, 45, TEST_SUPPORT.TICKS_PER_SECOND + 1 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "CLOCK_SET WITH INVALID TICKS PER SECOND" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 8, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEXT_IO.PUT_LINE( " - SUCCESSFUL" ); + +-- task_wake_when + + TIME := ( 1988, 2, 5, 8, 30, 48, TEST_SUPPORT.TICKS_PER_SECOND + 1 ); + TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " ); + TEXT_IO.PUT_LINE( "sleep about 3 seconds" ); + RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "TASK_WAKE_WHEN WITH INVALID TICKS PER SECOND" + ); + TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " ); + TEXT_IO.PUT_LINE( "woke up SUCCESSFUL" ); + + TIME := ( 1961, 2, 5, 8, 30, 48, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" ); + RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "TASK_WAKE_WHEN WITH INVALID YEAR" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + TIME := ( 1988, 2, 5, 25, 30, 48, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" ); + RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "TASK_WAKE_WHEN WITH INVALID HOUR" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( "TA1 - current time - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + TIME.MONTH := 1; + TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" ); + RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "TASK_WAKE_WHEN BEFORE CURRENT TIME" + ); + TEXT_IO.PUT_LINE( " - INVALID_CLOCK" ); + + end SCREEN_2; + +--PAGE +-- +-- SCREEN_3 +-- + + procedure SCREEN_3 + is + TASK_NAME : RTEMS.NAME; + STATUS : RTEMS.STATUS_CODES; + begin + + TASK_NAME := 1; + + RTEMS.TASK_CREATE( + 0, + 1, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "TASK_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - INVALID_NAME" + ); + + RTEMS.TASK_CREATE( + TASK_NAME, + 1, + BSP.CONFIGURATION.WORKSPACE_SIZE, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "TASK_CREATE WITH A STACK SIZE LARGER THAN THE WORKSPACE" + ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - stack size - UNSATISFIED" + ); + + 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" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - TA2 created - SUCCESSFUL" + ); + + RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" ); + TEXT_IO.PUT_LINE( + "TA1 - task_suspend - suspend TA2 - SUCCESSFUL" + ); + + RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.ALREADY_SUSPENDED, + "TASK_SUSPEND ON SUSPENDED TA2" + ); + TEXT_IO.PUT_LINE( + "TA1 - task_suspend - suspend TA2 - ALREADY_SUSPENDED" + ); + + RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" ); + TEXT_IO.PUT_LINE( + "TA1 - task_resume - TA2 resumed - SUCCESSFUL" + ); + + 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" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - TA3 created - SUCCESSFUL" + ); + + 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" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 4 created - SUCCESSFUL" + ); + + 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" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 5 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 6 ), + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 6 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA6" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 6 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 7 ), + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 7 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA7" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 7 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 8 ), + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 8 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA8" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 8 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 9 ), + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 9 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA9" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 9 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( 10 ), + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( 10 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA10" ); + TEXT_IO.PUT_LINE( + "TA1 - task_create - 10 created - SUCCESSFUL" + ); + + RTEMS.TASK_CREATE( + TASK_NAME, + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "TASK_CREATE FOR TOO MANY TASKS" + ); + TEXT_IO.PUT_LINE( "TA1 - task_create - 11 - TOO_MANY" ); + + RTEMS.TASK_CREATE( + TASK_NAME, + 4, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.GLOBAL, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.MP_NOT_CONFIGURED, + "TASK_CREATE OF GLOBAL TASK IN SINGLE CPU SYSTEM" + ); + TEXT_IO.PUT_LINE( "TA1 - task_create - MP_NOT_CONFIGURED" ); + + end SCREEN_3; + +--PAGE +-- +-- SCREEN_4 +-- + + procedure SCREEN_4 + is + EVENT_OUT : RTEMS.EVENT_SET; + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.EVENT_RECEIVE( + RTEMS.EVENT_16, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "EVENT_RECEIVE UNSATISFIED (ALL)" + ); + TEXT_IO.PUT_LINE( + "TA1 - event_receive - UNSATISFIED ( all conditions )" + ); + + RTEMS.EVENT_RECEIVE( + RTEMS.EVENT_16, + RTEMS.NO_WAIT + RTEMS.EVENT_ANY, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "EVENT_RECEIVE UNSATISFIED (ANY)" + ); + TEXT_IO.PUT_LINE( + "TA1 - event_receive - UNSATISFIED ( any conditions )" + ); + + TEXT_IO.PUT_LINE( "TA1 - event_receive - timeout in 3 seconds" ); + RTEMS.EVENT_RECEIVE( + RTEMS.EVENT_16, + RTEMS.DEFAULT_OPTIONS, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + EVENT_OUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TIMEOUT, + "EVENT_RECEIVE AFTER 3 SECOND TIMEOUT" + ); + TEXT_IO.PUT_LINE( + "TA1 - event_receive - woke with TIMEOUT" + ); + + RTEMS.EVENT_SEND( + 100, + RTEMS.EVENT_16, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "EVENT_SEND WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - event_send - INVALID_ID" + ); + + TEXT_IO.PUT_LINE( + "TA1 - task_wake_after - sleep 1 second - SUCCESSFUL" + ); + RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (1 SECOND)" ); + + TIME := ( 1988, 2, 5, 8, 30, 45, 0 ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEXT_IO.PUT_LINE( " - SUCCESSFUL" ); + + end SCREEN_4; + +--PAGE +-- +-- SCREEN_5 +-- + + procedure SCREEN_5 + is + COUNT : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_CREATE( + 0, + 1, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "SEMAPHORE_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_create - INVALID_NAME" ); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 1 ), + 1, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.SEMAPHORE_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "SEMAPHORE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 1 - SUCCESSFUL" ); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 2 ), + 1, + RTEMS.BINARY_SEMAPHORE, + SPTEST.SEMAPHORE_ID( 2 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "SEMAPHORE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 2 - SUCCESSFUL" ); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 3 ), + 1, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "SEMAPHORE_CREATE OF TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 3 - TOO_MANY" ); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 1 ), + 1, + RTEMS.INHERIT_PRIORITY + RTEMS.BINARY_SEMAPHORE + RTEMS.FIFO, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "SEMAPHORE_CREATE OF FIFO INHERIT PRIORITY" + ); + TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED"); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 1 ), + 1, + RTEMS.INHERIT_PRIORITY + RTEMS.COUNTING_SEMAPHORE + RTEMS.PRIORITY, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "SEMAPHORE_CREATE OF COUNTING_SEMAPHORE INHERIT PRIORITY" + ); + TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED"); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 1 ), + 2, + RTEMS.BINARY_SEMAPHORE, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "SEMAPHORE_CREATE OF BINARY_SEMAPHORE with COUNT > 1" + ); + TEXT_IO.PUT_LINE("TA1 - semaphore_create - INVALID_NUMBER"); + + RTEMS.SEMAPHORE_CREATE( + SPTEST.SEMAPHORE_NAME( 3 ), + 1, + RTEMS.GLOBAL, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.MP_NOT_CONFIGURED, + "SEMAPHORE_CREATE OF MP_NOT_CONFIGURED" + ); + TEXT_IO.PUT_LINE("TA1 - semaphore_create - MP_NOT_CONFIGURED"); + + RTEMS.SEMAPHORE_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "SEMAPHORE_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_delete - unknown INVALID_ID" + ); + + RTEMS.SEMAPHORE_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "SEMAPHORE_DELETE WITH LOCAL ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_delete - local INVALID_ID" + ); + + RTEMS.SEMAPHORE_IDENT( + 100, + RTEMS.SEARCH_ALL_NODES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "SEMAPHORE_IDENT WITH ILLEGAL NAME (local)" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_ident - global INVALID_NAME" + ); + + RTEMS.SEMAPHORE_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "SEMAPHORE_IDENT WITH ILLEGAL NAME (global)" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_ident - local INVALID_NAME" + ); + + end SCREEN_5; + +--PAGE +-- +-- SCREEN_6 +-- + + procedure SCREEN_6 + is + COUNT : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_OBTAIN( + 100, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "SEMAPHORE_OBTAIN WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - INVALID_ID" ); + + RTEMS.SEMAPHORE_OBTAIN( + SPTEST.SEMAPHORE_ID( 1 ), + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED(STATUS, "SEMAPHORE_OBTAIN SUCCESSFUL"); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_obtain - got sem 1 - SUCCESSFUL" + ); + + RTEMS.SEMAPHORE_OBTAIN( + SPTEST.SEMAPHORE_ID( 1 ), + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "SEMAPHORE_OBTAIN NOT AVAILABLE" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - UNSATISFIED" ); + + TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - timeout in 3 seconds" ); + RTEMS.SEMAPHORE_OBTAIN( + SPTEST.SEMAPHORE_ID( 1 ), + RTEMS.DEFAULT_OPTIONS, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TIMEOUT, + "SEMAPHORE_OBTAIN NOT AVAILABLE" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_obtain - woke with TIMEOUT" + ); + + RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_OWNER_OF_RESOURCE, + "SEMAPHORE_RELEASE AND NOT OWNER" + ); + TEXT_IO.PUT_LINE( + "TA1 - semaphore_release - NOT_OWNER_OF_RESOURCE" + ); + + RTEMS.SEMAPHORE_RELEASE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "SEMAPHORE_RELEASE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - semaphore_release - INVALID_ID" ); + + TEXT_IO.PUT_LINE( + "TA1 - task_start - start TA2 - SUCCESSFUL" + ); + RTEMS.TASK_START( + SPTEST.TASK_ID( 2 ), + SPTEST.TASK_2'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" ); + + TEXT_IO.PUT_LINE( + "TA1 - task_wake_after - yield processor - SUCCESSFUL" + ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" ); + + TEXT_IO.PUT_LINE( + "TA1 - semaphore_delete - delete sem 1 - SUCCESSFUL" + ); + RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" ); + + TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - binary semaphore" ); + RTEMS.SEMAPHORE_OBTAIN( + SPTEST.SEMAPHORE_ID( 2 ), + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" ); + + TEXT_IO.PUT_LINE( + "TA1 - semaphore_delete - delete sem 2 - RESOURCE_IN_USE" + ); + RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.RESOURCE_IN_USE, + "SEMAPHORE_DELETE OF SM2" + ); + + TEXT_IO.PUT_LINE( + "TA1 - task_wake_after - yield processor - SUCCESSFUL" + ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" ); + + RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TASK_DELETE AFTER THE TASK HAS BEEN DELETED" + ); + TEXT_IO.PUT_LINE( + "TA1 - task_delete TA2 - already deleted INVALID_ID" + ); + + end SCREEN_6; + +--PAGE +-- +-- SCREEN_7 +-- + + procedure SCREEN_7 + is + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + COUNT : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.MESSAGE_QUEUE_BROADCAST( + 100, + BUFFER_POINTER, + COUNT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_BROADCAST WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_broadcast - INVALID_ID" + ); + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + RTEMS.MESSAGE_QUEUE_CREATE( + 0, + 3, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "MESSAGE_QUEUE_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - INVALID_NAME" + ); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 1 ), + 1, + RTEMS.GLOBAL, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.MP_NOT_CONFIGURED, + "MESSAGE_QUEUE_CREATE OF MP NOT CONFIGURED" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - MP_NOT_CONFIGURED"); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 1 ), + 2, + RTEMS.LIMIT, + SPTEST.QUEUE_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 2 ), + 1, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "MESSAGE_QUEUE_CREATE OF TOO MANY" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 2 - TOO_MANY" + ); + + RTEMS.MESSAGE_QUEUE_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - unknown INVALID_ID" + ); + + RTEMS.MESSAGE_QUEUE_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_DELETE WITH LOCAL ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - local INVALID_ID" + ); + + RTEMS.MESSAGE_QUEUE_IDENT( + 100, + RTEMS.SEARCH_ALL_NODES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "MESSAGE_QUEUE_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - message_queue_ident - INVALID_NAME" ); + + RTEMS.MESSAGE_QUEUE_FLUSH( 100, COUNT, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_FLUSH WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - INVALID_ID" ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + 100, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_RECEIVE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - message_queue_receive - INVALID_ID" ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "MESSAGE_QUEUE_RECEIVE UNSATISFIED" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_receive - Q 1 - UNSATISFIED" + ); + + TEXT_IO.PUT_LINE( + "TA1 - message_queue_receive - Q 1 - timeout in 3 seconds" + ); + RTEMS.MESSAGE_QUEUE_RECEIVE( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TIMEOUT, + "MESSAGE_QUEUE_RECEIVE 3 SECOND TIMEOUT" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_receive - Q 1 - woke up with TIMEOUT" + ); + + RTEMS.MESSAGE_QUEUE_SEND( 100, BUFFER_POINTER, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "MESSAGE_QUEUE_SEND WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - message_queue_send - INVALID_ID" ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY" + ); + + end SCREEN_7; + +--PAGE +-- +-- SCREEN_8 +-- + + procedure SCREEN_8 + is + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_DELETE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 1 ), + 2, + RTEMS.LIMIT, + SPTEST.QUEUE_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY" + ); + + RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_DELETE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 1 ), + 3, + RTEMS.LIMIT, + SPTEST.QUEUE_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_SEND( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_send - BUFFER 3 TO Q 1 - UNSATISFIED" + ); + + RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_DELETE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - Q 1 - SUCCESSFUL" + ); + + RTEMS.MESSAGE_QUEUE_CREATE( + SPTEST.QUEUE_NAME( 1 ), + 2, + RTEMS.LIMIT, + SPTEST.QUEUE_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_CREATE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL" + ); + + TEXT_IO.PUT_LINE( + "TA1 - task_start - start TA3 - SUCCESSFUL" + ); + 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( + "TA1 - task_wake_after - yield processor - SUCCESSFUL" + ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" ); + + RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "MESSAGE_QUEUE_DELETE SUCCESSFUL" + ); + TEXT_IO.PUT_LINE( + "TA1 - message_queue_delete - delete Q 1 - SUCCESSFUL" + ); + + TEXT_IO.PUT_LINE( + "TA1 - task_wake_after - yield processor - SUCCESSFUL" + ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" ); + + end SCREEN_8; + +--PAGE +-- +-- SCREEN_9 +-- + + procedure SCREEN_9 + is + CONVERTED : RTEMS.ADDRESS; + STATUS : RTEMS.STATUS_CODES; + OLD_SERVICE_ROUTINE : RTEMS.ADDRESS; + begin + +-- RTEMS.INTERRUPT_CATCH( +-- SPTEST.SERVICE_ROUTINE'ACCESS, +-- 500, +-- OLD_SERVICE_ROUTINE, +-- STATUS +-- ); +-- TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( +-- STATUS, +-- RTEMS.INVALID_NUMBER, +-- "INTERRUPT_CATCH WITH INVALID VECTOR" +-- ); +-- TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_NUMBER" ); + TEXT_IO.PUT_LINE( + "TA1 - interrupt_catch - INVALID_NUMBER -- constraint error" + ); + + RTEMS.INTERRUPT_CATCH( + RTEMS.NULL_ADDRESS, + 3, + OLD_SERVICE_ROUTINE, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "INTERRUPT_CATCH WITH INVALID HANDLER" + ); + TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_ADDRESS" ); + + RTEMS.SIGNAL_SEND( 100, RTEMS.SIGNAL_1, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "SIGNAL_SEND WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - signal_send - INVALID_ID" ); + + RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "SIGNAL_SEND WITH NO HANDLER" + ); + TEXT_IO.PUT_LINE( "TA1 - signal_send - NOT_DEFINED" ); + + RTEMS.PORT_CREATE( + 0, + SPTEST.INTERNAL_PORT_AREA'ADDRESS, + SPTEST.EXTERNAL_PORT_AREA'ADDRESS, + SPTEST.INTERNAL_PORT_AREA'LENGTH, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "PORT_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_NAME" ); + + RTEMS.PORT_CREATE( + SPTEST.PORT_NAME( 1 ), + SPTEST.INTERNAL_PORT_AREA( 1 )'ADDRESS, + SPTEST.EXTERNAL_PORT_AREA'ADDRESS, + SPTEST.INTERNAL_PORT_AREA'LENGTH, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "PORT_CREATE WITH ILLEGAL ADDRESS" + ); + TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_ADDRESS" ); + + RTEMS.PORT_CREATE( + SPTEST.PORT_NAME( 1 ), + SPTEST.INTERNAL_PORT_AREA'ADDRESS, + SPTEST.EXTERNAL_PORT_AREA'ADDRESS, + SPTEST.INTERNAL_PORT_AREA'LENGTH, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "PORT_CREATE OF TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - port_create - TOO_MANY" ); + + RTEMS.PORT_DELETE( 0, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PORT_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - port_delete - INVALID_ID" ); + + RTEMS.PORT_IDENT( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "PORT_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - port_ident - INVALID_NAME" ); + + RTEMS.PORT_INTERNAL_TO_EXTERNAL( + 100, + SPTEST.INTERNAL_PORT_AREA'ADDRESS, + CONVERTED, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PORT_INTERNAL_TO_EXTERNAL WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - port_internal_to_external - INVALID_ID" + ); + + RTEMS.PORT_EXTERNAL_TO_INTERNAL( + 100, + SPTEST.EXTERNAL_PORT_AREA'ADDRESS, + CONVERTED, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PORT_EXTERNAL_TO_INTERNAL WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - port_external_to_internal - INVALID_ID" + ); + + end SCREEN_9; + +--PAGE +-- +-- SCREEN_10 +-- + + procedure SCREEN_10 + is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.RATE_MONOTONIC_CREATE( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "RATE_MONOTONIC_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_create - INVALID_NAME" + ); + + RTEMS.RATE_MONOTONIC_CREATE( + SPTEST.PERIOD_NAME( 1 ), + SPTEST.PERIOD_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_create - SUCCESSFUL" + ); + + RTEMS.RATE_MONOTONIC_CREATE( + SPTEST.PERIOD_NAME( 1 ), + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "RATE_MONOTONIC_CREATE FOR TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_create - TOO_MANY" ); + + RTEMS.RATE_MONOTONIC_IDENT( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "RATE_MONOTONIC_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_ident - INVALID_NAME" + ); + + RTEMS.RATE_MONOTONIC_PERIOD( 100, 5, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_period - unknown INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_PERIOD( 16#10100#, 5, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_period - local INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_PERIOD( + SPTEST.PERIOD_ID( 1 ), + RTEMS.PERIOD_STATUS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "RATE_MONOTONIC_PERIOD STATUS NOT DEFINED" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_period( STATUS ) - NOT_DEFINED" + ); + + RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 100, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "RATE_MONOTONIC_PERIOD 100 TICKS" + ); + TEXT_IO.PUT( "TA1 - rate_monotonic_period - 100 ticks - " ); + TEXT_IO.PUT_LINE( "SUCCESSFUL" ); + + RTEMS.RATE_MONOTONIC_PERIOD( + SPTEST.PERIOD_ID( 1 ), + RTEMS.PERIOD_STATUS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "RATE_MONOTONIC_PERIOD STATUS" + ); + TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " ); + TEXT_IO.PUT_LINE( "SUCCESSFUL" ); + + loop + + RTEMS.RATE_MONOTONIC_PERIOD( + SPTEST.PERIOD_ID( 1 ), + RTEMS.PERIOD_STATUS, + STATUS + ); + + exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT ); + + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "RATE_MONOTONIC_PERIOD STATUS WAITING FOR TIMEOUT" + ); + + end loop; + TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " ); + TEXT_IO.PUT_LINE( "TIMEOUT" ); + + RTEMS.RATE_MONOTONIC_CANCEL( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_cancel - unknown INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_CANCEL( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_cancel - local INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_CANCEL( SPTEST.PERIOD_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CANCEL" ); + TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_cancel - SUCCESSFUL" ); + + RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( + STATUS, + "RATE_MONOTONIC_PERIOD RESTART" + ); + + RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TIMEOUT, + "RATE_MONOTONIC_PERIOD TIMED OUT" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_period - 5 ticks - TIMEOUT" + ); + + RTEMS.TASK_START( + SPTEST.TASK_ID( 4 ), + SPTEST.TASK_4'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" ); + + TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yielding to TA4" ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" ); + + RTEMS.RATE_MONOTONIC_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_delete - unknown INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "RATE_MONOTONIC_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_delete - local INVALID_ID" + ); + + RTEMS.RATE_MONOTONIC_DELETE( SPTEST.PERIOD_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_DELETE" ); + TEXT_IO.PUT_LINE( + "TA1 - rate_monotonic_delete - SUCCESSFUL" + ); + + end SCREEN_10; + +--PAGE +-- +-- SCREEN_11 +-- + + procedure SCREEN_11 + is + BUFFER_ADDRESS_1 : RTEMS.ADDRESS; + BUFFER_ADDRESS_2 : RTEMS.ADDRESS; + BUFFER_ADDRESS_3 : RTEMS.ADDRESS; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.PARTITION_CREATE( + 0, + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 40, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "PARTITION_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_NAME" ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 0, + 80, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "PARTITION_CREATE WITH ILLEGAL LENGTH" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_create - length - INVALID_SIZE" + ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 0, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "PARTITION_CREATE WITH ILLEGAL BUFFER_SIZE" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_create - buffer size - INVALID_SIZE" + ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 256, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "PARTITION_CREATE WITH BUFFER_SIZE > LENGTH" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_create - length < buffer size - INVALID_SIZE" + ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 64, + RTEMS.GLOBAL, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.MP_NOT_CONFIGURED, + "PARTITION_CREATE OF GLOBAL" + ); + TEXT_IO.PUT_LINE("TA1 - partition_create - MP_NOT_CONFIGURED"); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_BAD_AREA'ADDRESS, + 128, + 64, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "PARTITION_CREATE WITH BAD ADDRESS" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_ADDRESS" ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 34, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "PARTITION_CREATE WITH UNALIGNED BUFFER_SIZE" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_SIZE" ); + + RTEMS.PARTITION_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PARTITION_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_delete - unknown INVALID_ID" + ); + + RTEMS.PARTITION_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PARTITION_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_delete - local INVALID_ID" + ); + + RTEMS.PARTITION_GET_BUFFER( 100, BUFFER_ADDRESS_1, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PARTITION_GET_BUFFER WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - INVALID_ID" ); + + RTEMS.PARTITION_IDENT( + 0, + RTEMS.SEARCH_ALL_NODES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "PARTITION_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_ident - INVALID_NAME" ); + + RTEMS.PARTITION_RETURN_BUFFER( 100, BUFFER_ADDRESS_1, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "PARTITION_RETURN WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - partition_return_buffer - INVALID_ID" + ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 64, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.PARTITION_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" ); + TEXT_IO.PUT_LINE( "TA1 - partition_create - SUCCESSFUL" ); + + RTEMS.PARTITION_CREATE( + SPTEST.PARTITION_NAME( 1 ), + SPTEST.PARTITION_GOOD_AREA'ADDRESS, + 128, + 64, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "PARTITION_CREATE OF TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_create - TOO_MANY" ); + + RTEMS.PARTITION_GET_BUFFER( + SPTEST.PARTITION_ID( 1 ), + BUFFER_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" ); + TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" ); + + RTEMS.PARTITION_GET_BUFFER( + SPTEST.PARTITION_ID( 1 ), + BUFFER_ADDRESS_2, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" ); + TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" ); + + RTEMS.PARTITION_GET_BUFFER( + SPTEST.PARTITION_ID( 1 ), + BUFFER_ADDRESS_3, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "PARTITION_GET_BUFFER UNSATISFIED" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - UNSATISFIED" ); + + RTEMS.PARTITION_DELETE( + SPTEST.PARTITION_ID( 1 ), + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.RESOURCE_IN_USE, + "PARTITION_DELETE WITH BUFFERS IN USE" + ); + TEXT_IO.PUT_LINE( "TA1 - partition_delete - RESOURCE_IN_USE" ); + + RTEMS.PARTITION_RETURN_BUFFER( + SPTEST.PARTITION_ID( 1 ), + SPTEST.REGION_GOOD_AREA( 0 )'ADDRESS, -- NOTE: REGION + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "PARTITION_RETURN WITH BUFFER ADDRESS OUT OF PARTITION" + ); + TEXT_IO.PUT( "TA1 - partition_return_buffer - " ); + TEXT_IO.PUT_LINE( "INVALID_ADDRESS - out of range" ); + + RTEMS.PARTITION_RETURN_BUFFER( + SPTEST.PARTITION_ID( 1 ), + SPTEST.PARTITION_GOOD_AREA( 7 )'ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "PARTITION_RETURN WITH BUFFER ADDRESS NOT ON BOUNDARY" + ); + TEXT_IO.PUT( "TA1 - partition_return_buffer - " ); + TEXT_IO.PUT_LINE( "INVALID_ADDRESS - not on boundary" ); + + + end SCREEN_11; + +--PAGE +-- +-- SCREEN_12 +-- + + procedure SCREEN_12 + is + SEGMENT_ADDRESS_1 : RTEMS.ADDRESS; + SEGMENT_ADDRESS_2 : RTEMS.ADDRESS; + SEGMENT_ADDRESS_3 : RTEMS.ADDRESS; + OFFSET : RTEMS.UNSIGNED32; + GOOD_FRONT_FLAG : RTEMS.UNSIGNED32; + GOOD_BACK_FLAG : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.REGION_CREATE( + 0, + SPTEST.REGION_GOOD_AREA'ADDRESS, + 128, + 32, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "REGION_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_NAME" ); + + RTEMS.REGION_CREATE( + SPTEST.REGION_NAME( 1 ), + SPTEST.REGION_BAD_AREA'ADDRESS, + 128, + 32, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "REGION_CREATE WITH ILLEGAL ADDRESS" + ); + TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_ADDRESS" ); + + RTEMS.REGION_CREATE( + SPTEST.REGION_NAME( 1 ), + SPTEST.REGION_GOOD_AREA'ADDRESS, + 128, + 34, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "REGION_CREATE WITH ILLEGAL SIZE" + ); + TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_SIZE" ); + + RTEMS.REGION_CREATE( + SPTEST.REGION_NAME( 1 ), + SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET )'ADDRESS, + SPTEST.REGION_LENGTH, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.REGION_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE" ); + TEXT_IO.PUT_LINE( "TA1 - region_create - SUCCESSFUL" ); + + RTEMS.REGION_CREATE( + SPTEST.REGION_NAME( 1 ), + SPTEST.REGION_GOOD_AREA'ADDRESS, + 128, + 32, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "REGION_CREATE FOR TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - region_create - TOO_MANY" ); + + RTEMS.REGION_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "REGION_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - region_delete - unknown INVALID_ID" ); + + RTEMS.REGION_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "REGION_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - region_delete - local INVALID_ID" ); + + RTEMS.REGION_IDENT( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "REGION_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - region_ident - INVALID_NAME" ); + + RTEMS.REGION_GET_SEGMENT( + 100, + 128, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "REGION_GET_SEGMENT WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_ID" ); + + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + RTEMS.UNSIGNED32'LAST, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_SIZE, + "REGION_GET_SEGMENT WITH ILLEGAL SIZE" + ); + TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_SIZE" ); + + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 384, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" ); + TEXT_IO.PUT_LINE( "TA1 - region_get_segment - SUCCESSFUL" ); + + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 384, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_2, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.UNSATISFIED, + "REGION_GET_SEGMENT UNSATISFIED" + ); + TEXT_IO.PUT_LINE( "TA1 - region_get_segment - UNSATISFIED" ); + + TEXT_IO.PUT_LINE( "TA1 - region_get_segment - timeout in 3 seconds" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 128, + RTEMS.DEFAULT_OPTIONS, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + SEGMENT_ADDRESS_3, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TIMEOUT, + "REGION_GET_SEGMENT TIMEOUT" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_get_segment - woke up with TIMEOUT" + ); + + RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.RESOURCE_IN_USE, + "REGION_DELETE WITH BUFFERS IN USE" + ); + TEXT_IO.PUT_LINE( "TA1 - region_delete - RESOURCE_IN_USE" ); + + RTEMS.REGION_RETURN_SEGMENT( + 100, + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "REGION_RETURN_SEGMENT WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - region_return_segment - INVALID_ID" ); + + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SPTEST.REGION_GOOD_AREA'ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "REGION_RETURN_SEGMENT WITH ILLEGAL SEGMENT" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_return_segment - INVALID_ADDRESS" + ); + + -- internal heap errors, subject to change if heap code changes + + TEXT_IO.PUT_LINE( "TA1 - debug_disable - DEBUG_REGION" ); + RTEMS.DEBUG_DISABLE( RTEMS.DEBUG_REGION ); + + OFFSET := RTEMS.SUBTRACT( + SEGMENT_ADDRESS_1, + SPTEST.REGION_GOOD_AREA'ADDRESS + ) / 4; + + -- bad FRONT_FLAG error + + GOOD_FRONT_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 1 ); + SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG + 2; + + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_return_segment - INVALID_ADDRESS" + ); + + SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG; + + -- bad BACK_FLAG error + + GOOD_BACK_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 2 ); + SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := 1024; + + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_return_segment - INVALID_ADDRESS" + ); + + SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := GOOD_BACK_FLAG; + + TEXT_IO.PUT_LINE( "TA1 - debug_enable - DEBUG_REGION" ); + RTEMS.DEBUG_ENABLE( RTEMS.DEBUG_REGION ); + + RTEMS.REGION_EXTEND( + 100, + SPTEST.REGION_GOOD_AREA'ADDRESS, + 128, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "REGION_EXTEND WITH INVALID_ID" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_extend - INVALID_ID" + ); + + RTEMS.REGION_EXTEND( + SPTEST.REGION_ID( 1 ), + SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET + 16 )'ADDRESS, + 128, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ADDRESS, + "REGION_EXTEND WITH INVALID_ADDRESS" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_extend - within heap - INVALID_ADDRESS" + ); + + RTEMS.REGION_EXTEND( + SPTEST.REGION_ID( 1 ), + SPTEST.REGION_BAD_AREA'ADDRESS, + 128, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_IMPLEMENTED, + "REGION_EXTEND WITH NOT_IMPLEMENTED" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_extend - non-contiguous lower - NOT_IMPLEMENTED" + ); + + RTEMS.REGION_EXTEND( + SPTEST.REGION_ID( 1 ), + SPTEST.REGION_GOOD_AREA( + SPTEST.REGION_START_OFFSET - SPTEST.REGION_LENGTH )'ADDRESS, + 128, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_IMPLEMENTED, + "REGION_EXTEND WITH NOT_IMPLEMENTED" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_extend - contiguous lower - NOT_IMPLEMENTED" + ); + + RTEMS.REGION_EXTEND( + SPTEST.REGION_ID( 1 ), + SPTEST.REGION_GOOD_AREA( + SPTEST.REGION_START_OFFSET + SPTEST.REGION_LENGTH + 16 )'ADDRESS, + 128, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_IMPLEMENTED, + "REGION_EXTEND WITH NOT_IMPLEMENTED" + ); + TEXT_IO.PUT_LINE( + "TA1 - region_extend - non-contiguous higher - NOT_IMPLEMENTED" + ); + + end SCREEN_12; + +--PAGE +-- +-- SCREEN_13 +-- + + procedure SCREEN_13 + is + RESULT : RTEMS.UNSIGNED32; + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.IO_CLOSE( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_CLOSE WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE("TA1 - io_close - INVALID_NUMBER"); + + RTEMS.IO_CONTROL( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_CONTROL WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE( + "TA1 - io_control - INVALID_NUMBER" + ); + + RTEMS.IO_INITIALIZE( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_INITIALIZE WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE( + "TA1 - io_initialize - INVALID_NUMBER" + ); + + RTEMS.IO_OPEN( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_OPEN WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE( "TA1 - io_open - INVALID_NUMBER" ); + + RTEMS.IO_READ( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_READ WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE( "TA1 - io_read - INVALID_NUMBER" ); + + RTEMS.IO_WRITE( + RTEMS.DEVICE_MAJOR_NUMBER'LAST, + 0, + RTEMS.NULL_ADDRESS, + RESULT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_WRITE WITH BAD MAJOR NUMBER" + ); + TEXT_IO.PUT_LINE( "TA1 - io_write - INVALID_NUMBER" ); + + TIME := ( 2000, 12, 31, 23, 59, 59, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_set - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + 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 SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_get - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + + TIME := ( 1999, 12, 31, 23, 59, 59, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_set - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + 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 SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_get - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + + TIME := ( 2100, 12, 31, 23, 59, 59, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_set - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + 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 SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_get - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + + TIME := ( 2099, 12, 31, 23, 59, 59, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_set - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + 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 SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_get - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + + TIME := ( 1991, 12, 31, 23, 59, 59, 0 ); + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_set - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + 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 SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - clock_get - ", + TIME, + " - SUCCESSFUL" + ); + TEXT_IO.NEW_LINE; + + end SCREEN_13; + +--PAGE +-- +-- SCREEN_14 +-- + + procedure SCREEN_14 + is + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TIMER_CREATE( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "TIMER_CREATE WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_create - INVALID_NAME" ); + + RTEMS.TIMER_CREATE( + SPTEST.TIMER_NAME( 1 ), + SPTEST.TIMER_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" ); + TEXT_IO.PUT_LINE( "TA1 - timer_create - 1 - SUCCESSFUL" ); + + RTEMS.TIMER_CREATE( + SPTEST.TIMER_NAME( 1 ), + SPTEST.JUNK_ID, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.TOO_MANY, + "TIMER_CREATE FOR TOO MANY" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_create - 2 - TOO_MANY" ); + + RTEMS.TIMER_DELETE( 100, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_delete - local INVALID_ID" ); + + RTEMS.TIMER_DELETE( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_DELETE WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_delete - global INVALID_ID" ); + + RTEMS.TIMER_IDENT( 0, SPTEST.JUNK_ID, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NAME, + "TIMER_IDENT WITH ILLEGAL NAME" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_ident - INVALID_NAME" ); + + RTEMS.TIMER_CANCEL( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_CANCEL WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_cancel - INVALID_ID" ); + + RTEMS.TIMER_RESET( 16#10100#, STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_RESET WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_reset - INVALID_ID" ); + + RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_DEFINED, + "TIMER_RESET BEFORE INITIATED" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_reset - NOT_DEFINED" ); + + RTEMS.TIMER_FIRE_AFTER( + 16#10100#, + 5 * TEST_SUPPORT.TICKS_PER_SECOND, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_FIRE_AFTER WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_ID" ); + + TIME := ( 1994, 12, 31, 1, 0, 0, 0 ); + RTEMS.TIMER_FIRE_WHEN( + 16#10100#, + TIME, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_ID, + "TIMER_FIRE_WHEN WITH ILLEGAL ID" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - INVALID_ID" ); + + RTEMS.TIMER_FIRE_AFTER( + SPTEST.TIMER_ID( 1 ), + 0, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "TIMER_FIRE_AFTER WITH 0 TICKS" + ); + TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_NUMBER" ); + + TIME := ( 1987, 2, 5, 8, 30, 45, 0 ); + RTEMS.TIMER_FIRE_WHEN( + SPTEST.TIMER_ID( 1 ), + TIME, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "TIMER_FIRE_WHEN WITH ILLEGAL TIME" + ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - timer_fire_when - ", + TIME, + " - INVALID_CLOCK" + ); + TEXT_IO.NEW_LINE; + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" ); + TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + TIME := ( 1990, 2, 5, 8, 30, 45, 0 ); + RTEMS.TIMER_FIRE_WHEN( + SPTEST.TIMER_ID( 1 ), + TIME, + SPTEST.DELAYED_SUBPROGRAM'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_CLOCK, + "TIMER_FIRE_WHEN BEFORE CURRENT TIME" + ); + TEST_SUPPORT.PRINT_TIME( + "TA1 - timer_fire_when - ", + TIME, + " - before INVALID_CLOCK" + ); + TEXT_IO.NEW_LINE; + + end SCREEN_14; + +--PAGE +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + SPTEST.SCREEN_1; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 2 ); + + SPTEST.SCREEN_2; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 3 ); + + SPTEST.SCREEN_3; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 4 ); + + SPTEST.SCREEN_4; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 5 ); + + SPTEST.SCREEN_5; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 6 ); + + SPTEST.SCREEN_6; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 7 ); + + SPTEST.SCREEN_7; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 8 ); + + SPTEST.SCREEN_8; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 9 ); + + SPTEST.SCREEN_9; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 10 ); + + SPTEST.SCREEN_10; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 11 ); + + SPTEST.SCREEN_11; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 12 ); + + SPTEST.SCREEN_12; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 13 ); + + SPTEST.SCREEN_13; + TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 14 ); + + SPTEST.SCREEN_14; + + TEXT_IO.PUT_LINE( "*** END OF TEST 9 ***" ); + 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 - semaphore_obtain - sem 1 - WAIT FOREVER" ); + RTEMS.SEMAPHORE_OBTAIN( + SPTEST.SEMAPHORE_ID( 1 ), + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.OBJECT_WAS_DELETED, + "SEMAPHORE_OBTAIN WAITING TO BE DELETED" + ); + TEXT_IO.PUT_LINE( + "TA2 - semaphore_obtain - woke up with OBJECT_WAS_DELETED" + ); + + TEXT_IO.PUT_LINE( + "TA2 - task_delete - delete self - SUCCESSFUL" + ); + 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 + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + TEXT_IO.PUT_LINE( + "TA3 - message_queue_receive - Q 1 - WAIT FOREVER" + ); + RTEMS.MESSAGE_QUEUE_RECEIVE( + SPTEST.QUEUE_ID( 1 ), + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.OBJECT_WAS_DELETED, + "MESSAGE_QUEUE_RECEIVE WAITING TO BE DELETED" + ); + TEXT_IO.PUT( "TA3 - message_queue_receive - woke up " ); + TEXT_IO.PUT_LINE( "with OBJECT_WAS_DELETED" ); + + TEXT_IO.PUT_LINE( + "TA3 - task_delete - delete self - SUCCESSFUL" + ); + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" ); + + end TASK_3; + +--PAGE +-- +-- TASK_4 +-- + + procedure TASK_4 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.RATE_MONOTONIC_CANCEL( + SPTEST.PERIOD_ID( 1 ), + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_OWNER_OF_RESOURCE, + "RATE_MONOTONIC_CANCEL NOT THE OWNER" + ); + TEXT_IO.PUT_LINE( + "TA4 - rate_monotonic_cancel - NOT_OWNER_OF_RESOURCE" + ); + + RTEMS.RATE_MONOTONIC_PERIOD( + SPTEST.PERIOD_ID( 1 ), + 5, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.NOT_OWNER_OF_RESOURCE, + "RATE_MONOTONIC_PERIOD NOT THE OWNER" + ); + TEXT_IO.PUT_LINE( + "TA4 - rate_monotonic_period - NOT_OWNER_OF_RESOURCE" + ); + + TEXT_IO.PUT_LINE( + "TA4 - task_delete - delete self - SUCCESSFUL" + ); + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" ); + + + end TASK_4; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp09/sptest.ads b/c/src/ada-tests/sptests/sp09/sptest.ads new file mode 100644 index 0000000000..a0c14acc7c --- /dev/null +++ b/c/src/ada-tests/sptests/sp09/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp11/sptest.adb b/c/src/ada-tests/sptests/sp11/sptest.adb new file mode 100644 index 0000000000..b9a73a252f --- /dev/null +++ b/c/src/ada-tests/sptests/sp11/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp11/sptest.ads b/c/src/ada-tests/sptests/sp11/sptest.ads new file mode 100644 index 0000000000..e8807321f6 --- /dev/null +++ b/c/src/ada-tests/sptests/sp11/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp12/sptest.adb b/c/src/ada-tests/sptests/sp12/sptest.adb new file mode 100644 index 0000000000..5f6d83bcc9 --- /dev/null +++ b/c/src/ada-tests/sptests/sp12/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp12/sptest.ads b/c/src/ada-tests/sptests/sp12/sptest.ads new file mode 100644 index 0000000000..e4529ce278 --- /dev/null +++ b/c/src/ada-tests/sptests/sp12/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp13/sptest.adb b/c/src/ada-tests/sptests/sp13/sptest.adb new file mode 100644 index 0000000000..75dfb69835 --- /dev/null +++ b/c/src/ada-tests/sptests/sp13/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp13/sptest.ads b/c/src/ada-tests/sptests/sp13/sptest.ads new file mode 100644 index 0000000000..12a2e83039 --- /dev/null +++ b/c/src/ada-tests/sptests/sp13/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp14/sptest.adb b/c/src/ada-tests/sptests/sp14/sptest.adb new file mode 100644 index 0000000000..5474f86677 --- /dev/null +++ b/c/src/ada-tests/sptests/sp14/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp14/sptest.ads b/c/src/ada-tests/sptests/sp14/sptest.ads new file mode 100644 index 0000000000..6e171a6382 --- /dev/null +++ b/c/src/ada-tests/sptests/sp14/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp15/sptest.adb b/c/src/ada-tests/sptests/sp15/sptest.adb new file mode 100644 index 0000000000..1254350e90 --- /dev/null +++ b/c/src/ada-tests/sptests/sp15/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp15/sptest.ads b/c/src/ada-tests/sptests/sp15/sptest.ads new file mode 100644 index 0000000000..0d17f4b17e --- /dev/null +++ b/c/src/ada-tests/sptests/sp15/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp16/sptest.adb b/c/src/ada-tests/sptests/sp16/sptest.adb new file mode 100644 index 0000000000..4b599f433d --- /dev/null +++ b/c/src/ada-tests/sptests/sp16/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp16/sptest.ads b/c/src/ada-tests/sptests/sp16/sptest.ads new file mode 100644 index 0000000000..d65ac4e09f --- /dev/null +++ b/c/src/ada-tests/sptests/sp16/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp17/sptest.adb b/c/src/ada-tests/sptests/sp17/sptest.adb new file mode 100644 index 0000000000..d1657307b6 --- /dev/null +++ b/c/src/ada-tests/sptests/sp17/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp17/sptest.ads b/c/src/ada-tests/sptests/sp17/sptest.ads new file mode 100644 index 0000000000..2f5a78a90c --- /dev/null +++ b/c/src/ada-tests/sptests/sp17/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp19/sptest.ads b/c/src/ada-tests/sptests/sp19/sptest.ads new file mode 100644 index 0000000000..14473462ac --- /dev/null +++ b/c/src/ada-tests/sptests/sp19/sptest.ads @@ -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; diff --git a/c/src/ada-tests/sptests/sp20/sptest.adb b/c/src/ada-tests/sptests/sp20/sptest.adb new file mode 100644 index 0000000000..0e754d8944 --- /dev/null +++ b/c/src/ada-tests/sptests/sp20/sptest.adb @@ -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; diff --git a/c/src/ada-tests/sptests/sp20/sptest.ads b/c/src/ada-tests/sptests/sp20/sptest.ads new file mode 100644 index 0000000000..df69c1a2b1 --- /dev/null +++ b/c/src/ada-tests/sptests/sp20/sptest.ads @@ -0,0 +1,160 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for 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.ads,v 1.3 1995/07/12 19:42:25 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 ( 1 .. 5 ) of RTEMS.ID; + TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME; + +-- +-- These arrays contain the parameters which define the execution +-- characteristics and periods of each instantiation of the +-- copies of the RTEMS task TASKS_1_THROUGH_5. +-- + + PERIODS : constant array ( 1 .. 5 ) + of RTEMS.UNSIGNED32 := ( 2, 2, 2, 2, 100 ); + + ITERATIONS : constant array ( 1 .. 5 ) + of RTEMS.UNSIGNED32 := ( 50, 50, 50, 50, 1 ); + + PRIORITIES : constant array ( 1 .. 5 ) + of RTEMS.UNSIGNED32 := ( 1, 1, 3, 4, 5 ); + +-- +-- The following type defines the array used to manage the +-- execution counts of each task's period. +-- + + type COUNT_ARRAY is array ( 1 .. 5 ) of RTEMS.UNSIGNED32; + +-- +-- These arrays contains the number of periods successfully completed +-- by each of the tasks. At each of its periods, the fifth task +-- will copy the contents of the COUNT array to TEMPORARY_COUNT, +-- and clear the COUNT array. The copy is performed to insure +-- that no periods fire while it is verifying the correctness +-- of the test's execution. +-- + + COUNT : SPTEST.COUNT_ARRAY; + TEMPORARY_COUNT : SPTEST.COUNT_ARRAY; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1_THROUGH_5 +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks test the Rate Monotonic Manager. +-- + + procedure TASK_1_THROUGH_5 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- GET_ALL_COUNTERS +-- +-- DESCRIPTION: +-- +-- This subprogram atomically copies the contents of COUNTER to +-- TEMPORARY_COUNTER. +-- + + procedure GET_ALL_COUNTERS; + +-- +-- 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 + 10, -- 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 + 10, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 50 -- # ticks in a timeslice + ); + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp21/sptest.adb b/c/src/ada-tests/sptests/sp21/sptest.adb new file mode 100644 index 0000000000..f2b9877acc --- /dev/null +++ b/c/src/ada-tests/sptests/sp21/sptest.adb @@ -0,0 +1,270 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 21 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:28 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 21 ***" ); + + 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 +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + RETURN_VALUE : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.PUT_LINE( "----- TESTING THE NULL DRIVER CHECKS -----" ); + + RTEMS.IO_INITIALIZE( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_initialize - NULL DRIVER SUCCESSFUL" + ); + + RTEMS.IO_OPEN( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" ); + TEXT_IO.PUT_LINE( + "TA1 - io_open - NULL DRIVER SUCCESSFUL" + ); + + RTEMS.IO_CLOSE( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_close - NULL DRIVER SUCCESSFUL" + ); + + RTEMS.IO_READ( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" ); + TEXT_IO.PUT_LINE( + "TA1 - io_read - NULL DRIVER SUCCESSFUL" + ); + + RTEMS.IO_WRITE( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_write - NULL DRIVER SUCCESSFUL" + ); + + RTEMS.IO_CONTROL( + SPTEST.NO_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" ); + TEXT_IO.PUT_LINE( + "TA1 - io_control - NULL DRIVER SUCCESSFUL" + ); + + TEXT_IO.PUT_LINE( "----- TESTING THE I/O MANAGER DIRECTIVES -----" ); + + RTEMS.IO_INITIALIZE( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_initialize - STUB DRIVER SUCCESSFUL" + ); + + RTEMS.IO_OPEN( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" ); + TEXT_IO.PUT_LINE( + "TA1 - io_open - STUB DRIVER SUCCESSFUL" + ); + + RTEMS.IO_CLOSE( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_close - STUB DRIVER SUCCESSFUL" + ); + + RTEMS.IO_READ( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" ); + TEXT_IO.PUT_LINE( + "TA1 - io_read - STUB DRIVER SUCCESSFUL" + ); + + RTEMS.IO_WRITE( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" ); + TEXT_IO.PUT_LINE( + "TA1 - io_write - STUB DRIVER SUCCESSFUL" + ); + + RTEMS.IO_CONTROL( + SPTEST.STUB_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" ); + TEXT_IO.PUT_LINE( + "TA1 - io_control - STUB DRIVER SUCCESSFUL" + ); + + TEXT_IO.PUT_LINE( "----- RETURNING INVALID MAJOR NUMBER -----" ); + + RTEMS.IO_INITIALIZE( + SPTEST.INVALID_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_INITIALIZE" + ); + TEXT_IO.PUT_LINE( + "TA1 - io_initialize - INVALID_NUMBER" + ); + + RTEMS.IO_OPEN( + SPTEST.INVALID_DRIVER_MAJOR, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( + STATUS, + RTEMS.INVALID_NUMBER, + "IO_OPEN" + ); + TEXT_IO.PUT_LINE( + "TA1 - io_open - INVALID_NUMBER" + ); + + TEXT_IO.PUT_LINE( "*** END OF TEST 21 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp21/sptest.ads b/c/src/ada-tests/sptests/sp21/sptest.ads new file mode 100644 index 0000000000..b0a54a2268 --- /dev/null +++ b/c/src/ada-tests/sptests/sp21/sptest.ads @@ -0,0 +1,141 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 21 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:29 joel Exp +-- + +with CLOCK_DRIVER; +with RTEMS; +with STUB_DRIVER; + +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 constants define the device major numbers +-- utilized by this test. +-- + + NO_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 3; + INVALID_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 5; + STUB_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 2; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task tests the Input Output 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 .. 3 ) := + ( + ( + 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 + ), + ( + STUB_DRIVER.INITIALIZE'ACCESS, -- Initialization + STUB_DRIVER.OPEN'ACCESS, -- Open + STUB_DRIVER.CLOSE'ACCESS, -- Close + STUB_DRIVER.READ'ACCESS, -- Read + STUB_DRIVER.WRITE'ACCESS, -- Write + STUB_DRIVER.CONTROL'ACCESS -- Control + ), + ( + RTEMS.NO_DRIVER_ENTRY, -- 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; diff --git a/c/src/ada-tests/sptests/sp22/sptest.adb b/c/src/ada-tests/sptests/sp22/sptest.adb new file mode 100644 index 0000000000..54bb256991 --- /dev/null +++ b/c/src/ada-tests/sptests/sp22/sptest.adb @@ -0,0 +1,299 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 22 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:34 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 22 ***" ); + + 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.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'M', '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" ); + + TEXT_IO.PUT_LINE( "INIT - timer_create - creating timer 1" ); + RTEMS.TIMER_CREATE( + SPTEST.TIMER_NAME( 1 ), + SPTEST.TIMER_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" ); + TEXT_IO.PUT( "INIT - timer 1 has id (" ); + UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT_LINE( ")" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- DELAYED_RESUME +-- + + procedure DELAYED_RESUME ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_RESUME( SPTEST.TASK_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF SELF" ); + + end DELAYED_RESUME; + +--PAGE +-- +-- PRINT_TIME +-- + + procedure PRINT_TIME + is + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + + 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( "- clock_get - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + end PRINT_TIME; + +--PAGE +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TMID : RTEMS.ID; + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + +-- GET ID + + TEXT_IO.PUT_LINE( "TA1 - timer_ident - identing timer 1" ); + RTEMS.TIMER_IDENT( SPTEST.TIMER_NAME( 1 ), TMID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_IDENT OF TM1" ); + TEXT_IO.PUT( "TA1 - timer 1 has id (" ); + UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT_LINE( ")" ); + +-- AFTER WHICH IS ALLOWED TO FIRE + + SPTEST.PRINT_TIME; + + TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" ); + RTEMS.TIMER_FIRE_AFTER( + TMID, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + SPTEST.DELAYED_RESUME'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" ); + + TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" ); + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" ); + + SPTEST.PRINT_TIME; + +-- AFTER WHICH IS RESET AND ALLOWED TO FIRE + + TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" ); + RTEMS.TIMER_FIRE_AFTER( + TMID, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + SPTEST.DELAYED_RESUME'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" ); + + TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" ); + RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + SPTEST.PRINT_TIME; + + TEXT_IO.PUT_LINE( "TA1 - timer_reset - timer 1" ); + RTEMS.TIMER_RESET( TMID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_RESET" ); + + TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" ); + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" ); + + SPTEST.PRINT_TIME; + +TEST_SUPPORT.PAUSE; + +-- +-- Reset the time since we do not know how long the user waited +-- before pressing <cr> at the pause. This insures that the +-- actual output matches the screen. +-- + + TIME := ( 1988, 12, 31, 9, 0, 7, 0 ); + + RTEMS.CLOCK_SET( TIME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" ); + +-- after which is canceled + + TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" ); + RTEMS.TIMER_FIRE_AFTER( + TMID, + 3 * TEST_SUPPORT.TICKS_PER_SECOND, + SPTEST.DELAYED_RESUME'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" ); + + TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" ); + RTEMS.TIMER_CANCEL( TMID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" ); + +-- when which is allowed to fire + + SPTEST.PRINT_TIME; + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" ); + + TIME.SECOND := TIME.SECOND + 3; + + TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" ); + RTEMS.TIMER_FIRE_WHEN( + TMID, + TIME, + SPTEST.DELAYED_RESUME'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" ); + + TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" ); + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" ); + + SPTEST.PRINT_TIME; + +-- when which is canceled + + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" ); + + TIME.SECOND := TIME.SECOND + 3; + + TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" ); + RTEMS.TIMER_FIRE_WHEN( + TMID, + TIME, + SPTEST.DELAYED_RESUME'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" ); + + TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" ); + RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + SPTEST.PRINT_TIME; + + TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" ); + RTEMS.TIMER_CANCEL( TMID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" ); + +-- delete + + TEXT_IO.PUT_LINE( + "TA1 - task_wake_after - YIELD (only task at priority)" + ); + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" ); + + TEXT_IO.PUT_LINE( "TA1 - timer_delete - timer 1" ); + RTEMS.TIMER_DELETE( TMID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_DELETE" ); + + TEXT_IO.PUT_LINE( "*** END OF TEST 22 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp22/sptest.ads b/c/src/ada-tests/sptests/sp22/sptest.ads new file mode 100644 index 0000000000..51598c7092 --- /dev/null +++ b/c/src/ada-tests/sptests/sp22/sptest.ads @@ -0,0 +1,147 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 22 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:35 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 .. 1 ) of RTEMS.ID; + TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) 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; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- DELAYED_RESUME +-- +-- DESCRIPTION: +-- +-- This subprogram is scheduled to be fired as a timer service +-- routine. When fired this subprogram resumes TASK_1. +-- + + procedure DELAYED_RESUME ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ); + +-- +-- PRINT_TIME +-- +-- DESCRIPTION: +-- +-- This subprogram prints the name of TASK_1 and the current TIME of day. +-- + + procedure PRINT_TIME; + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task tests the Timer 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 + 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 SPTEST; diff --git a/c/src/ada-tests/sptests/sp23/sptest.adb b/c/src/ada-tests/sptests/sp23/sptest.adb new file mode 100644 index 0000000000..a809de3eb3 --- /dev/null +++ b/c/src/ada-tests/sptests/sp23/sptest.adb @@ -0,0 +1,179 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 23 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:38 joel Exp +-- + +with ADDRESS_IO; +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 + INTERNAL_AREA : RTEMS.ADDRESS; + EXTERNAL_AREA : RTEMS.ADDRESS; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TEST 23 ***" ); + + 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" ); + + SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' ); + + INTERNAL_AREA := SPTEST.INTERNAL_PORT_AREA( 0 )'ADDRESS; + EXTERNAL_AREA := SPTEST.EXTERNAL_PORT_AREA( 0 )'ADDRESS; + RTEMS.PORT_CREATE( + SPTEST.PORT_NAME( 1 ), + INTERNAL_AREA, + EXTERNAL_AREA, + SPTEST.INTERNAL_PORT_AREA'LENGTH, + SPTEST.PORT_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_CREATE OF DP1" ); + TEXT_IO.PUT( "INIT - port_create - DP1 - internal = " ); + ADDRESS_IO.PUT( INTERNAL_AREA, WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT( " external = " ); + ADDRESS_IO.PUT( EXTERNAL_AREA, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + 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 + DPID : RTEMS.ID; + TO_BE_CONVERTED : RTEMS.ADDRESS; + CONVERTED : RTEMS.ADDRESS; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.PORT_IDENT( SPTEST.PORT_NAME( 1 ), DPID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_IDENT" ); + TEXT_IO.PUT( "TA1 - port_ident - " ); + UNSIGNED32_IO.PUT( DPID, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + TO_BE_CONVERTED := SPTEST.EXTERNAL_PORT_AREA( 16#E# )'ADDRESS; + RTEMS.PORT_EXTERNAL_TO_INTERNAL( + SPTEST.PORT_ID( 1 ), + TO_BE_CONVERTED, + CONVERTED, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" ); + TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " ); + ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT( " => internal: " ); + ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + TO_BE_CONVERTED := SPTEST.INTERNAL_PORT_AREA( 16#E# )'ADDRESS; + RTEMS.PORT_INTERNAL_TO_EXTERNAL( + SPTEST.PORT_ID( 1 ), + TO_BE_CONVERTED, + CONVERTED, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" ); + TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " ); + ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT( " => external: " ); + ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + TO_BE_CONVERTED := SPTEST.ABOVE_PORT_AREA( 16#E# )'ADDRESS; + RTEMS.PORT_EXTERNAL_TO_INTERNAL( + SPTEST.PORT_ID( 1 ), + TO_BE_CONVERTED, + CONVERTED, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" ); + TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " ); + ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT( " => internal: " ); + ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + TO_BE_CONVERTED := SPTEST.BELOW_PORT_AREA( 16#E# )'ADDRESS; + RTEMS.PORT_INTERNAL_TO_EXTERNAL( + SPTEST.PORT_ID( 1 ), + TO_BE_CONVERTED, + CONVERTED, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" ); + TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " ); + ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.PUT( " => external: " ); + ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT_LINE( "TA1 - port_delete - DP1" ); + RTEMS.PORT_DELETE( SPTEST.PORT_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_DELETE" ); + + TEXT_IO.PUT_LINE( "*** END OF TEST 23 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp23/sptest.ads b/c/src/ada-tests/sptests/sp23/sptest.ads new file mode 100644 index 0000000000..af8fc7a85f --- /dev/null +++ b/c/src/ada-tests/sptests/sp23/sptest.ads @@ -0,0 +1,173 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 23 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:39 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 .. 1 ) of RTEMS.ID; + TASK_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; + +-- +-- 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 for +-- addresses which are below the address space of the port. +-- + + BELOW_PORT_AREA_ADDRESS : constant System.Address := + System.Storage_Elements.To_Address(16#00000500#); + + BELOW_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 ) + of RTEMS.UNSIGNED8; + for BELOW_PORT_AREA use at BELOW_PORT_AREA_ADDRESS; + +-- +-- The following area defines a memory area to be used for +-- addresses which are above the address space of the port. +-- + + ABOVE_PORT_AREA_ADDRESS : constant System.Address := + System.Storage_Elements.To_Address(16#00003000#); + + ABOVE_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 ) + of RTEMS.UNSIGNED8; + for ABOVE_PORT_AREA use at ABOVE_PORT_AREA_ADDRESS; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task tests the Dual Ported Memory 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 + 2, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 1, -- 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; diff --git a/c/src/ada-tests/sptests/sp24/sptest.adb b/c/src/ada-tests/sptests/sp24/sptest.adb new file mode 100644 index 0000000000..7c3e309e3d --- /dev/null +++ b/c/src/ada-tests/sptests/sp24/sptest.adb @@ -0,0 +1,171 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 24 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:43 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; + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TEST 24 ***" ); + + 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', ' ' ); + + 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', ' ' ); + + for INDEX in 1 .. 3 + loop + + RTEMS.TASK_CREATE( + SPTEST.TASK_NAME( INDEX ), + 1, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TIMER_CREATE( + SPTEST.TIMER_NAME( INDEX ), + SPTEST.TIMER_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE LOOP" ); + + end loop; + + for INDEX in 1 .. 3 + loop + + RTEMS.TASK_START( + SPTEST.TASK_ID( INDEX ), + SPTEST.TASK_1_THROUGH_3'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 +-- +-- RESUME_TASK +-- + + procedure RESUME_TASK ( + TIMER_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ) is + TASK_TO_RESUME : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TASK_TO_RESUME := SPTEST.TASK_ID(INTEGER( RTEMS.GET_INDEX( TIMER_ID ) )); + RTEMS.TASK_RESUME( TASK_TO_RESUME, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" ); + + end RESUME_TASK; + +--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.TIMER_FIRE_AFTER( + SPTEST.TIMER_ID( INTEGER( ARGUMENT ) ), + TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * + TEST_SUPPORT.TICKS_PER_SECOND, + SPTEST.RESUME_TASK'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" ); + + 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 24 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + end if; + + TEST_SUPPORT.PUT_NAME( + SPTEST.TASK_NAME( INTEGER( TEST_SUPPORT.TASK_NUMBER( TID ) ) ), + FALSE + ); + + TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" ); + TEXT_IO.NEW_LINE; + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" ); + + end loop; + + end TASK_1_THROUGH_3; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp24/sptest.ads b/c/src/ada-tests/sptests/sp24/sptest.ads new file mode 100644 index 0000000000..c9912cfb6b --- /dev/null +++ b/c/src/ada-tests/sptests/sp24/sptest.ads @@ -0,0 +1,137 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 24 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:44 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 ( 1 .. 3 ) of RTEMS.ID; + TASK_NAME : array ( 1 .. 3 ) of RTEMS.NAME; + +-- +-- These arrays contain the IDs and NAMEs of all RTEMS timers created +-- by this test. +-- + + TIMER_ID : array ( 1 .. 3 ) of RTEMS.ID; + TIMER_NAME : array ( 1 .. 3 ) of RTEMS.NAME; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- RESUME_TASK +-- +-- DESCRIPTION: +-- +-- This subprogram is scheduled as a timer service routine. When +-- it fires it resumes the task which is mapped to this timer. +-- + + procedure RESUME_TASK ( + TIMER_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ); + +-- +-- TASK_1_THROUGH_3 +-- +-- DESCRIPTION: +-- +-- This RTEMS task tests the Timer Manager. +-- + + 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 + 3, -- 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; diff --git a/c/src/ada-tests/sptests/sp25/sptest.adb b/c/src/ada-tests/sptests/sp25/sptest.adb new file mode 100644 index 0000000000..f66bfe339f --- /dev/null +++ b/c/src/ada-tests/sptests/sp25/sptest.adb @@ -0,0 +1,368 @@ +-- +-- SPTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 25 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:47 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_TEST_SUPPORT; +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 25 ***" ); + + SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); + + 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_START( + SPTEST.TASK_ID( 1 ), + SPTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" ); + + SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' ); + + RTEMS.REGION_CREATE( + SPTEST.REGION_NAME( 1 ), + SPTEST.AREA_1'ADDRESS, + 64000, + 32, + RTEMS.DEFAULT_ATTRIBUTES, + SPTEST.REGION_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" ); + + 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 +-- +-- 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; + SEGMENT_ADDRESS_5 : RTEMS.ADDRESS; + SEGMENT_ADDRESS_6 : RTEMS.ADDRESS; + SEGMENT_ADDRESS_7 : RTEMS.ADDRESS; + SEGMENT_ADDRESS_8 : 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( "64 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 64, + 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 1 - " ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "128 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 128, + 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 1 - " ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "256 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 256, + RTEMS.DEFAULT_OPTIONS, + 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( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "512 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 512, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + 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_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "1024 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 1024, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_5, + 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_5 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "2048 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 2048, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_6, + 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_6 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "4096 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 4096, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_7, + 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_7 ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT( "TA1 - region_get_segment - wait on " ); + TEXT_IO.PUT_LINE( "8192 byte segment from region 1" ); + RTEMS.REGION_GET_SEGMENT( + SPTEST.REGION_ID( 1 ), + 8192, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + SEGMENT_ADDRESS_8, + 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_8 ); + TEXT_IO.NEW_LINE; + +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; + SEGMENT_ADDRESS_3 := RTEMS.NULL_ADDRESS; + + 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; + SEGMENT_ADDRESS_4 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - 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; + SEGMENT_ADDRESS_1 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - region_return_segment - return segment to region 1 - " + ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 ); + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_2, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + TEXT_IO.NEW_LINE; + SEGMENT_ADDRESS_2 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - region_return_segment - return segment to region 1 - " + ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_7 ); + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_7, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + TEXT_IO.NEW_LINE; + SEGMENT_ADDRESS_7 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - region_return_segment - return segment to region 1 - " + ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_6 ); + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_6, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + TEXT_IO.NEW_LINE; + SEGMENT_ADDRESS_6 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - region_return_segment - return segment to region 1 - " + ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_8 ); + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_8, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + TEXT_IO.NEW_LINE; + SEGMENT_ADDRESS_8 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT( + "TA1 - region_return_segment - return segment to region 1 - " + ); + SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_5 ); + RTEMS.REGION_RETURN_SEGMENT( + SPTEST.REGION_ID( 1 ), + SEGMENT_ADDRESS_5, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + TEXT_IO.NEW_LINE; + SEGMENT_ADDRESS_5 := RTEMS.NULL_ADDRESS; + + TEXT_IO.PUT_LINE( + "TA1 - region_delete - walks heap if debug enabled" + ); + RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" ); + + TEXT_IO.PUT_LINE( "*** END OF TEST 25 ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end SPTEST; diff --git a/c/src/ada-tests/sptests/sp25/sptest.ads b/c/src/ada-tests/sptests/sp25/sptest.ads new file mode 100644 index 0000000000..cf9a916ea4 --- /dev/null +++ b/c/src/ada-tests/sptests/sp25/sptest.ads @@ -0,0 +1,158 @@ +-- +-- SPTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 25 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:48 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 regions created +-- by this test. +-- + + REGION_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID; + REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) 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 .. 64000 ) of RTEMS.UNSIGNED8; + for AREA_1'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 + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task tests the Region 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 + 1, -- 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; diff --git a/c/src/ada-tests/sptests/spsize/sptest.adb b/c/src/ada-tests/sptests/spsize/sptest.adb new file mode 100644 index 0000000000..e4db587639 --- /dev/null +++ b/c/src/ada-tests/sptests/spsize/sptest.adb @@ -0,0 +1,199 @@ +-- +-- 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:39:50 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_TEST_SUPPORT; +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 SIZE ***" ); + + SPTEST.PUT_SIZE( + "Tasks", + TRUE, + "maximum_tasks", + RTEMS_TEST_SUPPORT.PER_TASK + ); + + SPTEST.PUT_SIZE( + "Timers", + TRUE, + "maximum_timers", + RTEMS_TEST_SUPPORT.PER_TIMER + ); + + SPTEST.PUT_SIZE( + "Semaphores", + TRUE, + "maximum_semaphores", + RTEMS_TEST_SUPPORT.PER_SEMAPHORE + ); + + SPTEST.PUT_SIZE( + "Message Queues", + TRUE, + "maximum_message_queues", + RTEMS_TEST_SUPPORT.PER_MESSAGE_QUEUE + ); + + SPTEST.PUT_SIZE( + "Messages", + TRUE, + "maximum_messages", + RTEMS_TEST_SUPPORT.PER_MESSAGE + ); + + SPTEST.PUT_SIZE( + "Regions", + TRUE, + "maximum_regions", + RTEMS_TEST_SUPPORT.PER_REGION + ); + + SPTEST.PUT_SIZE( + "Partitions", + TRUE, + "maximum_paritions", + RTEMS_TEST_SUPPORT.PER_PARTITION + ); + + SPTEST.PUT_SIZE( + "Ports", + TRUE, + "maximum_ports", + RTEMS_TEST_SUPPORT.PER_PORT + ); + + SPTEST.PUT_SIZE( + "Periods", + TRUE, + "maximum_periods", + RTEMS_TEST_SUPPORT.PER_PERIOD + ); + + SPTEST.PUT_SIZE( + "Extensions", + TRUE, + "maximum_extensions", + RTEMS_TEST_SUPPORT.PER_EXTENSION + ); + + SPTEST.PUT_SIZE( + "Device Drivers", + TRUE, + "number_of_device_drivers", + RTEMS_TEST_SUPPORT.PER_DRIVER + ); + + SPTEST.PUT_SIZE( + "System Requirements", + FALSE, + REQUIREMENT => RTEMS_TEST_SUPPORT.SYSTEM_REQUIREMENTS + ); + + SPTEST.PUT_SIZE( + "Floating Point Tasks", + TRUE, + "FP attributes", + RTEMS_TEST_SUPPORT.PER_FP_TASK + ); + + TEXT_IO.PUT_LINE( "User's Tasks' Stacks - " ); + TEXT_IO.NEW_LINE; + + TEXT_IO.PUT_LINE( "Interrupt Stacks - " ); + TEXT_IO.NEW_LINE; + + SPTEST.PUT_SIZE( + "Global object tables", + TRUE, + "maximum_nodes", + RTEMS_TEST_SUPPORT.PER_NODE + ); + + SPTEST.PUT_SIZE( + "Global objects", + TRUE, + "maximum_global_objects", + RTEMS_TEST_SUPPORT.PER_GLOBAL_OBJECT + ); + + SPTEST.PUT_SIZE( + "Proxies", + TRUE, + "maximum_proxies", + RTEMS_TEST_SUPPORT.PER_PROXY + ); + + TEXT_IO.PUT_LINE( "*** END OF TEST SIZE ***" ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end INIT; + +--PAGE +-- +-- PUT_SIZE +-- + + procedure PUT_SIZE ( + DESCRIPTION : in STRING; + HAS_FIELD_NAME : in BOOLEAN; + FIELD_NAME : in STRING := ""; + REQUIREMENT : in RTEMS.UNSIGNED32 := 0 + ) is + SPACES : constant STRING := " "; + begin + + -- 21 is length of longest description (task's stacks) + + TEXT_IO.PUT( DESCRIPTION ); + TEXT_IO.PUT( SPACES( 1 .. 21 - DESCRIPTION'LENGTH ) ); + TEXT_IO.PUT( " - " ); + if HAS_FIELD_NAME = TRUE then + TEXT_IO.PUT( FIELD_NAME ); + TEXT_IO.PUT( " * " ); + end if; + UNSIGNED32_IO.PUT( REQUIREMENT ); + TEXT_IO.NEW_LINE; + + end PUT_SIZE; + + +end SPTEST; diff --git a/c/src/ada-tests/sptests/spsize/sptest.ads b/c/src/ada-tests/sptests/spsize/sptest.ads new file mode 100644 index 0000000000..d83a37039c --- /dev/null +++ b/c/src/ada-tests/sptests/spsize/sptest.ads @@ -0,0 +1,111 @@ +-- +-- 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:42:55 joel Exp +-- + +with CLOCK_DRIVER; +with RTEMS; + +package SPTEST is + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- PUT_SIZE +-- +-- DESCRIPTION: +-- +-- This procedure outputs the size information about the specified +-- object in a standard format. +-- + + procedure PUT_SIZE ( + DESCRIPTION : in STRING; + HAS_FIELD_NAME : in BOOLEAN; + FIELD_NAME : in STRING := ""; + REQUIREMENT : in RTEMS.UNSIGNED32 := 0 + ); + +-- +-- 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; |