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/tmtests | |
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/tmtests')
63 files changed, 14866 insertions, 0 deletions
diff --git a/c/src/ada-tests/tmtests/tm01/tmtest.adb b/c/src/ada-tests/tmtests/tm01/tmtest.adb new file mode 100644 index 0000000000..242e09d4ec --- /dev/null +++ b/c/src/ada-tests/tmtests/tm01/tmtest.adb @@ -0,0 +1,274 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 1 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:02 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 1 ***" ); + + TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); + TMTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' ); + TMTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME( 'T', 'A', '3', ' ' ); + + RTEMS.TASK_CREATE( + TMTEST.TASK_NAME( 1 ), + 1, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.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 + SEMAPHORE_OBTAIN_TIME : RTEMS.UNSIGNED32; + SEMAPHORE_RELEASE_TIME : RTEMS.UNSIGNED32; + SEMAPHORE_OBTAIN_NO_WAIT_TIME : RTEMS.UNSIGNED32; + SEMAPHORE_OBTAIN_LOOP_TIME : RTEMS.UNSIGNED32; + SEMAPHORE_RELEASE_LOOP_TIME : RTEMS.UNSIGNED32; + INDEX : RTEMS.UNSIGNED32; + ITERATIONS : RTEMS.UNSIGNED32; + NAME : RTEMS.NAME; + SMID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + NAME := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ); + + SEMAPHORE_OBTAIN_TIME := 0; + SEMAPHORE_RELEASE_TIME := 0; + SEMAPHORE_OBTAIN_NO_WAIT_TIME := 0; + SEMAPHORE_OBTAIN_LOOP_TIME := 0; + SEMAPHORE_RELEASE_LOOP_TIME := 0; + +-- Time one invocation of SEMAPHORE_CREATE + + TIMER_DRIVER.INITIALIZE; + + RTEMS.SEMAPHORE_CREATE( + NAME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_ATTRIBUTES, + SMID, + STATUS + ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_CREATE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_CREATE + ); + +-- Time one invocation of SEMAPHORE_DELETE + + TIMER_DRIVER.INITIALIZE; + + RTEMS.SEMAPHORE_DELETE( SMID, STATUS ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_DELETE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_DELETE + ); + +-- Create semaphore for repeated operations. + + RTEMS.SEMAPHORE_CREATE( + NAME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_ATTRIBUTES, + SMID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" ); + +-- Perform repeated SEMAPHORE OBTAIN's and RELEASE's + + for ITERATIONS in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + SEMAPHORE_OBTAIN_LOOP_TIME := SEMAPHORE_OBTAIN_LOOP_TIME + + TMTEST.END_TIME; + SEMAPHORE_RELEASE_LOOP_TIME := SEMAPHORE_RELEASE_LOOP_TIME + + TMTEST.END_TIME; + + -- Semaphore_obtain (available loop) + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.SEMAPHORE_OBTAIN( + SMID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + SEMAPHORE_OBTAIN_TIME := SEMAPHORE_OBTAIN_TIME + TMTEST.END_TIME; + + -- Semaphore_release + + TIMER_DRIVER.INITIALIZE; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.SEMAPHORE_RELEASE( SMID, STATUS ); + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME + + TMTEST.END_TIME; + + -- Semaphore_p (NO_WAIT) + + TIMER_DRIVER.INITIALIZE; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.SEMAPHORE_OBTAIN( + SMID, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + SEMAPHORE_OBTAIN_NO_WAIT_TIME := + SEMAPHORE_OBTAIN_NO_WAIT_TIME + TMTEST.END_TIME; + + -- Semaphore_v + + TIMER_DRIVER.INITIALIZE; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.SEMAPHORE_RELEASE( SMID, STATUS ); + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + SEMAPHORE_RELEASE_TIME := SEMAPHORE_RELEASE_TIME + + TMTEST.END_TIME; + + end loop; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_OBTAIN (semaphore available)", + SEMAPHORE_OBTAIN_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.OPERATION_COUNT, + SEMAPHORE_OBTAIN_LOOP_TIME, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_OBTAIN (NO_WAIT)", + SEMAPHORE_OBTAIN_NO_WAIT_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.OPERATION_COUNT, + SEMAPHORE_OBTAIN_LOOP_TIME, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_RELEASE (no task waiting)", + SEMAPHORE_RELEASE_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.OPERATION_COUNT * 2, + SEMAPHORE_RELEASE_LOOP_TIME * 2, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE + ); + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm01/tmtest.ads b/c/src/ada-tests/tmtests/tm01/tmtest.ads new file mode 100644 index 0000000000..7078b5e675 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm01/tmtest.ads @@ -0,0 +1,106 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 1 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:03 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST 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 variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task performs the all of the timing operations in this test. +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 2, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm02/tmtest.adb b/c/src/ada-tests/tmtests/tm02/tmtest.adb new file mode 100644 index 0000000000..18b4d6a3db --- /dev/null +++ b/c/src/ada-tests/tmtests/tm02/tmtest.adb @@ -0,0 +1,208 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 2 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:05 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 2 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT is + PRIORITY : RTEMS.TASK_PRIORITY; + INDEX : RTEMS.UNSIGNED32; + HIGH_ID : RTEMS.ID; + LOW_ID : RTEMS.ID; + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + PRIORITY := 5; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + HIGH_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF HIGH TASK" ); + + PRIORITY := PRIORITY + 1; + + RTEMS.TASK_START( + HIGH_ID, + TMTEST.HIGH_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF HIGH TASK" ); + + for INDEX in 2 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE MIDDLE" ); + + PRIORITY := PRIORITY + 1; + + RTEMS.TASK_START( + TASK_ID, + TMTEST.MIDDLE_TASKS'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START MIDDLE" ); + + end loop; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ), + PRIORITY, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + LOW_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF LOW TASK" ); + + RTEMS.TASK_START( LOW_ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF LOW TASK" ); + + RTEMS.SEMAPHORE_CREATE( + RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ), + 0, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.SEMAPHORE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" ); + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_OBTAIN (blocking)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_OBTAIN + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm02/tmtest.ads b/c/src/ada-tests/tmtests/tm02/tmtest.ads new file mode 100644 index 0000000000..4b2a632dac --- /dev/null +++ b/c/src/ada-tests/tmtests/tm02/tmtest.ads @@ -0,0 +1,141 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 2 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:07 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the semaphore used for timing operations. +-- + + SEMAPHORE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task starts the timer and performs a blocking +-- SEMAPHORE_OBTAIN. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS task start the timer and performs a blocking +-- SEMAPHORE_OBTAIN. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution time for +-- a blocking SEMAPHORE_OBTAIN. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm03/tmtest.adb b/c/src/ada-tests/tmtests/tm03/tmtest.adb new file mode 100644 index 0000000000..8a5fdd3cbc --- /dev/null +++ b/c/src/ada-tests/tmtests/tm03/tmtest.adb @@ -0,0 +1,193 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 3 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:10 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 3 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ), + 252, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TEST_INIT" ); + + RTEMS.TASK_START( TASK_ID, TMTEST.TEST_INIT'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TEST_INIT" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + PRIORITY : RTEMS.TASK_PRIORITY; + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + PRIORITY := 250; + + RTEMS.SEMAPHORE_CREATE( + RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ), + 0, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.SEMAPHORE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" ); + + for INDEX in 2 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE MIDDLE" ); + + PRIORITY := PRIORITY - 1; + + RTEMS.TASK_START( TASK_ID, TMTEST.MIDDLE_TASKS'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START MIDDLE" ); + + end loop; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF HIGH TASK" ); + + RTEMS.TASK_START( TASK_ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF HIGH TASK" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS ); + + end TEST_INIT; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + PRIORITY : RTEMS.TASK_PRIORITY; + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + PRIORITY : RTEMS.TASK_PRIORITY; + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_RELEASE (preemptive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm03/tmtest.ads b/c/src/ada-tests/tmtests/tm03/tmtest.ads new file mode 100644 index 0000000000..530b336191 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm03/tmtest.ads @@ -0,0 +1,133 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 3 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:10 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the semaphore used for timing operations. +-- + + SEMAPHORE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. After completion +-- of test initialization, the timer is started and a preemptive +-- SEMAPHORE_RELEASE is performed. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- This RTEMS task performs a blocking SEMAPHORE_OBTAIN. Once +-- is obtains the semaphore unit and executes again, it performs +-- a preemptive SEMAPHORE_RELEASE. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- timer for a preemptive SEMAPHORE_RELEASE. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm04/tmtest.adb b/c/src/ada-tests/tmtests/tm04/tmtest.adb new file mode 100644 index 0000000000..e979ad4746 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm04/tmtest.adb @@ -0,0 +1,500 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 4 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:13 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 4 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_COUNT := TIME_TEST_SUPPORT.OPERATION_COUNT; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 10, + 1024, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.LOW_TASKS'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + RTEMS.SEMAPHORE_CREATE( + RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ), + 0, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.SEMAPHORE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" ); + + end TEST_INIT; + +--PAGE +-- +-- HIGHEST_TASK +-- + + procedure HIGHEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + OLD_PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + if ARGUMENT = 1 then + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART (blocked, preempt)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, OLD_PRIORITY, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" ); + + elsif ARGUMENT = 2 then + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART (ready, preempt)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" ); + + else + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end if; + + end HIGHEST_TASK; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + OLD_PRIORITY : RTEMS.TASK_PRIORITY; + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + NAME : RTEMS.NAME; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 1, STATUS ); + -- preempted by Higher_task + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_RESTART( TMTEST.HIGHEST_ID, 2, STATUS ); + -- preempted by Higher_task + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.SEMAPHORE_RELEASE( TMTEST.SEMAPHORE_ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_RELEASE (readying)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_RELEASE + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" ); + end loop; + + NAME := RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_CREATE( + NAME, + 10, + 1024, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_CREATE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.LOW_TASKS'ACCESS, + 0, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_START", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_START + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" ); + end loop; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_CREATE( + NAME, + 250, + 1024, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.RESTART_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" ); + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 0, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART (suspended)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND LOOP" ); + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_DELETE (suspended)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_DELETE + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_CREATE( + NAME, + 250, + 1024, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.RESTART_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART (ready)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID( INDEX ), + 5, + OLD_PRIORITY, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY LOOP" ); + end loop; + + -- yield processor -- tasks block + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_RESTART( TMTEST.TASK_ID( INDEX ), 1, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART (blocked, no preempt)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + -- yield processor -- tasks block + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_DELETE (blocked)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_DELETE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- LOW_TASKS +-- + + procedure LOW_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT - 1; + + if TMTEST.TASK_COUNT = 0 then + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', ' ', ' ' ), + 5, + 2048, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HI" ); + + RTEMS.TASK_START( + ID, + TMTEST.HIGH_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HI" ); + + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + 3, + 2048, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.HIGHEST_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" ); + + RTEMS.TASK_START( + TMTEST.HIGHEST_ID, + TMTEST.HIGHEST_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" ); + + + end if; + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end LOW_TASKS; + +--PAGE +-- +-- RESTART_TASK +-- + + procedure RESTART_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + PRIORITY : RTEMS.TASK_PRIORITY; + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + if ARGUMENT = 1 then + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + end if; + + end RESTART_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm04/tmtest.ads b/c/src/ada-tests/tmtests/tm04/tmtest.ads new file mode 100644 index 0000000000..1239bf63e4 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm04/tmtest.ads @@ -0,0 +1,199 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 4 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:13 joel Exp +-- + +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + +-- +-- This variable contains the id of the highest priority task +-- in the system. +-- + + HIGHEST_ID : RTEMS.ID; + +-- +-- The following is the ID of the semaphore used for timing operations. +-- + + SEMAPHORE_ID : RTEMS.ID; + +-- +-- The following is used to perform the same operation +-- on a group of tasks. +-- + + TASK_COUNT : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- HIGHEST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is created by one of the LOW_TASKS. The +-- first time it executes, it performs a blocking SEMAPHORE_OBTAIN +-- which transfers control of the processor to HIGH_TASK. +-- The first time HIGHEST_TASK is restarted, it stops the +-- timer and reports the execution time for a TASK_RESTART +-- for a blocked task which preempts the caller. The second +-- time HIGHEST_TASK is restarted, it stops the timer and reports +-- the execution time for a TASK_RESTART for a ready task which +-- has its original priority restored and preempts the caller. +-- + + procedure HIGHEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is created by one of the LOW_TASKS. This +-- task restarts HIGHEST_TASK twice. HIGHEST_TASK is blocked the +-- first time and preempts this task when restarted. HIGHEST_TASK +-- is ready the second time but has lowered its priority. When +-- restarted for the second time, HIGHEST_TASK will have its +-- original priority restored and preempt this task. +-- Once control of the processor is returned to this task after +-- HIGHEST_TASK deletes itself, the following execution times +-- are measured and reported. +-- +-- + readying SEMAPHORE_RELEASE +-- + TASK_CREATE +-- + TASK_START +-- + TASK_RESTART of a suspended task +-- + TASK_DELETE of a suspended task +-- + TASK_RESTART of a ready task +-- + TASK_RESTART of a blocked task which does not cause a preempt +-- + TASK_DELETE of a blocked task +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASKS +-- +-- DESCRIPTION: +-- +-- The last of these RTEMS tasks to execute creates HIGH_TASK +-- and HIGHEST_TASK. All of these tasks perform a blocking +-- SEMAPHORE_OBTAIN. +-- + + procedure LOW_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- RESTART_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task +-- + + procedure RESTART_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm05/tmtest.adb b/c/src/ada-tests/tmtests/tm05/tmtest.adb new file mode 100644 index 0000000000..5f9db02171 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm05/tmtest.adb @@ -0,0 +1,174 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 5 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:16 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 5 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = 0 then + TASK_ENTRY := TMTEST.LOW_TASK'ACCESS; + elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESUME causing preempt", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_RESUME + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + + TMTEST.TASK_INDEX := TMTEST.TASK_INDEX + 1; + RTEMS.TASK_RESUME( TMTEST.TASK_ID( TMTEST.TASK_INDEX ), STATUS ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SUSPEND self", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_SUSPEND + ); + + TMTEST.TASK_INDEX := 1; + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_RESUME( TMTEST.TASK_ID( TMTEST.TASK_INDEX ), STATUS ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm05/tmtest.ads b/c/src/ada-tests/tmtests/tm05/tmtest.ads new file mode 100644 index 0000000000..ad2aaa7b2a --- /dev/null +++ b/c/src/ada-tests/tmtests/tm05/tmtest.ads @@ -0,0 +1,151 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 5 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:17 joel Exp +-- + +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + + TASK_INDEX : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority task in the system. +-- It starts the timer and performs a TASK_SUSPEND on SELF. +-- When this task executes again, it stops the timer and +-- reports the execution time for a preemptive TASK_RESUME. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a TASK_SUSPEND on SELF. When each +-- task executes again, it performs preemptive TASK_RESUME on +-- a higher priority task. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the lowest priority task in the system. +-- When this task executes, it stops the timer and reports the +-- execution time for a blocking TASK_SUSPEND. After this, +-- it starts the timer and performs a TASK_RESUME on a +-- higher priority task. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm06/tmtest.adb b/c/src/ada-tests/tmtests/tm06/tmtest.adb new file mode 100644 index 0000000000..fafa2e11ea --- /dev/null +++ b/c/src/ada-tests/tmtests/tm06/tmtest.adb @@ -0,0 +1,210 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 6 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:19 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 6 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + INDEX : RTEMS.UNSIGNED32; + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_RESTARTED := TIME_TEST_SUPPORT.OPERATION_COUNT; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + end TEST_INIT; + +--PAGE +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + if TMTEST.TASK_RESTARTED = TIME_TEST_SUPPORT.OPERATION_COUNT then + TIMER_DRIVER.INITIALIZE; + end if; + + TMTEST.TASK_RESTARTED := TMTEST.TASK_RESTARTED - 1; + + if TMTEST.TASK_RESTARTED /= 0 then + RTEMS.TASK_RESTART( RTEMS.SELF, 0, STATUS ); + end if; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART self", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 254, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.NULL_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SUSPEND( TMTEST.TASK_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SUSPEND no preempt", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_SUSPEND + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_RESUME( TMTEST.TASK_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESUME no preempt", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_RESUME + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_DELETE( TMTEST.TASK_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_DELETE others", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_DELETE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +--PAGE +-- +-- NULL_TASK +-- + + procedure NULL_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + begin + + NULL; + + end NULL_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm06/tmtest.ads b/c/src/ada-tests/tmtests/tm06/tmtest.ads new file mode 100644 index 0000000000..ab0ca93244 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm06/tmtest.ads @@ -0,0 +1,142 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 6 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:20 joel Exp +-- + +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + +-- +-- This variable is used to determine which restart of TASK_1 will start +-- timer and which will stop the timer and report the execution time. +-- + + TASK_RESTARTED : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + TASK_RESTART of SELF +-- + TASK_SUSPEND of another task with no context switch +-- + TASK_RESUME with no preemption +-- + TASK_DELETE of another task +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- NULL_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task has no operations. It is used to have +-- tasks to perform directives upon. +-- + + procedure NULL_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm07/tmtest.adb b/c/src/ada-tests/tmtests/tm07/tmtest.adb new file mode 100644 index 0000000000..f83e5e706d --- /dev/null +++ b/c/src/ada-tests/tmtests/tm07/tmtest.adb @@ -0,0 +1,179 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 7 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:22 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 7 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = 0 then + TASK_ENTRY := TMTEST.LOW_TASK'ACCESS; + elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + OLD_PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + if ARGUMENT > 0 then + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART suspended/preempt", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_RESTART + ); + else + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + end if; + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_INDEX := TMTEST.TASK_INDEX + 1; + + if ARGUMENT > 0 then + RTEMS.TASK_RESTART( + TMTEST.TASK_ID( TMTEST.TASK_INDEX ), + 16#7FFFFFFF#, + STATUS + ); + else + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + end if; + + + end MIDDLE_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_INDEX := 1; + TIMER_DRIVER.INITIALIZE; + + RTEMS.TASK_RESTART( + TMTEST.TASK_ID( TMTEST.TASK_INDEX ), + 16#7FFFFFFF#, + STATUS + ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm07/tmtest.ads b/c/src/ada-tests/tmtests/tm07/tmtest.ads new file mode 100644 index 0000000000..e66c64067b --- /dev/null +++ b/c/src/ada-tests/tmtests/tm07/tmtest.ads @@ -0,0 +1,149 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 7 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:23 joel Exp +-- + +with TIMER_DRIVER; +with TIME_TEST_SUPPORT; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + + TASK_INDEX : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority task in the system. +-- The first time it executes it suspends itself. When restarted +-- it stops the timer and reports the time for a TASK_RESTART +-- of a suspended task which results in a preemption. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks suspend themselves the first time they execute. +-- When restarted they perform a TASK_RESTART of a suspended +-- higher priority task which results in a preemption. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the lowest priority task in the system. +-- When it executes it starts the timer and restarts a higher +-- priority task which immediately preempts this task. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm08/tmtest.adb b/c/src/ada-tests/tmtests/tm08/tmtest.adb new file mode 100644 index 0000000000..1f50eaa0f6 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm08/tmtest.adb @@ -0,0 +1,341 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 8 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:25 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 8 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_CREATE( + 1, + 128, + 1024, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_CREATE( + 1, + 254, + 1024, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK1'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + end TEST_INIT; + +--PAGE +-- +-- TEST_TASK +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + OLD_PRIORITY : RTEMS.TASK_PRIORITY; + OLD_MODE : RTEMS.MODE; + OLD_NOTE : RTEMS.NOTEPAD_INDEX; + TIME : RTEMS.TIME_OF_DAY; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID, + RTEMS.CURRENT_PRIORITY, + OLD_PRIORITY, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_PRIORITY current priority", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID, + 253, + OLD_PRIORITY, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_PRIORITY no preempt", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_MODE( + RTEMS.CURRENT_MODE, + RTEMS.CURRENT_MODE, + OLD_MODE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_MODE (current)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_MODE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_MODE( + RTEMS.INTERRUPT_LEVEL( 1 ), + RTEMS.INTERRUPT_MASK, + OLD_MODE, + STATUS + ); + RTEMS.TASK_MODE( + RTEMS.INTERRUPT_LEVEL( 0 ), + RTEMS.INTERRUPT_MASK, + OLD_MODE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_MODE (no reschedule)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * 2, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_MODE + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_MODE( + RTEMS.NO_ASR, + RTEMS.ASR_MASK, + OLD_MODE, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_MODE (reschedule)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.TASK_MODE + ); + + RTEMS.TASK_MODE( + RTEMS.NO_PREEMPT, + RTEMS.PREEMPT_MASK, + OLD_MODE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" ); + + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID, + 1, + OLD_PRIORITY, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_MODE( -- preempted by TEST_TASK1 + RTEMS.PREEMPT, + RTEMS.PREEMPT_MASK, + OLD_MODE, + STATUS + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_SET_NOTE( + TMTEST.TASK_ID, + 8, + 10, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_NOTE ", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_SET_NOTE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_GET_NOTE( + TMTEST.TASK_ID, + 8, + OLD_NOTE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_GET_NOTE ", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_GET_NOTE + ); + + TIME := (1988, 1, 1, 0, 0, 0, 0 ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.CLOCK_SET( + TIME, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_SET", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.CLOCK_SET + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_GET", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.CLOCK_GET + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TEST_TASK; + +--PAGE +-- +-- TEST_TASK1 +-- + + procedure TEST_TASK1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_MODE (preemptive) ", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.TASK_MODE + ); + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + + end TEST_TASK1; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm08/tmtest.ads b/c/src/ada-tests/tmtests/tm08/tmtest.ads new file mode 100644 index 0000000000..2ece9083ce --- /dev/null +++ b/c/src/ada-tests/tmtests/tm08/tmtest.ads @@ -0,0 +1,137 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 8 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:26 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + + TASK_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- TEST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + TASK_SET_PRIORITY to obtain the current priority +-- + TASK_SET_PRIORITY which does not require a context switch +-- + TASK_MODE to obtain the current mode +-- + TASK_MODE which does not require a reschedule +-- + TASK_MODE which does require a reschedule +-- + TASK_MODE which causes a preemption *** TEST_TASK1 executes +-- + TASK_SET_NOTE +-- + TASK_GET_NOTE +-- + CLOCK_SET +-- + CLOCK_GET +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_TASK2 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + TASK_MODE which results in a preemption +-- + + procedure TEST_TASK1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- maximum # timers + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm09/tmtest.adb b/c/src/ada-tests/tmtests/tm09/tmtest.adb new file mode 100644 index 0000000000..801a610fe7 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm09/tmtest.adb @@ -0,0 +1,295 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 9 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:28 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 9 ***" ); + + RTEMS.TASK_CREATE( + 1, + 128, + 4096, + RTEMS.DEFAULT_OPTIONS, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_TASK +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_CREATE( + 1, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_CREATE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_CREATE + ); + + TMTEST.QUEUE_TEST; + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_DELETE( + TMTEST.QUEUE_ID, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_DELETE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_DELETE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TEST_TASK; + +--PAGE +-- +-- QUEUE_TEST +-- + + procedure QUEUE_TEST + is + SEND_LOOP_TIME : RTEMS.UNSIGNED32; + URGENT_LOOP_TIME : RTEMS.UNSIGNED32; + RECEIVE_LOOP_TIME : RTEMS.UNSIGNED32; + SEND_TIME : RTEMS.UNSIGNED32; + URGENT_TIME : RTEMS.UNSIGNED32; + RECEIVE_TIME : RTEMS.UNSIGNED32; + EMPTY_FLUSH_TIME : RTEMS.UNSIGNED32; + FLUSH_TIME : RTEMS.UNSIGNED32; + FLUSH_COUNT : RTEMS.UNSIGNED32; + EMPTY_FLUSH_COUNT : RTEMS.UNSIGNED32; + INDEX : RTEMS.UNSIGNED32; + ITERATIONS : RTEMS.UNSIGNED32; + LOOP_COUNT : RTEMS.UNSIGNED32; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + SEND_LOOP_TIME := 0; + URGENT_LOOP_TIME := 0; + RECEIVE_LOOP_TIME := 0; + SEND_TIME := 0; + URGENT_TIME := 0; + RECEIVE_TIME := 0; + EMPTY_FLUSH_TIME := 0; + FLUSH_TIME := 0; + FLUSH_COUNT := 0; + EMPTY_FLUSH_COUNT := 0; + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + for ITERATIONS in 1 .. TIME_TEST_SUPPORT.ITERATION_COUNT + loop + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + SEND_LOOP_TIME := SEND_LOOP_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + URGENT_LOOP_TIME := URGENT_LOOP_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + RECEIVE_LOOP_TIME := RECEIVE_LOOP_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_SEND( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + end loop; + SEND_TIME := SEND_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + end loop; + RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_URGENT( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + end loop; + URGENT_TIME := URGENT_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + end loop; + RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_FLUSH( + TMTEST.QUEUE_ID, + EMPTY_FLUSH_COUNT, + STATUS + ); + EMPTY_FLUSH_TIME := EMPTY_FLUSH_TIME + TIMER_DRIVER.READ_TIMER; + + -- send one message to flush + RTEMS.MESSAGE_QUEUE_SEND( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_FLUSH( + TMTEST.QUEUE_ID, + FLUSH_COUNT, + STATUS + ); + FLUSH_TIME := FLUSH_TIME + TIMER_DRIVER.READ_TIMER; + + end loop; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_SEND (no tasks waiting)", + SEND_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.ITERATION_COUNT, + SEND_LOOP_TIME, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_URGENT (no tasks waiting)", + URGENT_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.ITERATION_COUNT, + URGENT_LOOP_TIME, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_RECEIVE (messages available)", + RECEIVE_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT * + TIME_TEST_SUPPORT.ITERATION_COUNT * 2, + RECEIVE_LOOP_TIME * 2, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_FLUSH (empty queue)", + EMPTY_FLUSH_TIME, + TIME_TEST_SUPPORT.ITERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_FLUSH (messages flushed)", + FLUSH_TIME, + TIME_TEST_SUPPORT.ITERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH + ); + + end QUEUE_TEST; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm09/tmtest.ads b/c/src/ada-tests/tmtests/tm09/tmtest.ads new file mode 100644 index 0000000000..be1ffe9dc6 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm09/tmtest.ads @@ -0,0 +1,125 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 9 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:29 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + MESSAGE_QUEUE_CREATE +-- + MESSAGE_QUEUE_DELETE +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- QUEUE_TEST +-- +-- DESCRIPTION: +-- +-- This subprogram is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + MESSAGE_QUEUE_SEND with no tasks waiting +-- + MESSAGE_QUEUE_URGENT with no tasks waiting +-- + MESSAGE_QUEUE_RECEIVE with messages available +-- + MESSAGE_QUEUE_FLUSH with an empty message queue +-- + MESSAGE_QUEUE_FLUSH with messages flushed +-- + + procedure QUEUE_TEST; + +-- +-- This is the Initialization Tasks Table for this test. +-- + + INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := + (1=> + ( + RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name + 2048, -- stack size + 1, -- priority + RTEMS.DEFAULT_ATTRIBUTES, -- attributes + TMTEST.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 + 256 * 1024, -- executive RAM size + 2, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- maximum # message queues + 110, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm10/tmtest.adb b/c/src/ada-tests/tmtests/tm10/tmtest.adb new file mode 100644 index 0000000000..8638a473b3 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm10/tmtest.adb @@ -0,0 +1,218 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 10 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:32 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 10 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + OVERHEAD : RTEMS.UNSIGNED32; + TASK_ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + PRIORITY := 5; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY + 1; + + if INDEX = 0 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.LOW_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + RTEMS.MESSAGE_QUEUE_CREATE( + 1, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_RECEIVE (NO_WAIT)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE + ); + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + 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 ); + + TIMER_DRIVER.INITIALIZE; + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_RECEIVE (blocking)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm10/tmtest.ads b/c/src/ada-tests/tmtests/tm10/tmtest.ads new file mode 100644 index 0000000000..8a8ae2700a --- /dev/null +++ b/c/src/ada-tests/tmtests/tm10/tmtest.ads @@ -0,0 +1,142 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 10 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:32 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. After initialization +-- has been completed, the NO_WAIT case for MESSAGE_QUEUE_RECEIVE +-- is timed and reported. +-- + + procedure TEST_INIT; + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority task in the system. +-- It starts the timer and performs a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution time +-- of a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 110, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm11/tmtest.adb b/c/src/ada-tests/tmtests/tm11/tmtest.adb new file mode 100644 index 0000000000..5540364a97 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm11/tmtest.adb @@ -0,0 +1,211 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 11 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:35 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 11 ***" ); + + RTEMS.TASK_CREATE( + 1, + 251, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.TEST_INIT'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + TASK_ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + +-- As each task is started, it preempts this task and performs a blocking +-- MESSAGE_QUEUE_RECEIVE. Upon completion of this loop all created tasks +-- are blocked. + + RTEMS.MESSAGE_QUEUE_CREATE( + RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ), + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" ); + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1 + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_SEND( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_SEND (preemptive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + RTEMS.MESSAGE_QUEUE_SEND( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end MIDDLE_TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm11/tmtest.ads b/c/src/ada-tests/tmtests/tm11/tmtest.ads new file mode 100644 index 0000000000..2c415ee513 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm11/tmtest.ads @@ -0,0 +1,139 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 11 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:36 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. As each application +-- task is created and started, it will preempt this task and +-- perform a blocking MESSAGE_QUEUE_RECEIVE. Once all of the +-- initialization is completed, the timer is started and the first +-- preemptive MESSAGE_QUEUE_SEND is executed. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority task in the system. +-- It performs a blocking blocking MESSAGE_QUEUE_RECEIVE. It is +-- the last test task created and started. Thus it is the last +-- task to be enqueued waiting for a message and the last task +-- to receive the message. Once it receives the message, it +-- stops the timer and reports the execution time for a +-- preemptive MESSAGE_QUEUE_SEND. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- As each of these RTEMS tasks is created and started, it preempts +-- the initialization task and perform a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm12/tmtest.adb b/c/src/ada-tests/tmtests/tm12/tmtest.adb new file mode 100644 index 0000000000..732f244056 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm12/tmtest.adb @@ -0,0 +1,208 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 12 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:38 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 12 ***" ); + + RTEMS.TASK_CREATE( + 1, + 251, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.TEST_INIT'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + TASK_ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + RTEMS.MESSAGE_QUEUE_CREATE( + RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ), + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" ); + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1 + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.LOW_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.MESSAGE_QUEUE_SEND( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" ); --XXX + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_SEND (readying)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASKS ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" ); --XXX + + end LOW_TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm12/tmtest.ads b/c/src/ada-tests/tmtests/tm12/tmtest.ads new file mode 100644 index 0000000000..caeff921dd --- /dev/null +++ b/c/src/ada-tests/tmtests/tm12/tmtest.ads @@ -0,0 +1,130 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 12 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:39 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the lowest priority task in the system. It +-- only executes after all of the LOW_TASKS have blocked. It then +-- times a readying MESSAGE_QUEUE_SEND. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure LOW_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm13/tmtest.adb b/c/src/ada-tests/tmtests/tm13/tmtest.adb new file mode 100644 index 0000000000..c2928b96c3 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm13/tmtest.adb @@ -0,0 +1,209 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 13 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:43 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 13 ***" ); + + RTEMS.TASK_CREATE( + 1, + 251, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.TEST_INIT'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + TASK_ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + +-- As each task is started, it preempts this task and performs a blocking +-- MESSAGE_QUEUE_RECEIVE. Upon completion of this loop all created tasks +-- are blocked. + + RTEMS.MESSAGE_QUEUE_CREATE( + RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ), + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1 + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_URGENT( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_URGENT (preemptive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + RTEMS.MESSAGE_QUEUE_URGENT( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end MIDDLE_TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm13/tmtest.ads b/c/src/ada-tests/tmtests/tm13/tmtest.ads new file mode 100644 index 0000000000..faee6d5ad6 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm13/tmtest.ads @@ -0,0 +1,139 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 13 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:43 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. As each application +-- task is created and started, it will preempt this task and +-- perform a blocking MESSAGE_QUEUE_RECEIVE. Once all of the +-- initialization is completed, the timer is started and the first +-- preemptive MESSAGE_QUEUE_URGENT is executed. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority task in the system. +-- It performs a blocking blocking MESSAGE_QUEUE_RECEIVE. It is +-- the last test task created and started. Thus it is the last +-- task to be enqueued waiting for a message and the last task +-- to receive the message. Once it receives the message, it +-- stops the timer and reports the execution time for a +-- preemptive MESSAGE_QUEUE_URGENT. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- As each of these RTEMS tasks is created and started, it preempts +-- the initialization task and perform a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm14/tmtest.adb b/c/src/ada-tests/tmtests/tm14/tmtest.adb new file mode 100644 index 0000000000..de258a995a --- /dev/null +++ b/c/src/ada-tests/tmtests/tm14/tmtest.adb @@ -0,0 +1,211 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 14 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:46 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 14 ***" ); + + RTEMS.TASK_CREATE( + 1, + 251, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.TEST_INIT'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + PRIORITY : RTEMS.TASK_PRIORITY; + TASK_ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + RTEMS.MESSAGE_QUEUE_CREATE( + RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ), + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_OPTIONS, + TMTEST.QUEUE_ID, + STATUS + ); + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT - 1 + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + PRIORITY := PRIORITY - 1; + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT - 1 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.LOW_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TASK_ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_URGENT( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end TEST_INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.MESSAGE_QUEUE_URGENT( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + STATUS + ); + + end loop; + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_URGENT (readying)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +--PAGE +-- +-- LOW_TASKS +-- + + procedure LOW_TASKS ( + 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 ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + STATUS + ); + + end LOW_TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm14/tmtest.ads b/c/src/ada-tests/tmtests/tm14/tmtest.ads new file mode 100644 index 0000000000..47d742c169 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm14/tmtest.ads @@ -0,0 +1,130 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 14 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:47 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the lowest priority task in the system. It +-- only executes after all of the LOW_TASKS have blocked. It then +-- times a readying MESSAGE_QUEUE_SEND. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a blocking MESSAGE_QUEUE_RECEIVE. +-- + + procedure LOW_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm15/tmtest.adb b/c/src/ada-tests/tmtests/tm15/tmtest.adb new file mode 100644 index 0000000000..9749e26360 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm15/tmtest.adb @@ -0,0 +1,276 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 15 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:49 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 15 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + ID : RTEMS.ID; + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + EVENT_OUT : RTEMS.EVENT_SET; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TIME_SET := FALSE; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ), + 10, + 1024, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" ); + + RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + 5, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TMTEST.HIGH_TASKS'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.EVENT_RECEIVE( + RTEMS.PENDING_EVENTS, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_RECEIVE (current)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.EVENT_RECEIVE( + RTEMS.ALL_EVENTS, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_RECEIVE (NO_WAIT)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE + ); + + end TEST_INIT; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + INDEX : RTEMS.UNSIGNED32; + EVENT_OUT : RTEMS.EVENT_SET; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_RECEIVE (blocking)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_16, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_SEND (returns to caller)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.EVENT_SEND + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.EVENT_RECEIVE( + RTEMS.EVENT_16, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_RECEIVE (available)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.EVENT_RECEIVE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.EVENT_SEND( + TMTEST.TASK_ID( INDEX ), + RTEMS.EVENT_16, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_SEND (readying)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.EVENT_SEND + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +--PAGE +-- +-- HIGH_TASKS +-- + + procedure HIGH_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + EVENT_OUT : RTEMS.EVENT_SET; + STATUS : RTEMS.STATUS_CODES; + begin + + if TMTEST.TIME_SET = FALSE then + TMTEST.TIME_SET := TRUE; + TIMER_DRIVER.INITIALIZE; + end if; + + RTEMS.EVENT_RECEIVE( + 16#7FFFFFFF#, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + + end HIGH_TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm15/tmtest.ads b/c/src/ada-tests/tmtests/tm15/tmtest.ads new file mode 100644 index 0000000000..a4d9662089 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm15/tmtest.ads @@ -0,0 +1,147 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 15 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:50 joel Exp +-- + +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. + TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + +-- +-- This variable is set to TRUE if the timer has been initialized +-- and is currently timing an operation. +-- + + TIME_SET : RTEMS.BOOLEAN; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. Once initialization +-- has been completed, the following operations are timed and reported: +-- +-- + event_receive of currently PENDING_EVENTS +-- + event_receive NO_WAIT case +-- + + procedure TEST_INIT; + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution time +-- of a blocking EVENT_RECEIVE. After this the following +-- operations are timed and the execution time is reported: +-- +-- + EVENT_SEND which does not ready a task +-- + EVENT_RECEIVE with the event condition available +-- + EVENT_SEND which readies a task +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks executive a blocking EVENT_RECEIVE after +-- initialization is complete. The first of these tasks to +-- execute starts the timer. +-- + + procedure HIGH_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm16/tmtest.adb b/c/src/ada-tests/tmtests/tm16/tmtest.adb new file mode 100644 index 0000000000..5408fb84c9 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm16/tmtest.adb @@ -0,0 +1,197 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 16 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:52 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 16 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ), + 251, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TEST INIT" ); + + RTEMS.TASK_START( + ID, + TMTEST.TEST_INIT'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TEST INIT" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + PRIORITY : RTEMS.TASK_PRIORITY; + INDEX : RTEMS.UNSIGNED32; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + STATUS : RTEMS.STATUS_CODES; + begin + + PRIORITY := 250; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'M', 'I', 'D', ' ' ), + PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( + TMTEST.TASK_ID( INDEX ), + TASK_ENTRY, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + PRIORITY := PRIORITY - 1; + + end loop; + + TMTEST.TASK_COUNT := 0; + + TIMER_DRIVER.INITIALIZE; -- starts the timer + + RTEMS.EVENT_SEND( -- preempts task + TMTEST.TASK_ID( TMTEST.TASK_COUNT ), + RTEMS.EVENT_16, + STATUS + ); + + end TEST_INIT; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + EVENT_OUT : RTEMS.EVENT_SET; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.EVENT_RECEIVE( -- task blocks + RTEMS.EVENT_16, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1; + + RTEMS.EVENT_SEND( -- preempts task + TMTEST.TASK_ID( TMTEST.TASK_COUNT ), + RTEMS.EVENT_16, + STATUS + ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + EVENT_OUT : RTEMS.EVENT_SET; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.EVENT_RECEIVE( -- task blocks + RTEMS.EVENT_16, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + EVENT_OUT, + STATUS + ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_SEND (preemptive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.EVENT_SEND + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end HIGH_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm16/tmtest.ads b/c/src/ada-tests/tmtests/tm16/tmtest.ads new file mode 100644 index 0000000000..6b801ba1be --- /dev/null +++ b/c/src/ada-tests/tmtests/tm16/tmtest.ads @@ -0,0 +1,149 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 16 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:53 joel Exp +-- + +with RTEMS; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + +-- +-- This variable is used to index through the TASK_ID array +-- so that events can be send to the next task. +-- + + TASK_COUNT : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. Once initialization +-- has been completed, this task sets the TASK_COUNT to 0 and +-- starts the timer before performing a preemptive EVENT_SEND. +-- + + procedure TEST_INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is highest priority task in the system. +-- Its first action is to perform a blocking EVENT_RECEIVE. +-- It is the last task to have its event set sent to it. Thus it +-- is the last task to be awakened by a preemptive EVENT_SEND. +-- After it preempts the last MIDDLE_TASKS, it stops the timer +-- and reports the execution time of preemptive EVENT_SEND. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a blocking EVENT_RECEIVE. When +-- readied, each task will increment the TASK_COUNT and +-- perform a preemptive EVENT_SEND. TASK_COUNT is used to +-- index the TASK_ID array in such a way that incrementing +-- TASK_COUNT makes it index the ID of the next task to +-- send events to. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm17/tmtest.adb b/c/src/ada-tests/tmtests/tm17/tmtest.adb new file mode 100644 index 0000000000..2d62e81da6 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm17/tmtest.adb @@ -0,0 +1,160 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 17 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:55 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 17 ***" ); + + TMTEST.TASK_PRIORITY := 254; + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + TMTEST.TASK_PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.LAST_TASK'ACCESS; + elsif INDEX = 0 then + TASK_ENTRY := TMTEST.FIRST_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( TMTEST.TASK_ID( INDEX ), TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + TMTEST.TASK_COUNT := 1; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- FIRST_TASK +-- + + procedure FIRST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + + TMTEST.TASK_PRIORITY := TMTEST.TASK_PRIORITY - 1; + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1; + + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID( TMTEST.TASK_COUNT ), + TMTEST.TASK_PRIORITY, + PREVIOUS_PRIORITY, + STATUS + ); + + end FIRST_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_PRIORITY := TMTEST.TASK_PRIORITY - 1; + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1; + + RTEMS.TASK_SET_PRIORITY( + TMTEST.TASK_ID( TMTEST.TASK_COUNT ), + TMTEST.TASK_PRIORITY, + PREVIOUS_PRIORITY, + STATUS + ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LAST_TASK +-- + + procedure LAST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_PRIORITY (preemptive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_SET_PRIORITY + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LAST_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm17/tmtest.ads b/c/src/ada-tests/tmtests/tm17/tmtest.ads new file mode 100644 index 0000000000..733b6ee32e --- /dev/null +++ b/c/src/ada-tests/tmtests/tm17/tmtest.ads @@ -0,0 +1,147 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 17 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:56 joel Exp +-- + +with RTEMS; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; + +package TMTEST is + +-- +-- These arrays contain the IDs and NAMEs of all RTEMS tasks created +-- by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + TASK_NAME : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.NAME; + +-- +-- These variables are used to index the TASK_ID array and change +-- the priority of each successive task such that the TASK_SET_PRIORITY +-- results in a preemption. +-- + + TASK_COUNT : RTEMS.UNSIGNED32; + TASK_PRIORITY : RTEMS.TASK_PRIORITY; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- FIRST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the first task to execute in the system. It +-- starts the timer and updates the TASK_COUNT and TASK_PRIORITY +-- variables so that a preemptive TASK_SET_PRIORITY can be performed. +-- + + procedure FIRST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASK +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks update the TASK_COUNT and TASK_PRIORITY variables +-- so that a preemptive TASK_SET_PRIORITY can be performed. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LAST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the last task to execute in the system. It +-- stops the timer and reports the execution time of a preemptive +-- TASK_SET_PRIORITY. +-- + + procedure LAST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm18/tmtest.adb b/c/src/ada-tests/tmtests/tm18/tmtest.adb new file mode 100644 index 0000000000..bd28b1d0d4 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm18/tmtest.adb @@ -0,0 +1,154 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 18 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:43:58 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 18 ***" ); + + TMTEST.TEST_INIT; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_INIT +-- + + procedure TEST_INIT + is + ID : RTEMS.ID; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + for INDEX in 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + + if INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.LAST_TASK'ACCESS; + elsif INDEX = 0 then + TASK_ENTRY := TMTEST.FIRST_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + end TEST_INIT; + +--PAGE +-- +-- FIRST_TASK +-- + + procedure FIRST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + + end FIRST_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LAST_TASK +-- + + procedure LAST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_DELETE (self)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_DELETE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LAST_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm18/tmtest.ads b/c/src/ada-tests/tmtests/tm18/tmtest.ads new file mode 100644 index 0000000000..27568738f5 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm18/tmtest.ads @@ -0,0 +1,135 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 18 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:43:59 joel Exp +-- + +with RTEMS; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; + +package TMTEST is + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_INIT +-- +-- DESCRIPTION: +-- +-- This subprogram performs test initialization. +-- + + procedure TEST_INIT; + +-- +-- FIRST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the first task to execute. It starts the +-- timer and performs a TASK_DELETE on itself. +-- + + procedure FIRST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASK +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a TASK_DELETE on themselves. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LAST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the last task to execute. It stops the +-- timer and reports the execution time of a TASK_DELETE SELF. +-- + + procedure LAST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm19/tmtest.adb b/c/src/ada-tests/tmtests/tm19/tmtest.adb new file mode 100644 index 0000000000..bb47514a25 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm19/tmtest.adb @@ -0,0 +1,287 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 19 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:01 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 19 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 127, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 2 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 2 ), + TMTEST.TASK_2'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 126, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 3 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK3" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 3 ), + TMTEST.TASK_3'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK3" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- PROCESS_ASR_FOR_PASS_1 +-- + + procedure PROCESS_ASR_FOR_PASS_1 ( + SIGNALS : in RTEMS.SIGNAL_SET + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_SEND (self)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.SIGNAL_SEND + ); + + TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" ); + + TIMER_DRIVER.INITIALIZE; + + end PROCESS_ASR_FOR_PASS_1; + +--PAGE +-- +-- PROCESS_ASR_FOR_PASS_2 +-- + + procedure PROCESS_ASR_FOR_PASS_2 ( + SIGNALS : in RTEMS.SIGNAL_SET + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.PUT_LINE( "SIGNAL_ENTER (preemptive) na" ); + + RTEMS.TASK_RESUME( TMTEST.TASK_ID( 3 ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" ); + + TIMER_DRIVER.INITIALIZE; + + end PROCESS_ASR_FOR_PASS_2; + +--PAGE +-- +-- TASK_1 +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + RTEMS.SIGNAL_CATCH( + TMTEST.PROCESS_ASR_FOR_PASS_1'ACCESS, + RTEMS.DEFAULT_MODES, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_CATCH", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.SIGNAL_CATCH + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.SIGNAL_SEND( TMTEST.TASK_ID( 2 ), RTEMS.SIGNAL_1, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_SEND (non-preemptive)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.SIGNAL_SEND + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS ); + + -- end time is done in ASR + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_RETURN (non-preemptive)", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + RTEMS.SIGNAL_CATCH( + TMTEST.PROCESS_ASR_FOR_PASS_2'ACCESS, + RTEMS.NO_PREEMPT, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS ); + + end TASK_1; + +--PAGE +-- +-- PROCESS_ASR_FOR_TASK_2 +-- + + procedure PROCESS_ASR_FOR_TASK_2 ( + SIGNALS : in RTEMS.SIGNAL_SET + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + NULL; + + end PROCESS_ASR_FOR_TASK_2; + +--PAGE +-- +-- TASK_2 +-- + + procedure TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SIGNAL_CATCH( + TMTEST.PROCESS_ASR_FOR_TASK_2'ACCESS, + RTEMS.DEFAULT_MODES, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" ); + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + + end TASK_2; + +--PAGE +-- +-- TASK_3 +-- + + procedure TASK_3 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_RETURN (preemptive)", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_3; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm19/tmtest.ads b/c/src/ada-tests/tmtests/tm19/tmtest.ads new file mode 100644 index 0000000000..d229734780 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm19/tmtest.ads @@ -0,0 +1,182 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 19 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:02 joel Exp +-- + +with RTEMS; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- PROCESS_ASR_FOR_PASS_1 +-- +-- DESCRIPTION: +-- +-- This subprogram is the ASR used to measure and report the +-- execution time of a SIGNAL_SEND to SELF. Before it exits +-- it starts the timer so that the execution time required to +-- exit from an ASR back to the same task can be measured. +-- + + procedure PROCESS_ASR_FOR_PASS_1 ( + SIGNALS : in RTEMS.SIGNAL_SET + ); + +-- +-- PROCESS_ASR_FOR_PASS_2 +-- +-- DESCRIPTION: +-- +-- This subprogram is the ASR which sets up for a preemptive +-- return from an ASR. Before it exits it starts the timer +-- so that the execution time required to exit from an ASR +-- and transfer control to the another task can be measured. +-- + + procedure PROCESS_ASR_FOR_PASS_2 ( + SIGNALS : in RTEMS.SIGNAL_SET + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting +-- the following execution times: +-- +-- + SIGNAL_CATCH +-- + non-preemptive SIGNAL_SEND +-- + non-preemptive return from an ASR +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- PROCESS_ASR_FOR_TASK_2 +-- +-- DESCRIPTION: +-- +-- This subprogram is the ASR for TASK_2. It performs no actions. +-- + + procedure PROCESS_ASR_FOR_TASK_2 ( + SIGNALS : in RTEMS.SIGNAL_SET + ); + +-- +-- TASK_2 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is used as the recipient of a SIGNAL_SEND. +-- After establishing an ASR, it suspends itself to insure +-- that it does not execute again. +-- + + procedure TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_3 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is used as the recipient of a preemptive +-- SIGNAL_SEND. This task suspends itself and is resumed by +-- an ASR for TASK_1. Once the task executes, it stops the +-- timer and reports the execution time for a preemptive +-- return from an ASR. +-- + + procedure TASK_3 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm20/tmtest.adb b/c/src/ada-tests/tmtests/tm20/tmtest.adb new file mode 100644 index 0000000000..909d340f99 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm20/tmtest.adb @@ -0,0 +1,588 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 20 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:04 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 20 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', '1' ), + 128, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK1" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', '2' ), + 129, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 2 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TASK2" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 2 ), + TMTEST.TASK_2'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TASK2" ); + + 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 + BUFFER_COUNT : RTEMS.UNSIGNED32; + INDEX : RTEMS.UNSIGNED32; + PREVIOUS_MODE : RTEMS.MODE; + PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY; + RETURN_VALUE : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.PARTITION_NAME := RTEMS.BUILD_NAME( 'P', 'A', 'R', 'T' ); + + TIMER_DRIVER.INITIALIZE; + + RTEMS.PARTITION_CREATE( + TMTEST.PARTITION_NAME, + TMTEST.PARTITION_AREA'ADDRESS, + 2048, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.PARTITION_ID, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_CREATE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.PARTITION_CREATE + ); + + TMTEST.REGION_NAME := RTEMS.BUILD_NAME( 'R', 'E', 'G', 'N' ); + + TIMER_DRIVER.INITIALIZE; + + RTEMS.REGION_CREATE( + TMTEST.REGION_NAME, + TMTEST.REGION_AREA'ADDRESS, + 2048, + 16, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.REGION_ID, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_CREATE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_CREATE + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.PARTITION_GET_BUFFER( + TMTEST.PARTITION_ID, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_GET_BUFFER (available)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER + ); + + BUFFER_COUNT := 0; + loop + + RTEMS.PARTITION_GET_BUFFER( + TMTEST.PARTITION_ID, + TMTEST.BUFFER_ADDRESSES( BUFFER_COUNT ), + STATUS + ); + + exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED ); + + BUFFER_COUNT := BUFFER_COUNT + 1; + + end loop; + + TIMER_DRIVER.INITIALIZE; + RTEMS.PARTITION_GET_BUFFER( + TMTEST.PARTITION_ID, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_GET_BUFFER (not available)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.PARTITION_GET_BUFFER + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.PARTITION_RETURN_BUFFER( + TMTEST.PARTITION_ID, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_RETURN_BUFFER", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.PARTITION_RETURN_BUFFER + ); + + for INDEX in 0 .. BUFFER_COUNT - 1 + loop + + RTEMS.PARTITION_RETURN_BUFFER( + TMTEST.PARTITION_ID, + TMTEST.BUFFER_ADDRESSES( INDEX ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + RTEMS.PARTITION_DELETE( TMTEST.PARTITION_ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_DELETE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.PARTITION_DELETE + ); + + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 400, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 400, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_3, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_GET_SEGMENT (available)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 1998, + RTEMS.NO_WAIT, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_4, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_GET_SEGMENT (NO_WAIT)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT + ); + + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_3, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_RETURN_SEGMENT (no tasks waiting)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT + ); + + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 400, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 1998, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + + -- execute TASK_2 + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_RETURN_SEGMENT (preempt)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT + ); + + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" ); + + RTEMS.TASK_MODE( + RTEMS.NO_PREEMPT, + RTEMS.PREEMPT_MASK, + PREVIOUS_MODE, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" ); + + RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 254, PREVIOUS_PRIORITY, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" ); + + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 400, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + + RTEMS.REGION_GET_SEGMENT( + TMTEST.REGION_ID, + 1998, + RTEMS.DEFAULT_OPTIONS, + RTEMS.NO_TIMEOUT, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + + -- execute TASK_2 + + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_2, + STATUS + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_DELETE( TMTEST.REGION_ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_DELETE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_DELETE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_INITIALIZE( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_INITIALIZE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_INITIALIZE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_OPEN( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_OPEN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_OPEN + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_CLOSE( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_CLOSE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_CLOSE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_READ( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_READ", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_READ + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_WRITE( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_WRITE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_WRITE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.IO_CONTROL( + 1, + 0, + RTEMS.NULL_ADDRESS, + RETURN_VALUE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_CONTROL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.IO_CONTROL + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +--PAGE +-- +-- TASK_2 +-- + + procedure TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_GET_SEGMENT (blocking)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_GET_SEGMENT + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + + -- preempt back to TASK_1 + + TIMER_DRIVER.INITIALIZE; + RTEMS.REGION_RETURN_SEGMENT( + TMTEST.REGION_ID, + TMTEST.BUFFER_ADDRESS_1, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_RETURN_SEGMENT (ready -- return)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.REGION_RETURN_SEGMENT + ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end TASK_2; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm20/tmtest.ads b/c/src/ada-tests/tmtests/tm20/tmtest.ads new file mode 100644 index 0000000000..649b1a3159 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm20/tmtest.ads @@ -0,0 +1,206 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 20 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:05 joel Exp +-- + +with STUB_DRIVER; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; + +package TMTEST 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 following are the ID and NAME of the RTEMS partition created +-- by this test. +-- + + PARTITION_ID : RTEMS.ID; + PARTITION_NAME : RTEMS.NAME; + +-- +-- These following are the ID and NAME of the RTEMS region created +-- by this test. +-- + + REGION_ID : RTEMS.ID; + REGION_NAME : RTEMS.NAME; + +-- +-- The following area defines a memory area to be used as the +-- memory space for a partition. +-- + + PARTITION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 ) + of RTEMS.UNSIGNED8; + for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT; + +-- +-- The following area defines a memory area to be used as the +-- memory space for a region. +-- + + REGION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 ) + of RTEMS.UNSIGNED8; + + for REGION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT; + +-- +-- The following are the buffers allocated from the region. +-- + + BUFFER_ADDRESS_1 : RTEMS.ADDRESS; + BUFFER_ADDRESS_2 : RTEMS.ADDRESS; + BUFFER_ADDRESS_3 : RTEMS.ADDRESS; + BUFFER_ADDRESS_4 : RTEMS.ADDRESS; + + BUFFER_ADDRESSES : array ( RTEMS.UNSIGNED32 + range 0 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ADDRESS; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting +-- the following execution times: +-- +-- + PARTITION_CREATE +-- + REGION_CREATE +-- + PARTITION_GET_BUFFER with a buffer available +-- + PARTITION_GET_BUFFER with no buffers available +-- + PARTITION_RETURN_BUFFER +-- + PARTITION_DELETE +-- + REGION_GET_SEGMENT with a segment available +-- + REGION_GET_SEGMENT with the NO_WAIT option +-- + REGION_RETURN_SEGMENT with no tasks waiting for memory +-- + REGION_RETURN_SEGMENT preemptive +-- + REGION_DELETE +-- + IO_INITIALIZE +-- + IO_OPEN +-- + IO_CLOSE +-- + IO_READ +-- + IO_WRITE +-- + IO_CONTROL +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_2 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting +-- the following execution times: +-- +-- + blocking REGION_GET_SEGMENT +-- + REGION_RETURN_SEGMENT which readies a task +-- + + 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 => + ( + 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 + ) + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 10, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 1, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm21/tmtest.adb b/c/src/ada-tests/tmtests/tm21/tmtest.adb new file mode 100644 index 0000000000..2f9847398b --- /dev/null +++ b/c/src/ada-tests/tmtests/tm21/tmtest.adb @@ -0,0 +1,300 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 21 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:07 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 21 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 250, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_1" ); + + RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK1" ); + + 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 + INDEX : RTEMS.UNSIGNED32; + ID : RTEMS.ID; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + INDEX, + 254, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.MESSAGE_QUEUE_CREATE( + INDEX, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" ); + + RTEMS.SEMAPHORE_CREATE( + INDEX, + TIME_TEST_SUPPORT.OPERATION_COUNT, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" ); + + RTEMS.REGION_CREATE( + INDEX, + TMTEST.REGION_AREA'ADDRESS, + 2048, + 16, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE" ); + + RTEMS.PARTITION_CREATE( + INDEX, + TMTEST.PARTITION_AREA'ADDRESS, + 2048, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" ); + + RTEMS.PORT_CREATE( + INDEX, + TMTEST.INTERNAL_PORT_AREA'ADDRESS, + TMTEST.EXTERNAL_PORT_AREA'ADDRESS, + 16#FF#, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_CREATE" ); + + RTEMS.TIMER_CREATE( INDEX, ID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" ); + + RTEMS.RATE_MONOTONIC_CREATE( INDEX, ID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_IDENT( INDEX, RTEMS.SEARCH_ALL_NODES, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_IDENT( + INDEX, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.SEMAPHORE_IDENT( + INDEX, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.SEMAPHORE_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PARTITION_IDENT( + INDEX, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PARTITION_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.REGION_IDENT( INDEX, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.REGION_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PORT_IDENT( INDEX, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PORT_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_IDENT( INDEX, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.TIMER_IDENT + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.RATE_MONOTONIC_IDENT( INDEX, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_IDENT + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm21/tmtest.ads b/c/src/ada-tests/tmtests/tm21/tmtest.ads new file mode 100644 index 0000000000..c9998c4ad4 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm21/tmtest.ads @@ -0,0 +1,160 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 21 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:08 joel Exp +-- + +with RTEMS; +with SYSTEM; +with TIMER_DRIVER; +with System.Storage_Elements; + +package TMTEST 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 variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- 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_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 ) + of RTEMS.UNSIGNED8; + for PARTITION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT; + +-- +-- These following are the ID and NAME of the RTEMS region created +-- by this test. +-- + + REGION_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 2047 ) + of RTEMS.UNSIGNED8; + for REGION_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + TASK_IDENT +-- + MESSAGE_QUEUE_IDENT +-- + SEMAPHORE_IDENT +-- + PARTITION_IDENT +-- + REGION_IDENT +-- + PORT_IDENT +-- + TIMER_IDENT +-- + RATE_MONOTONIC_IDENT +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 102, -- maximum # tasks + 100, -- maximum # timers + 100, -- maximum # semaphores + 100, -- maximum # message queues + 5, -- maximum # messages + 100, -- maximum # partitions + 100, -- maximum # regions + 100, -- maximum # dp memory areas + 100, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm22/tmtest.adb b/c/src/ada-tests/tmtests/tm22/tmtest.adb new file mode 100644 index 0000000000..721fbb8a59 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm22/tmtest.adb @@ -0,0 +1,249 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 22 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:10 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 22 ***" ); + + RTEMS.MESSAGE_QUEUE_CREATE( + RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' ), + 0, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.MESSAGE_QUEUE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ), + 10, + 2048, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" ); + + RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'P', 'R', 'M', 'T' ), + 11, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE PREEMPT" ); + + RTEMS.TASK_START( ID, TMTEST.PREEMPT_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START PREEMPT" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + 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 ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_BROADCAST( + TMTEST.MESSAGE_QUEUE_ID, + BUFFER_POINTER, + COUNT, + STATUS + ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_BROADCAST (readying)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST + ); + + RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" ); + + end HIGH_TASK; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + COUNT : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + 5, + 2048, + RTEMS.NO_PREEMPT, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" ); + + RTEMS.TASK_START( ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.MESSAGE_QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_MODES, + RTEMS.NO_TIMEOUT, + STATUS + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.MESSAGE_QUEUE_BROADCAST( + TMTEST.MESSAGE_QUEUE_ID, + BUFFER_POINTER, + COUNT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_BROADCAST (no waiting tasks)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST + ); + + RTEMS.MESSAGE_QUEUE_RECEIVE( + TMTEST.MESSAGE_QUEUE_ID, + BUFFER_POINTER, + RTEMS.DEFAULT_MODES, + RTEMS.NO_TIMEOUT, + STATUS + ); + + -- should go to PREEMPT_TASK here + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_BROADCAST (preempt)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_BROADCAST + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +--PAGE +-- +-- LOW_TASK +-- + + procedure PREEMPT_TASK ( + 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 ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.MESSAGE_QUEUE_BROADCAST( + TMTEST.MESSAGE_QUEUE_ID, + BUFFER_POINTER, + COUNT, + STATUS + ); + + -- should be preempted by LOW_TASK + + end PREEMPT_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm22/tmtest.ads b/c/src/ada-tests/tmtests/tm22/tmtest.ads new file mode 100644 index 0000000000..d98d0eeeba --- /dev/null +++ b/c/src/ada-tests/tmtests/tm22/tmtest.ads @@ -0,0 +1,144 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 22 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:11 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the message queue used for timing operations. +-- + + MESSAGE_QUEUE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is created by LOW_TASK and executes after +-- LOW_TASK has performed a blocking MESSAGE_QUEUE_RECEIVE. +-- This task then executes and performs a readying +-- MESSAGE_QUEUE_BROADCAST and reports its execution time. +-- Finally, the task suspends itself so LOW_TASK can continue +-- execution. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task performs a blocking MESSAGE_QUEUE_RECEIVE +-- so that when HIGH_TASK performs a MESSAGE_QUEUE_BROADCAST, +-- there will be a task to be readied. Following this, the +-- execution time for a MESSAGE_QUEUE_BROADCAST to a message +-- queue with no waiting tasks is measured and reported. +-- Then this task performs another blocking MESSAGE_QUEUE_RECEIVE +-- so that when PREEMPT_TASK performs a MESSAGE_QUEUE_BROADCAST, +-- PREEMPT_TASK will be preempted by this task. After control +-- of the processor is transferred back to this task by the +-- preemption, the timer is stopped and the execution time of +-- a preemptive MESSAGE_QUEUE_BROADCAST is reported. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- PREEMPT_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task starts the timer and performs a preemptive +-- MESSAGE_QUEUE_BROADCAST. +-- + + procedure PREEMPT_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 103, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 1, -- maximum # message queues + 101, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm23/tmtest.adb b/c/src/ada-tests/tmtests/tm23/tmtest.adb new file mode 100644 index 0000000000..f596127e63 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm23/tmtest.adb @@ -0,0 +1,399 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 23 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:14 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + OVERHEAD : RTEMS.UNSIGNED32; + TASK_PRIORITY : RTEMS.TASK_PRIORITY; + INDEX : RTEMS.UNSIGNED32; + ID : RTEMS.ID; + TASK_ENTRY : RTEMS.TASK_ENTRY_POINT; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 23 ***" ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TASK_PRIORITY := 5; + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + TASK_PRIORITY, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + if INDEX = 1 then + TASK_ENTRY := TMTEST.HIGH_TASK'ACCESS; + elsif INDEX = TIME_TEST_SUPPORT.OPERATION_COUNT then + TASK_ENTRY := TMTEST.LOW_TASK'ACCESS; + else + TASK_ENTRY := TMTEST.MIDDLE_TASKS'ACCESS; + end if; + + RTEMS.TASK_START( ID, TASK_ENTRY, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + TASK_PRIORITY := TASK_PRIORITY + 1; + + end loop; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- NULL_DELAY +-- + + procedure NULL_DELAY ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ) is + begin + + NULL; + + end NULL_DELAY; + +--PAGE +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.TASK_PRIORITY; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_CREATE( + INDEX, + TMTEST.TIMER_ID( INDEX ), + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_CREATE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_FIRE_AFTER( + TMTEST.TIMER_ID( INDEX ), + 500, + TMTEST.NULL_DELAY'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_AFTER (inactive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_FIRE_AFTER( + TMTEST.TIMER_ID( INDEX ), + 500, + TMTEST.NULL_DELAY'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_AFTER (active)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_FIRE_AFTER + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_CANCEL (active)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_CANCEL + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_CANCEL (inactive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_CANCEL + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_RESET (inactive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_RESET + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_RESET( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_RESET (active)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_RESET + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + + TMTEST.TIME_OF_DAY := ( 1988, 12, 31, 9, 0, 0, 0 ); + + RTEMS.CLOCK_SET( TMTEST.TIME_OF_DAY, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" ); + + TMTEST.TIME_OF_DAY.YEAR := 1989; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_FIRE_WHEN( + TMTEST.TIMER_ID( INDEX ), + TMTEST.TIME_OF_DAY, + TMTEST.NULL_DELAY'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_WHEN (inactive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_FIRE_WHEN( + TMTEST.TIMER_ID( INDEX ), + TMTEST.TIME_OF_DAY, + TMTEST.NULL_DELAY'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_WHEN (active)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_FIRE_WHEN + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_DELETE (active)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_DELETE + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_CREATE( INDEX, TMTEST.TIMER_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" ); + + RTEMS.TIMER_FIRE_AFTER( + TMTEST.TIMER_ID( INDEX ), + 500, + TMTEST.NULL_DELAY'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" ); + + RTEMS.TIMER_CANCEL( TMTEST.TIMER_ID( INDEX ), STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" ); + + end loop; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TIMER_DELETE( TMTEST.TIMER_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_DELETE (inactive)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TIMER_DELETE + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS ); + + end HIGH_TASK; + +--PAGE +-- +-- MIDDLE_TASKS +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.TASK_WAKE_WHEN( TMTEST.TIME_OF_DAY, STATUS ); + + end MIDDLE_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_WAKE_WHEN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.TASK_WAKE_WHEN + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm23/tmtest.ads b/c/src/ada-tests/tmtests/tm23/tmtest.ads new file mode 100644 index 0000000000..5fe500e485 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm23/tmtest.ads @@ -0,0 +1,168 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 23 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:15 joel Exp +-- + +with TIMER_DRIVER; +with TIME_TEST_SUPPORT; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS timers created by this test. +-- + + TIMER_ID : array ( RTEMS.UNSIGNED32 + range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of RTEMS.ID; + +-- +-- This data item contains a time of day used by all of the +-- "WHEN" directives timed in this test. +-- + + TIME_OF_DAY : RTEMS.TIME_OF_DAY; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- NULL_DELAY +-- +-- DESCRIPTION: +-- +-- This subprogram is a timer service routine. It performs +-- no actions. +-- + + procedure NULL_DELAY ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting +-- the following directive execution times: +-- +-- + TIMER_CREATE +-- + TIMER_FIRE_AFTER with an inactive timer +-- + TIMER_FIRE_AFTER with an active timer +-- + TIMER_CANCEL of an active timer +-- + TIMER_CANCEL of an inactive timer +-- + TIMER_RESET of an active timer +-- + TIMER_RESET of an inactive timer +-- + TIMER_FIRE_WHEN of an inactive timer +-- + TIMER_FIRE_WHEN of an active timer +-- + TIMER_DELETE of an active timer +-- + TIMER_DELETE of an inactive timer +-- +-- After measuring and reporting the above times, this task starts +-- the timer and executes the TASK_WAKE_WHEN directive. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks executes the TASK_WAKE_WHEN directive. +-- + + procedure MIDDLE_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASKS +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution time for +-- the TASK_WAKE_WHEN directive. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 110, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm24/tmtest.adb b/c/src/ada-tests/tmtests/tm24/tmtest.adb new file mode 100644 index 0000000000..2581a3629a --- /dev/null +++ b/c/src/ada-tests/tmtests/tm24/tmtest.adb @@ -0,0 +1,165 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 24 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:18 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 24 ***" ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.OVERHEAD := TIMER_DRIVER.READ_TIMER; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'H', 'I', 'G', 'H' ), + 10, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE HIGH" ); + + RTEMS.TASK_START( ID, TMTEST.HIGH_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START HIGH" ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'R', 'E', 'S', 'T' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( ID, TMTEST.TASKS'ACCESS, 0, 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 +-- +-- HIGH_TASK +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_WAKE_AFTER (no context switch)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + TMTEST.OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER + ); + + TMTEST.TASK_COUNT := 0; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end HIGH_TASK; + +--PAGE +-- +-- TASKS +-- + + procedure TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1; + + if TMTEST.TASK_COUNT = 1 then + + TIMER_DRIVER.INITIALIZE; + + elsif TMTEST.TASK_COUNT = TIME_TEST_SUPPORT.OPERATION_COUNT then + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_WAKE_AFTER (context switch)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + TMTEST.OVERHEAD, + RTEMS_CALLING_OVERHEAD.TASK_WAKE_AFTER + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end if; + + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + + end TASKS; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm24/tmtest.ads b/c/src/ada-tests/tmtests/tm24/tmtest.ads new file mode 100644 index 0000000000..0beebbb2d9 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm24/tmtest.ads @@ -0,0 +1,137 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 24 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:19 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- These arrays contain the IDs and NAMEs of all RTEMS tasks created +-- by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID; + TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME; + +-- +-- This variable is used to determine which task should +-- start the timer and which task should stop the timer +-- and report the execution time. +-- + + TASK_COUNT : RTEMS.UNSIGNED32; + +-- +-- This variable contains the execution time required of the +-- loop used to execute the directive. +-- + + OVERHEAD : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- execution time for an invocation of TASK_WAKE_AFTER which +-- attempts to yield but does not result in a context switch. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks are responsible for measuring and reporting the +-- execution time for an invocation of TASK_WAKE_AFTER which +-- attempts to yield but does result in a context switch. +-- + + procedure TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm25/tmtest.adb b/c/src/ada-tests/tmtests/tm25/tmtest.adb new file mode 100644 index 0000000000..b819eaa214 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm25/tmtest.adb @@ -0,0 +1,156 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 25 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:22 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 25 ***" ); + + RTEMS.SEMAPHORE_CREATE( + RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' ), + 0, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.SEMAPHORE_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ), + 254, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOW" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.LOW_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOW" ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'I', 'M', 'E' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TASK_ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( + TASK_ID, + TMTEST.HIGH_TASKS'ACCESS, + 0, + 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 +-- +-- HIGH_TASKS +-- + + procedure HIGH_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.SEMAPHORE_OBTAIN( + TMTEST.SEMAPHORE_ID, + RTEMS.DEFAULT_OPTIONS, + RTEMS.INTERVAL'LAST, + STATUS + ); + + end HIGH_TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.CLOCK_TICK( STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_TICK", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + 0, + RTEMS_CALLING_OVERHEAD.CLOCK_TICK + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm25/tmtest.ads b/c/src/ada-tests/tmtests/tm25/tmtest.ads new file mode 100644 index 0000000000..4c2184f0fa --- /dev/null +++ b/c/src/ada-tests/tmtests/tm25/tmtest.ads @@ -0,0 +1,118 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 25 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:23 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the ID of the semaphore used for timing operations. +-- + + SEMAPHORE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASKS +-- +-- DESCRIPTION: +-- +-- These RTEMS tasks perform a blocking SEMAPHORE_OBTAIN which +-- has an optional timeout. +-- + + procedure HIGH_TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting +-- the execution time for the CLOCK_TICK directive. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm26/tmtest.ads b/c/src/ada-tests/tmtests/tm26/tmtest.ads new file mode 100644 index 0000000000..6d9fb0ddd8 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm26/tmtest.ads @@ -0,0 +1,227 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 26 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:27 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This points to the RTEMS task control block for the MIDDLE_TASK. +-- + + MIDDLE_TCB : RTEMS.TCB_POINTER; + +-- +-- The following is the ID of the semaphore used for timing operations. +-- + + SEMAPHORE_ID : RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- NULL_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task has a NULL body and is only included to +-- allow TASK_START to be invoked without impacting another +-- task. +-- + + procedure NULL_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- HIGH_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is the highest priority test task and +-- thus executes first. It is responsible for measuring +-- and reporting the following times: +-- +-- + THREAD_DISABLE_DISPATCH +-- + THREAD_ENABLE_DISPATCH +-- + THREAD_SET_STATE +-- +-- After measuring and reporting the above times, this task +-- starts the timer and forces dispatch to the MIDDLE_TASK. +-- + + procedure HIGH_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- MIDDLE_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- time for THREAD_DISPATCH without any floating point context +-- save and restore involved. Following this, it starts the +-- timer and forces a CONTEXT_SWITCH to the LOW_TASK. +-- + + procedure MIDDLE_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- LOW_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- time for a raw CONTEXT_SWITCH without any floating point context +-- save and restore involved. Following this, it starts the +-- timer and performs a CONTEXT_RESTORE_FP for the FLOATING_POINT_TASK_1 +-- and a CONTEXT_SWITCH to FLOATING_POINT_TASK_1. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- FLOATING_POINT_TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- time for a CONTEXT_SWITCH which restores the first floating +-- point context. Following this, it starts the +-- timer and performs a CONTEXT_SAVE_FP and CONTEXT_RESTORE_FP +-- and a CONTEXT_SWITCH to FLOATING_POINT_TASK_2. Once +-- control is returned to this task FLOATING_POINT_TASK_2, the +-- timer is stopped and the execution time for CONTEXT_SWITCH +-- from a used to an initialized floating point context is reported. +-- Following this, it starts the timer and performs a +-- CONTEXT_SAVE_FP and CONTEXT_RESTORE_FP and a CONTEXT_SWITCH +-- to FLOATING_POINT_TASK_2. +-- + + procedure FLOATING_POINT_TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- FLOATING_POINT_TASK_2 +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- time for a CONTEXT_SWITCH which switches from one freshly +-- initialized floating point context to another freshly +-- initialized floating point context. Following this, it +-- "dirties" its floating point context and starts the +-- timer. After this it performs a CONTEXT_SAVE_FP and +-- CONTEXT_RESTORE_FP and a CONTEXT_SWITCH to FLOATING_POINT_TASK_1. +-- Once control is returned to this task FLOATING_POINT_TASK_2, the +-- timer is stopped and the execution time for CONTEXT_SWITCH +-- from one used floating point context to another used floating +-- point context is reported. After this, this task invokes +-- the COMPLETE_TEST subprogram to measure and report +-- the remaining execution times measured by this test. +-- + + procedure FLOATING_POINT_TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- COMPLETE_TEST +-- +-- DESCRIPTION: +-- +-- This subprogram is responsible for measuring and reporting the +-- following execution times: +-- +-- + THREAD_RESUME +-- + THREAD_UNBLOCK +-- + THREAD_READY +-- + THREAD_GET with a valid id +-- + THREAD_GET with an invalid id +-- + + procedure COMPLETE_TEST; + +-- +-- This is the Initialization Tasks Table for this test. +-- + + INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := + (1=> + ( + RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ), -- task name + 2048, -- stack size + 1, -- priority + RTEMS.DEFAULT_ATTRIBUTES, -- attributes + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm27/tmtest.adb b/c/src/ada-tests/tmtests/tm27/tmtest.adb new file mode 100644 index 0000000000..d43cc15db4 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm27/tmtest.adb @@ -0,0 +1,268 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 27 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:29 joel Exp +-- + +with INTERRUPT_TIME_TEST_SUPPORT; +with INTERFACES; use INTERFACES; +with RTEMS_CALLING_OVERHEAD; +with RTEMS; +with RTEMS_TEST_SUPPORT; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST 27 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ), + 254, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.TASK_1'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK_1" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'A', '2', ' ' ), + 254, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 2 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE TASK_2" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 2 ), + TMTEST.TASK_2'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START TASK_2" ); + + 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 + begin + + RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 1; + + TMTEST.INTERRUPT_NEST := 1; + + INTERRUPT_TIME_TEST_SUPPORT.INSTALL_HANDLER( + TMTEST.ISR_HANDLER'ADDRESS + ); + + TIMER_DRIVER.INITIALIZE; + INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT; + -- goes to ISR_HANDLER + + TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_ENTER (nested interrupt)", + TMTEST.INTERRUPT_ENTER_NESTED_TIME, + 1, + 0, + 0 + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_RETURN (nested interrupt)", + TMTEST.INTERRUPT_RETURN_NESTED_TIME, + 1, + 0, + 0 + ); + + TMTEST.INTERRUPT_NEST := 0; + + RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 0; + + TIMER_DRIVER.INITIALIZE; + INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT; + -- goes to ISR_HANDLER + + TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_ENTER (no preempt)", + TMTEST.INTERRUPT_ENTER_TIME, + 1, + 0, + 0 + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_RETURN (no preempt)", + TMTEST.INTERRUPT_RETURN_TIME, + 1, + 0, + 0 + ); + + RTEMS_TEST_SUPPORT.THREAD_DISPATCH_DISABLE_LEVEL := 0; + + RTEMS_TEST_SUPPORT.THREAD_HEIR := + RTEMS_TEST_SUPPORT.THREAD_TO_CONTROL_POINTER( + RTEMS_TEST_SUPPORT.CHAIN_NODE_POINTER_TO_ADDRESS( + RTEMS_TEST_SUPPORT.THREAD_READY_CHAIN( 254 ).LAST + ) + ); + + RTEMS_TEST_SUPPORT.CONTEXT_SWITCH_NECESSARY := TRUE; + + TIMER_DRIVER.INITIALIZE; + INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT; + -- goes to ISR_HANDLER + + end TASK_1; + +--PAGE +-- +-- TASK_2 +-- + + procedure TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + begin + + TMTEST.INTERRUPT_RETURN_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_ENTER (preempt)", + TMTEST.INTERRUPT_ENTER_TIME, + 1, + 0, + 0 + ); + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_RETURN (preempt)", + TMTEST.INTERRUPT_RETURN_TIME, + 1, + 0, + 0 + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_2; + +--PAGE +-- +-- ISR_HANDLER +-- + +-- +-- The ISR_HANDLER and ISR_HANDLER_INNER subprograms are structured +-- so that there will be as little entry overhead as possible included +-- in the interrupt entry time. +-- + + procedure ISR_HANDLER ( + VECTOR : in RTEMS.VECTOR_NUMBER + ) is + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TMTEST.ISR_HANDLER_INNER; + + end ISR_HANDLER; + +-- +-- ISR_HANDLER_INNER +-- + + procedure ISR_HANDLER_INNER + is + begin + + -- enable tracing here is necessary + + INTERRUPT_TIME_TEST_SUPPORT.CLEAR_INTERRUPT; + + case TMTEST.INTERRUPT_NEST is + when 0 => + TMTEST.INTERRUPT_ENTER_TIME := TMTEST.END_TIME; + + when 1 => + TMTEST.INTERRUPT_ENTER_TIME := TMTEST.END_TIME; + TMTEST.INTERRUPT_NEST := 2; + TIMER_DRIVER.INITIALIZE; + INTERRUPT_TIME_TEST_SUPPORT.CAUSE_INTERRUPT; + -- goes to a nested copy of ISR_HANDLER + + TMTEST.INTERRUPT_RETURN_NESTED_TIME := TIMER_DRIVER.READ_TIMER; + + when 2 => + TMTEST.INTERRUPT_ENTER_NESTED_TIME := TMTEST.END_TIME; + + when others => + NULL; + + end case; + + -- Start the timer so interrupt return times can be measured + + TIMER_DRIVER.INITIALIZE; + + end ISR_HANDLER_INNER; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm27/tmtest.ads b/c/src/ada-tests/tmtests/tm27/tmtest.ads new file mode 100644 index 0000000000..4911cd8c99 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm27/tmtest.ads @@ -0,0 +1,169 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 27 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:30 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- The following variable indicates which interrupt case is +-- currently being timed. +-- + + INTERRUPT_NEST : RTEMS.UNSIGNED32; + +-- +-- The following variables are set to the appropriate execution +-- times by the ISR. This is done so the times will be available +-- to be printed by a task. +-- + + INTERRUPT_ENTER_TIME : RTEMS.UNSIGNED32; + INTERRUPT_RETURN_TIME : RTEMS.UNSIGNED32; + + INTERRUPT_ENTER_NESTED_TIME : RTEMS.UNSIGNED32; + INTERRUPT_RETURN_NESTED_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task reports the following execution times: +-- +-- + interrupt entry overhead for a nested interrupt +-- + interrupt exit overhead for a nested interrupt +-- + interrupt entry overhead when no preemption occurs +-- + interrupt exit overhead when no preemption occurs +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_2 +-- +-- DESCRIPTION: +-- +-- This RTEMS task reports the following execution times: +-- +-- + interrupt entry overhead when preemption occurs +-- + interrupt exit overhead when preemption occurs +-- + + procedure TASK_2 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- ISR_HANDLER +-- +-- DESCRIPTION: +-- +-- This subprogram is the test ISR. It simply stops the +-- timer and save the execution time for ISR_HANDLER_INNER. +-- This is done to minimize the subroutine linkage overhead +-- for this routine. +-- + + procedure ISR_HANDLER ( + VECTOR : in RTEMS.VECTOR_NUMBER + ); + +-- +-- ISR_HANDLER_INNER +-- +-- DESCRIPTION: +-- +-- This subprogram is responsible for storing the execution +-- time for the case currently being timed. +-- + + procedure ISR_HANDLER_INNER; + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm28/tmtest.adb b/c/src/ada-tests/tmtests/tm28/tmtest.adb new file mode 100644 index 0000000000..098ba750b6 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm28/tmtest.adb @@ -0,0 +1,176 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 28 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:33 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + TASK_ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 28 ***" ); + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.TEST_TASK'ACCESS, + 0, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" ); + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TEST_TASK +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + NAME : RTEMS.NAME; + OVERHEAD : RTEMS.UNSIGNED32; + CONVERTED : RTEMS.ADDRESS; + STATUS : RTEMS.STATUS_CODES; + begin + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + NAME := RTEMS.BUILD_NAME( 'P', 'O', 'R', 'T' ); + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PORT_CREATE( + NAME, + TMTEST.INTERNAL_PORT_AREA'ADDRESS, + TMTEST.EXTERNAL_PORT_AREA'ADDRESS, + 16#FF#, + TMTEST.PORT_ID( INDEX ), + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PORT_CREATE + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PORT_EXTERNAL_TO_INTERNAL( + TMTEST.PORT_ID( 1 ), + TMTEST.EXTERNAL_PORT_AREA( 16#F# )'ADDRESS, + CONVERTED, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_EXTERNAL_TO_INTERNAL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PORT_EXTERNAL_TO_INTERNAL + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PORT_INTERNAL_TO_EXTERNAL( + TMTEST.PORT_ID( 1 ), + TMTEST.INTERNAL_PORT_AREA( 16#F# )'ADDRESS, + CONVERTED, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_INTERNAL_TO_EXTERNAL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PORT_INTERNAL_TO_EXTERNAL + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + RTEMS.PORT_DELETE( TMTEST.PORT_ID( INDEX ), STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.PORT_DELETE + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TEST_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm28/tmtest.ads b/c/src/ada-tests/tmtests/tm28/tmtest.ads new file mode 100644 index 0000000000..8906448587 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm28/tmtest.ads @@ -0,0 +1,144 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 28 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:34 joel Exp +-- + +with SYSTEM; +with TIME_TEST_SUPPORT; +with TIMER_DRIVER; +with RTEMS; +with System.Storage_Elements; + +package TMTEST is + +-- +-- This array contains the IDs of all RTEMS tasks created by this test. +-- + + TASK_ID : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID; + +-- +-- This array contains the IDs of all RTEMS ports created by this test. +-- + + PORT_ID : array ( RTEMS.UNSIGNED32 + range 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT ) of 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 variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and reporting the +-- following directive execution times: +-- +-- + PORT_CREATE +-- + PORT_EXTERNAL_TO_INTERNAL +-- + PORT_INTERNAL_TO_EXTERNAL +-- + PORT_DELETE +-- + + procedure TEST_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 2, -- maximum # tasks + 0, -- maximum # timers + 0, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 100, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm29/tmtest.adb b/c/src/ada-tests/tmtests/tm29/tmtest.adb new file mode 100644 index 0000000000..6aaa13db34 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm29/tmtest.adb @@ -0,0 +1,234 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Test 29 of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:36 joel Exp +-- + +with INTERFACES; use INTERFACES; +with RTEMS; +with RTEMS_CALLING_OVERHEAD; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST is + +--PAGE +-- +-- INIT +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.ID; + STATUS : RTEMS.STATUS_CODES; + begin + + TEXT_IO.NEW_LINE( 2 ); + TEXT_IO.PUT_LINE( "*** TIME TEST 29 ***" ); + + TMTEST.PERIOD_NAME := RTEMS.BUILD_NAME( 'P', 'R', 'D', ' ' ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_CREATE", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CREATE + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_PERIOD (initial)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_PERIOD( ID, RTEMS.PERIOD_STATUS, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_PERIOD (STATUS)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_CANCEL", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_CANCEL + ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_DELETE (cancelled)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE + ); + + RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" ); + + RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_PERIOD" ); + + TIMER_DRIVER.INITIALIZE; + RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS ); + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_DELETE (active)", + TMTEST.END_TIME, + 1, + 0, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_DELETE + ); + + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ), + 128, + 1024, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( ID, TMTEST.TASKS'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + end loop; + + RTEMS.TASK_CREATE( + RTEMS.BUILD_NAME( 'L', 'O', 'W', ' ' ), + 200, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" ); + + RTEMS.TASK_START( ID, TMTEST.LOW_TASK'ACCESS, 0, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" ); + + TMTEST.TASK_COUNT := 0; + + RTEMS.TASK_DELETE( RTEMS.SELF, STATUS ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" ); + + end INIT; + +--PAGE +-- +-- TASKS +-- + + procedure TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + ID : RTEMS.NAME; + STATUS : RTEMS.STATUS_CODES; + begin + + RTEMS.RATE_MONOTONIC_CREATE( TMTEST.PERIOD_NAME, ID, STATUS ); + RTEMS.RATE_MONOTONIC_PERIOD( ID, 10, STATUS ); + + -- Give up the processor to allow all tasks to actually + -- create and start their period timer before the benchmark + -- timer driver is initialized. + + RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS ); + + TMTEST.TASK_COUNT := TMTEST.TASK_COUNT + 1; + + if TMTEST.TASK_COUNT = 1 then + TIMER_DRIVER.INITIALIZE; + end if; + + RTEMS.RATE_MONOTONIC_PERIOD( ID, 100, STATUS ); + + end TASKS; + +--PAGE +-- +-- LOW_TASK +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + OVERHEAD := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_PERIOD (blocking)", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + RTEMS_CALLING_OVERHEAD.RATE_MONOTONIC_PERIOD + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end LOW_TASK; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tm29/tmtest.ads b/c/src/ada-tests/tmtests/tm29/tmtest.ads new file mode 100644 index 0000000000..c5b1936438 --- /dev/null +++ b/c/src/ada-tests/tmtests/tm29/tmtest.ads @@ -0,0 +1,134 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Test 29 of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:37 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST is + +-- +-- The following is the name used for all periods created by this test. +-- + + PERIOD_NAME : RTEMS.NAME; + +-- +-- The following is used to allow all tasks to create and start +-- their period timers before the timer is started for timing +-- the blocking case of RATE_MONOTONIC_PERIOD. +-- + + TASK_COUNT : RTEMS.UNSIGNED32; + +-- +-- The following variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. It also measures and +-- reports the following directive execution times: +-- +-- + RATE_MONOTONIC_CREATE +-- + RATE_MONOTONIC_PERIOD the initial time +-- + RATE_MONOTONIC_PERIOD for a period's status +-- + RATE_MONOTONIC_CANCEL +-- + RATE_MONOTONIC_DELETE of a cancelled period +-- + RATE_MONOTONIC_DELETE of an active period +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_TASK +-- +-- DESCRIPTION: +-- +-- The first of these RTEMS tasks starts the timer. All of these +-- tasks execute a blocking RATE_MONOTONIC_PERIOD. +-- + + procedure TASKS ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TEST_TASK +-- +-- DESCRIPTION: +-- +-- This RTEMS task stops the timer and reports the execution +-- time for a blocking RATE_MONOTONIC_PERIOD. +-- + + procedure LOW_TASK ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 111, -- 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 + 111, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tmck/tmtest.adb b/c/src/ada-tests/tmtests/tmck/tmtest.adb new file mode 100644 index 0000000000..4aca7842cd --- /dev/null +++ b/c/src/ada-tests/tmtests/tmck/tmtest.adb @@ -0,0 +1,220 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Timer Check Test of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:39 joel Exp +-- + +with TIMER_DRIVER; +with INTERFACES; use INTERFACES; +with RTEMS; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST CHECK ***" ); + + TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE ); + + TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); + + RTEMS.TASK_CREATE( + TMTEST.TASK_NAME( 1 ), + 1, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.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 + INDEX : RTEMS.UNSIGNED32; + begin + + TMTEST.CHECK_READ_TIMER; + +TEST_SUPPORT.PAUSE; + + TIMER_DRIVER.INITIALIZE; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "NULL timer stopped at", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 0 .. 1000 + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "LOOP (1000) timer stopped at", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 0 .. 10000 + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "LOOP (10000) timer stopped at", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 0 .. 50000 + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "LOOP (50000) timer stopped at", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + TIMER_DRIVER.INITIALIZE; + for INDEX in 0 .. 100000 + loop + TIMER_DRIVER.EMPTY_FUNCTION; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + TIME_TEST_SUPPORT.PUT_TIME( + "LOOP (100000) timer stopped at", + TMTEST.END_TIME, + 1, + 0, + 0 + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +--PAGE +-- +-- CHECK_READ_TIMER +-- + + procedure CHECK_READ_TIMER + is + INDEX : RTEMS.UNSIGNED32; + TIME : RTEMS.UNSIGNED32; + begin + + for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST + loop + TMTEST.DISTRIBUTION( INDEX ) := 0; + end loop; + + for INDEX in 1 .. TMTEST.OPERATION_COUNT + loop + + loop + TIMER_DRIVER.INITIALIZE; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + exit when + TMTEST.END_TIME <= RTEMS.UNSIGNED32( TMTEST.DISTRIBUTION'LAST ); + + TEXT_IO.PUT( "TOO LONG (" ); + UNSIGNED32_IO.PUT( TMTEST.END_TIME ); + TEXT_IO.PUT_LINE( ")!!!" ); + end loop; + + TMTEST.DISTRIBUTION( TMTEST.END_TIME ) := + TMTEST.DISTRIBUTION( TMTEST.END_TIME ) + 1; + + end loop; + + TEXT_IO.PUT_LINE( + "Units may not be in microseconds for this test!!!" + ); + + TIME := 0; + + for INDEX in TMTEST.DISTRIBUTION'FIRST .. TMTEST.DISTRIBUTION'LAST + loop + if TMTEST.DISTRIBUTION( INDEX ) /= 0 then + TIME := TIME + (TMTEST.DISTRIBUTION( INDEX ) * INDEX); + UNSIGNED32_IO.PUT( INDEX ); + TEXT_IO.PUT( " " ); + UNSIGNED32_IO.PUT( TMTEST.DISTRIBUTION( INDEX ) ); + TEXT_IO.NEW_LINE; + end if; + end loop; + + TEXT_IO.PUT( "Total time = " ); + UNSIGNED32_IO.PUT( TIME ); + TEXT_IO.NEW_LINE; + + end CHECK_READ_TIMER; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tmck/tmtest.ads b/c/src/ada-tests/tmtests/tmck/tmtest.ads new file mode 100644 index 0000000000..76c65b7c00 --- /dev/null +++ b/c/src/ada-tests/tmtests/tmck/tmtest.ads @@ -0,0 +1,135 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Timer Check Test of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:40 joel Exp +-- + +with TIMER_DRIVER; +with RTEMS; + +package TMTEST 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 variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- The following defines the number of iterations of each timed +-- operation to perform. +-- + + OPERATION_COUNT : constant RTEMS.UNSIGNED32 := 100000; + +-- +-- The following array is used to determine how many times +-- each time between 0 and 1000 microseconds was returned +-- when simply starting and stopping the timer. + + DISTRIBUTION : array ( RTEMS.UNSIGNED32 range 0 .. 10000 ) of RTEMS.UNSIGNED32; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task invokes CHECK_READ_TIMER before demonstrating +-- that increasing the order of magnitude of the number of loop +-- iterations performed has a corresponding impact on the time +-- reported by the timer driver. +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- CHECK_READ_TIMER +-- +-- DESCRIPTION: +-- +-- This subprogram is used to determine the overhead associated +-- with starting and stopping the timer. It is also useful +-- for determining if unexpected times will be reported. +-- + + procedure CHECK_READ_TIMER; + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 2, -- maximum # tasks + 0, -- maximum # timers + 1, -- maximum # semaphores + 0, -- maximum # message queues + 0, -- maximum # messages + 0, -- maximum # partitions + 0, -- maximum # regions + 0, -- maximum # dp memory areas + 0, -- maximum # periods + 0, -- maximum # user extensions + RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick + 0 -- # ticks in a timeslice + ); + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb new file mode 100644 index 0000000000..79f3241699 --- /dev/null +++ b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.adb @@ -0,0 +1,876 @@ +-- +-- DUMMY_RTEMS / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package contains implementation of stub routines +-- which are used to time the invocation overhead incurred +-- with an Ada application program invokes each RTEMS directive. +-- +-- 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. +-- +-- dummy_rtems.adb,v 1.3 1995/07/12 19:44:42 joel Exp +-- + +with RTEMS; + +package body DUMMY_RTEMS is + +-- Initialization Manager + + procedure INITIALIZE_EXECUTIVE ( + CONFIGURATION_TABLE : in RTEMS.CONFIGURATION_TABLE_POINTER; + CPU_TABLE : in RTEMS.CPU_TABLE_POINTER; + TASK_TABLE : in RTEMS.INITIALIZATION_TASKS_TABLE_POINTER; + DRIVER_TABLE : in RTEMS.DRIVER_ADDRESS_TABLE_POINTER; + EXTENSION_TABLE : in RTEMS.EXTENSIONS_TABLE_POINTER; + MULTIPROCESSING_TABLE : in RTEMS.MULTIPROCESSING_TABLE_POINTER; + MPCI_TABLE : in RTEMS.MPCI_TABLE_POINTER + ) is + begin + + NULL; + + end INITIALIZE_EXECUTIVE; + + procedure SHUTDOWN_EXECUTIVE ( + RESULT : in RTEMS.UNSIGNED32 + ) is + begin + + NULL; + + end SHUTDOWN_EXECUTIVE; + +-- Task Manager + + procedure TASK_CREATE ( + NAME : in RTEMS.NAME; + INITIAL_PRIORITY : in RTEMS.TASK_PRIORITY; + STACK_SIZE : in RTEMS.UNSIGNED32; + INITIAL_MODES : in RTEMS.MODE; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_CREATE; + + procedure TASK_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_IDENT; + + procedure TASK_START ( + ID : in RTEMS.ID; + ENTRY_POINT : in RTEMS.TASK_ENTRY_POINT; + ARGUMENT : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_START; + + procedure TASK_RESTART ( + ID : in RTEMS.ID; + ARGUMENT : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_RESTART; + + procedure TASK_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_DELETE; + + procedure TASK_SUSPEND ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_SUSPEND; + + procedure TASK_RESUME ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_RESUME; + + procedure TASK_SET_PRIORITY ( + ID : in RTEMS.ID; + NEW_PRIORITY : in RTEMS.TASK_PRIORITY; + OLD_PRIORITY : out RTEMS.TASK_PRIORITY; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_SET_PRIORITY; + + procedure TASK_MODE ( + MODE_SET : in RTEMS.MODE; + MASK : in RTEMS.MODE; + PREVIOUS_MODE_SET : out RTEMS.MODE; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_MODE; + + procedure TASK_GET_NOTE ( + ID : in RTEMS.ID; + NOTEPAD : in RTEMS.NOTEPAD_INDEX; + NOTE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_GET_NOTE; + + procedure TASK_SET_NOTE ( + ID : in RTEMS.ID; + NOTEPAD : in RTEMS.NOTEPAD_INDEX; + NOTE : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_SET_NOTE; + + procedure TASK_WAKE_WHEN ( + TIME_BUFFER : in RTEMS.TIME_OF_DAY; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_WAKE_WHEN; + + procedure TASK_WAKE_AFTER ( + TICKS : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TASK_WAKE_AFTER; + +-- Interrupt Manager + + procedure INTERRUPT_CATCH ( + NEW_ISR_HANDLER : in RTEMS.ADDRESS; + VECTOR : in RTEMS.VECTOR_NUMBER; + OLD_ISR_HANDLER : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end INTERRUPT_CATCH; + +-- Clock Manager + + procedure CLOCK_GET ( + OPTION : in RTEMS.CLOCK_GET_OPTIONS; + TIME_BUFFER : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end CLOCK_GET; + + procedure CLOCK_SET ( + TIME_BUFFER : in RTEMS.TIME_OF_DAY; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end CLOCK_SET; + + procedure CLOCK_TICK ( + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end CLOCK_TICK; + +-- Timer Manager + + procedure TIMER_CREATE ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_CREATE; + + procedure TIMER_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_DELETE; + + procedure TIMER_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_IDENT; + + procedure TIMER_FIRE_AFTER ( + ID : in RTEMS.ID; + TICKS : in RTEMS.INTERVAL; + ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE; + USER_DATA : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_FIRE_AFTER; + + procedure TIMER_FIRE_WHEN ( + ID : in RTEMS.ID; + WALL_TIME : in RTEMS.TIME_OF_DAY; + ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE; + USER_DATA : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_FIRE_WHEN; + + procedure TIMER_RESET ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_RESET; + + procedure TIMER_CANCEL ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end TIMER_CANCEL; + +-- Semaphore Manager + + procedure SEMAPHORE_CREATE ( + NAME : in RTEMS.NAME; + COUNT : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SEMAPHORE_CREATE; + + procedure SEMAPHORE_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SEMAPHORE_DELETE; + + procedure SEMAPHORE_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SEMAPHORE_IDENT; + + procedure SEMAPHORE_OBTAIN ( + ID : in RTEMS.ID; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SEMAPHORE_OBTAIN; + + procedure SEMAPHORE_RELEASE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SEMAPHORE_RELEASE; + +-- Message Queue Manager + + procedure MESSAGE_QUEUE_CREATE ( + NAME : in RTEMS.NAME; + COUNT : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_CREATE; + + procedure MESSAGE_QUEUE_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_IDENT; + + procedure MESSAGE_QUEUE_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_DELETE; + + procedure MESSAGE_QUEUE_SEND ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_SEND; + + procedure MESSAGE_QUEUE_URGENT ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_URGENT; + + procedure MESSAGE_QUEUE_BROADCAST ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + COUNT : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_BROADCAST; + + procedure MESSAGE_QUEUE_RECEIVE ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_RECEIVE; + + procedure MESSAGE_QUEUE_FLUSH ( + ID : in RTEMS.ID; + COUNT : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end MESSAGE_QUEUE_FLUSH; + +-- Event Manager + + procedure EVENT_SEND ( + ID : in RTEMS.ID; + EVENT_IN : in RTEMS.EVENT_SET; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end EVENT_SEND; + + procedure EVENT_RECEIVE ( + EVENT_IN : in RTEMS.EVENT_SET; + OPTION_SET : in RTEMS.OPTION; + TICKS : in RTEMS.INTERVAL; + EVENT_OUT : out RTEMS.EVENT_SET; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end EVENT_RECEIVE; + +-- Signal Manager + + procedure SIGNAL_CATCH ( + ASR_HANDLER : in RTEMS.ASR_HANDLER; + MODE_SET : in RTEMS.MODE; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SIGNAL_CATCH; + + procedure SIGNAL_SEND ( + ID : in RTEMS.ID; + SIGNAL_SET : in RTEMS.SIGNAL_SET; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end SIGNAL_SEND; + +-- Partition Manager + + procedure PARTITION_CREATE ( + NAME : in RTEMS.NAME; + STARTING_ADDRESS : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + BUFFER_SIZE : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PARTITION_CREATE; + + procedure PARTITION_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PARTITION_IDENT; + + procedure PARTITION_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PARTITION_DELETE; + + procedure PARTITION_GET_BUFFER ( + ID : in RTEMS.ID; + BUFFER : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PARTITION_GET_BUFFER; + + procedure PARTITION_RETURN_BUFFER ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PARTITION_RETURN_BUFFER; + +-- Region Manager + + procedure REGION_CREATE ( + NAME : in RTEMS.NAME; + STARTING_ADDRESS : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + PAGE_SIZE : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end REGION_CREATE; + + procedure REGION_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end REGION_IDENT; + + procedure REGION_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end REGION_DELETE; + + procedure REGION_GET_SEGMENT ( + ID : in RTEMS.ID; + SIZE : in RTEMS.UNSIGNED32; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + SEGMENT : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end REGION_GET_SEGMENT; + + procedure REGION_RETURN_SEGMENT ( + ID : in RTEMS.ID; + SEGMENT : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end REGION_RETURN_SEGMENT; + +-- Dual Ported Memory Manager + + procedure PORT_CREATE ( + NAME : in RTEMS.NAME; + INTERNAL_START : in RTEMS.ADDRESS; + EXTERNAL_START : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PORT_CREATE; + + procedure PORT_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PORT_IDENT; + + procedure PORT_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PORT_DELETE; + + procedure PORT_EXTERNAL_TO_INTERNAL ( + ID : in RTEMS.ID; + EXTERNAL : in RTEMS.ADDRESS; + INTERNAL : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PORT_EXTERNAL_TO_INTERNAL; + + procedure PORT_INTERNAL_TO_EXTERNAL ( + ID : in RTEMS.ID; + INTERNAL : in RTEMS.ADDRESS; + EXTERNAL : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end PORT_INTERNAL_TO_EXTERNAL; + +-- Input/Output Manager + + procedure IO_INITIALIZE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_INITIALIZE; + + procedure IO_OPEN ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_OPEN; + + procedure IO_CLOSE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_CLOSE; + + procedure IO_READ ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_READ; + + procedure IO_WRITE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_WRITE; + + procedure IO_CONTROL ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end IO_CONTROL; + +-- Fatal Error Manager + + procedure FATAL_ERROR_OCCURRED ( + THE_ERROR : in RTEMS.UNSIGNED32 + ) is + begin + + NULL; + + end FATAL_ERROR_OCCURRED; + +-- Rate Monotonic Manager + + procedure RATE_MONOTONIC_CREATE ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end RATE_MONOTONIC_CREATE; + + procedure RATE_MONOTONIC_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end RATE_MONOTONIC_IDENT; + + procedure RATE_MONOTONIC_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end RATE_MONOTONIC_DELETE; + + procedure RATE_MONOTONIC_CANCEL ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end RATE_MONOTONIC_CANCEL; + + procedure RATE_MONOTONIC_PERIOD ( + ID : in RTEMS.ID; + LENGTH : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ) is + begin + + RESULT := RTEMS.SUCCESSFUL; + + end RATE_MONOTONIC_PERIOD; + +-- Multiprocessing Manager + + procedure MULTIPROCESSING_ANNOUNCE + is + begin + + NULL; + + end MULTIPROCESSING_ANNOUNCE; + +end DUMMY_RTEMS; diff --git a/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads new file mode 100644 index 0000000000..ef9009173a --- /dev/null +++ b/c/src/ada-tests/tmtests/tmoverhd/dummy_rtems.ads @@ -0,0 +1,520 @@ +-- +-- DUMMY_RTEMS / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package contains specifications for stub routines +-- which are used to time the invocation overhead incurred +-- with an Ada application program invokes each RTEMS directive. +-- +-- 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. +-- +-- dummy_rtems.ads,v 1.3 1995/07/12 19:44:43 joel Exp +-- + +with RTEMS; + +package DUMMY_RTEMS is + +-- Initialization Manager + + procedure INITIALIZE_EXECUTIVE ( + CONFIGURATION_TABLE : in RTEMS.CONFIGURATION_TABLE_POINTER; + CPU_TABLE : in RTEMS.CPU_TABLE_POINTER; + TASK_TABLE : in RTEMS.INITIALIZATION_TASKS_TABLE_POINTER; + DRIVER_TABLE : in RTEMS.DRIVER_ADDRESS_TABLE_POINTER; + EXTENSION_TABLE : in RTEMS.EXTENSIONS_TABLE_POINTER; + MULTIPROCESSING_TABLE : in RTEMS.MULTIPROCESSING_TABLE_POINTER; + MPCI_TABLE : in RTEMS.MPCI_TABLE_POINTER + ); + + procedure SHUTDOWN_EXECUTIVE ( + RESULT : in RTEMS.UNSIGNED32 + ); + +-- Task Manager + + procedure TASK_CREATE ( + NAME : in RTEMS.NAME; + INITIAL_PRIORITY : in RTEMS.TASK_PRIORITY; + STACK_SIZE : in RTEMS.UNSIGNED32; + INITIAL_MODES : in RTEMS.MODE; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_START ( + ID : in RTEMS.ID; + ENTRY_POINT : in RTEMS.TASK_ENTRY_POINT; + ARGUMENT : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_RESTART ( + ID : in RTEMS.ID; + ARGUMENT : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_SUSPEND ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_RESUME ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_SET_PRIORITY ( + ID : in RTEMS.ID; + NEW_PRIORITY : in RTEMS.TASK_PRIORITY; + OLD_PRIORITY : out RTEMS.TASK_PRIORITY; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_MODE ( + MODE_SET : in RTEMS.MODE; + MASK : in RTEMS.MODE; + PREVIOUS_MODE_SET : out RTEMS.MODE; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_GET_NOTE ( + ID : in RTEMS.ID; + NOTEPAD : in RTEMS.NOTEPAD_INDEX; + NOTE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_SET_NOTE ( + ID : in RTEMS.ID; + NOTEPAD : in RTEMS.NOTEPAD_INDEX; + NOTE : in RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_WAKE_WHEN ( + TIME_BUFFER : in RTEMS.TIME_OF_DAY; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TASK_WAKE_AFTER ( + TICKS : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Interrupt Manager + + procedure INTERRUPT_CATCH ( + NEW_ISR_HANDLER : in RTEMS.ADDRESS; + VECTOR : in RTEMS.VECTOR_NUMBER; + OLD_ISR_HANDLER : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Clock Manager + + procedure CLOCK_GET ( + OPTION : in RTEMS.CLOCK_GET_OPTIONS; + TIME_BUFFER : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure CLOCK_SET ( + TIME_BUFFER : in RTEMS.TIME_OF_DAY; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure CLOCK_TICK ( + RESULT : out RTEMS.STATUS_CODES + ); + +-- Timer Manager + + procedure TIMER_CREATE ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_FIRE_AFTER ( + ID : in RTEMS.ID; + TICKS : in RTEMS.INTERVAL; + ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE; + USER_DATA : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_FIRE_WHEN ( + ID : in RTEMS.ID; + WALL_TIME : in RTEMS.TIME_OF_DAY; + ROUTINE : in RTEMS.TIMER_SERVICE_ROUTINE; + USER_DATA : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_RESET ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure TIMER_CANCEL ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Semaphore Manager + + procedure SEMAPHORE_CREATE ( + NAME : in RTEMS.NAME; + COUNT : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure SEMAPHORE_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure SEMAPHORE_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure SEMAPHORE_OBTAIN ( + ID : in RTEMS.ID; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure SEMAPHORE_RELEASE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Message Queue Manager + + procedure MESSAGE_QUEUE_CREATE ( + NAME : in RTEMS.NAME; + COUNT : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_SEND ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_URGENT ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_BROADCAST ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + COUNT : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_RECEIVE ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.BUFFER_POINTER; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure MESSAGE_QUEUE_FLUSH ( + ID : in RTEMS.ID; + COUNT : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Event Manager + + procedure EVENT_SEND ( + ID : in RTEMS.ID; + EVENT_IN : in RTEMS.EVENT_SET; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure EVENT_RECEIVE ( + EVENT_IN : in RTEMS.EVENT_SET; + OPTION_SET : in RTEMS.OPTION; + TICKS : in RTEMS.INTERVAL; + EVENT_OUT : out RTEMS.EVENT_SET; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Signal Manager + + procedure SIGNAL_CATCH ( + ASR_HANDLER : in RTEMS.ASR_HANDLER; + MODE_SET : in RTEMS.MODE; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure SIGNAL_SEND ( + ID : in RTEMS.ID; + SIGNAL_SET : in RTEMS.SIGNAL_SET; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Partition Manager + + procedure PARTITION_CREATE ( + NAME : in RTEMS.NAME; + STARTING_ADDRESS : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + BUFFER_SIZE : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PARTITION_IDENT ( + NAME : in RTEMS.NAME; + NODE : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PARTITION_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PARTITION_GET_BUFFER ( + ID : in RTEMS.ID; + BUFFER : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PARTITION_RETURN_BUFFER ( + ID : in RTEMS.ID; + BUFFER : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Region Manager + + procedure REGION_CREATE ( + NAME : in RTEMS.NAME; + STARTING_ADDRESS : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + PAGE_SIZE : in RTEMS.UNSIGNED32; + ATTRIBUTE_SET : in RTEMS.ATTRIBUTE; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure REGION_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure REGION_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure REGION_GET_SEGMENT ( + ID : in RTEMS.ID; + SIZE : in RTEMS.UNSIGNED32; + OPTION_SET : in RTEMS.OPTION; + TIMEOUT : in RTEMS.INTERVAL; + SEGMENT : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure REGION_RETURN_SEGMENT ( + ID : in RTEMS.ID; + SEGMENT : in RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Dual Ported Memory Manager + + procedure PORT_CREATE ( + NAME : in RTEMS.NAME; + INTERNAL_START : in RTEMS.ADDRESS; + EXTERNAL_START : in RTEMS.ADDRESS; + LENGTH : in RTEMS.UNSIGNED32; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PORT_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PORT_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PORT_EXTERNAL_TO_INTERNAL ( + ID : in RTEMS.ID; + EXTERNAL : in RTEMS.ADDRESS; + INTERNAL : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure PORT_INTERNAL_TO_EXTERNAL ( + ID : in RTEMS.ID; + INTERNAL : in RTEMS.ADDRESS; + EXTERNAL : out RTEMS.ADDRESS; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Input/Output Manager + + procedure IO_INITIALIZE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure IO_OPEN ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure IO_CLOSE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure IO_READ ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure IO_WRITE ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure IO_CONTROL ( + MAJOR : in RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : in RTEMS.DEVICE_MINOR_NUMBER; + ARGUMENT : in RTEMS.ADDRESS; + RETURN_VALUE : out RTEMS.UNSIGNED32; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Fatal Error Manager + + procedure FATAL_ERROR_OCCURRED ( + THE_ERROR : in RTEMS.UNSIGNED32 + ); + +-- Rate Monotonic Manager + + procedure RATE_MONOTONIC_CREATE ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure RATE_MONOTONIC_IDENT ( + NAME : in RTEMS.NAME; + ID : out RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure RATE_MONOTONIC_DELETE ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure RATE_MONOTONIC_CANCEL ( + ID : in RTEMS.ID; + RESULT : out RTEMS.STATUS_CODES + ); + + procedure RATE_MONOTONIC_PERIOD ( + ID : in RTEMS.ID; + LENGTH : in RTEMS.INTERVAL; + RESULT : out RTEMS.STATUS_CODES + ); + +-- Multiprocessing Manager + + procedure MULTIPROCESSING_ANNOUNCE; + +end DUMMY_RTEMS; diff --git a/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb b/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb new file mode 100644 index 0000000000..07cc787a42 --- /dev/null +++ b/c/src/ada-tests/tmtests/tmoverhd/tmtest.adb @@ -0,0 +1,1565 @@ +-- +-- TMTEST / BODY +-- +-- DESCRIPTION: +-- +-- This package is the implementation of Calling Overhead Test of the RTEMS +-- Timing 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. +-- +-- tmtest.adb,v 1.3 1995/07/12 19:44:45 joel Exp +-- + +with BSP; +with DUMMY_RTEMS; +with INTERFACES; use INTERFACES; +with RTEMS; +with TEST_SUPPORT; +with TEXT_IO; +with TIME_TEST_SUPPORT; +with UNSIGNED32_IO; + +package body TMTEST 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( "*** TIME TEST OVERHEAD ***" ); + + TIMER_DRIVER.SET_FIND_AVERAGE_OVERHEAD( TRUE ); + + TMTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME( 'T', 'A', '1', ' ' ); + + RTEMS.TASK_CREATE( + TMTEST.TASK_NAME( 1 ), + 254, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + TMTEST.TASK_ID( 1 ), + STATUS + ); + TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" ); + + RTEMS.TASK_START( + TMTEST.TASK_ID( 1 ), + TMTEST.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 +-- +-- TIMER_HANDLER +-- + + procedure TIMER_HANDLER ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ) is + begin + + NULL; + + end TIMER_HANDLER; + +--PAGE +-- +-- ISR_HANDLER +-- + + procedure ISR_HANDLER ( + VECTOR : in RTEMS.VECTOR_NUMBER + ) is + begin + + NULL; + + end ISR_HANDLER; + +--PAGE +-- +-- ASR_HANDLER +-- + + procedure ASR_HANDLER ( + SIGNALS : in RTEMS.SIGNAL_SET + ) is + begin + + NULL; + + end ASR_HANDLER; + +--PAGE +-- +-- TASK_1 +-- + + CPU_TABLE : aliased RTEMS.CPU_TABLE; + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ) is + NAME : RTEMS.NAME; + INDEX : RTEMS.UNSIGNED32; + OVERHEAD : RTEMS.UNSIGNED32; + ID : RTEMS.ID; + IN_PRIORITY : RTEMS.TASK_PRIORITY; + OUT_PRIORITY : RTEMS.TASK_PRIORITY; + IN_MODE : RTEMS.MODE; + MASK : RTEMS.MODE; + OUT_MODE : RTEMS.MODE; + NOTE : RTEMS.UNSIGNED32; + TIME : RTEMS.TIME_OF_DAY; + TIMEOUT : RTEMS.INTERVAL; + SIGNALS : RTEMS.SIGNAL_SET; + ADDRESS_1 : RTEMS.ADDRESS; + EVENTS : RTEMS.SIGNAL_SET; + BUFFER : RTEMS.BUFFER; + BUFFER_POINTER : RTEMS.BUFFER_POINTER; + COUNT : RTEMS.UNSIGNED32; + MAJOR : RTEMS.DEVICE_MAJOR_NUMBER; + MINOR : RTEMS.DEVICE_MINOR_NUMBER; + IO_RESULT : RTEMS.UNSIGNED32; + ERROR : RTEMS.UNSIGNED32; + STATUS : RTEMS.STATUS_CODES; + begin + + NAME := RTEMS.BUILD_NAME( 'N', 'A', 'M', 'E' ); + + BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS ); + +-- INITIALIZE_EXECUTIVE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.INITIALIZE_EXECUTIVE( + BSP.CONFIGURATION'ACCESS, + CPU_TABLE'ACCESS, + TMTEST.INITIALIZATION_TASKS'ACCESS, + RTEMS.NO_DEVICE_DRIVERS, + RTEMS.NO_USER_EXTENSIONS, + RTEMS.NO_MULTIPROCESSING_TABLE, + RTEMS.NO_MPCI_TABLE + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "INITIALIZE_EXECUTIVE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SHUTDOWN_EXECUTIVE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SHUTDOWN_EXECUTIVE( ERROR ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SHUTDOWN_EXECUTIVE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_CREATE( + NAME, + IN_PRIORITY, + 2048, + RTEMS.DEFAULT_MODES, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_IDENT( + NAME, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_START + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_START( ID, TMTEST.TASK_1'ACCESS, 0, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_START", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_RESTART + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_RESTART( ID, 0, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESTART", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_SUSPEND + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_SUSPEND( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SUSPEND", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_RESUME + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_RESUME( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_RESUME", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_SET_PRIORITY + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_SET_PRIORITY( + ID, + IN_PRIORITY, + OUT_PRIORITY, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_PRIORITY", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_MODE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_MODE( + IN_MODE, + MASK, + OUT_MODE, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_MODE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_GET_NOTE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_GET_NOTE( ID, 1, NOTE, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_GET_NOTE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_SET_NOTE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_SET_NOTE( ID, 1, NOTE, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_SET_NOTE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_WAKE_WHEN + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_WAKE_WHEN( TIME, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_WAKE_WHEN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TASK_WAKE_AFTER + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TASK_WAKE_AFTER( TIMEOUT, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TASK_WAKE_AFTER", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- INTERRUPT_CATCH + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.INTERRUPT_CATCH( + TMTEST.ISR_HANDLER'ADDRESS, + RTEMS.VECTOR_NUMBER'FIRST, + ADDRESS_1, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "INTERRUPT_CATCH", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- CLOCK_GET + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_GET", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- CLOCK_SET + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.CLOCK_SET( TIME, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_SET", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- CLOCK_TICK + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.CLOCK_TICK( STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "CLOCK_TICK", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +TEST_SUPPORT.PAUSE; + +-- TIMER_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_CREATE( NAME, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_IDENT( + NAME, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_FIRE_AFTER + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_FIRE_AFTER( + ID, + TIMEOUT, + TMTEST.TIMER_HANDLER'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_AFTER", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_FIRE_WHEN + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_FIRE_WHEN( + ID, + TIME, + TMTEST.TIMER_HANDLER'ACCESS, + RTEMS.NULL_ADDRESS, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_FIRE_WHEN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_RESET + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_RESET( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_RESET", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- TIMER_CANCEL + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.TIMER_CANCEL( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "TIMER_CANCEL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SEMAPHORE_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SEMAPHORE_CREATE( + NAME, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SEMAPHORE_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SEMAPHORE_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SEMAPHORE_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SEMAPHORE_IDENT( + NAME, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SEMAPHORE_OBTAIN + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SEMAPHORE_OBTAIN( + ID, + RTEMS.DEFAULT_OPTIONS, + TIMEOUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_OBTAIN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SEMAPHORE_RELEASE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SEMAPHORE_RELEASE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SEMAPHORE_RELEASE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_CREATE( + NAME, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_IDENT( + NAME, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_SEND + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_SEND( ID, BUFFER_POINTER, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_SEND", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_URGENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_URGENT( ID, BUFFER_POINTER, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_URGENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_BROADCAST + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_BROADCAST( + ID, + BUFFER_POINTER, + COUNT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_BROADCAST", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_RECEIVE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_RECEIVE( + ID, + BUFFER_POINTER, + RTEMS.DEFAULT_OPTIONS, + TIMEOUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_RECEIVE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MESSAGE_QUEUE_FLUSH + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MESSAGE_QUEUE_FLUSH( ID, COUNT, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MESSAGE_QUEUE_FLUSH", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +TEST_SUPPORT.PAUSE; + +-- EVENT_SEND + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.EVENT_SEND( ID, EVENTS, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_SEND", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- EVENT_RECEIVE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.EVENT_RECEIVE( + RTEMS.EVENT_16, + EVENTS, + RTEMS.DEFAULT_OPTIONS, + TIMEOUT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "EVENT_RECEIVE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SIGNAL_CATCH + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SIGNAL_CATCH( + TMTEST.ASR_HANDLER'ACCESS, + RTEMS.DEFAULT_MODES, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_CATCH", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- SIGNAL_SEND + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.SIGNAL_SEND( ID, SIGNALS, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "SIGNAL_SEND", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PARTITION_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PARTITION_CREATE( + NAME, + TMTEST.MEMORY_AREA'ADDRESS, + 2048, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PARTITION_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PARTITION_IDENT( + NAME, + RTEMS.SEARCH_ALL_NODES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PARTITION_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PARTITION_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PARTITION_GET_BUFFER + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PARTITION_GET_BUFFER( ID, ADDRESS_1, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_GET_BUFFER", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PARTITION_RETURN_BUFFER + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PARTITION_RETURN_BUFFER( ID, ADDRESS_1, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PARTITION_RETURN_BUFFER", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- REGION_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.REGION_CREATE( + NAME, + TMTEST.MEMORY_AREA'ADDRESS, + 2048, + 128, + RTEMS.DEFAULT_ATTRIBUTES, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- REGION_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.REGION_IDENT( + NAME, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- REGION_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.REGION_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- REGION_GET_SEGMENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.REGION_GET_SEGMENT( + ID, + 243, + RTEMS.DEFAULT_OPTIONS, + TIMEOUT, + ADDRESS_1, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_GET_SEGMENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- REGION_RETURN_SEGMENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.REGION_RETURN_SEGMENT( ID, ADDRESS_1, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "REGION_RETURN_SEGMENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PORT_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PORT_CREATE( + NAME, + TMTEST.INTERNAL_PORT_AREA'ADDRESS, + TMTEST.EXTERNAL_PORT_AREA'ADDRESS, + TMTEST.INTERNAL_PORT_AREA'LENGTH, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PORT_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PORT_IDENT( NAME, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PORT_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PORT_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PORT_EXTERNAL_TO_INTERNAL + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PORT_EXTERNAL_TO_INTERNAL( + ID, + TMTEST.EXTERNAL_PORT_AREA( 7 )'ADDRESS, + ADDRESS_1, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_EXTERNAL_TO_INTERNAL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- PORT_INTERNAL_TO_EXTERNAL + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.PORT_INTERNAL_TO_EXTERNAL( + ID, + TMTEST.INTERNAL_PORT_AREA( 7 )'ADDRESS, + ADDRESS_1, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "PORT_INTERNAL_TO_EXTERNAL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +TEST_SUPPORT.PAUSE; + +-- IO_INITIALIZE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_INITIALIZE( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_INITIALIZE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- IO_OPEN + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_OPEN( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_OPEN", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- IO_CLOSE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_CLOSE( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_CLOSE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- IO_READ + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_READ( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_READ", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- IO_WRITE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_WRITE( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_WRITE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- IO_CONTROL + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.IO_CONTROL( + MAJOR, + MINOR, + ADDRESS_1, + IO_RESULT, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "IO_CONTROL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- FATAL_ERROR_OCCURRED + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.FATAL_ERROR_OCCURRED( ERROR ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "FATAL_ERROR_OCCURRED", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- RATE_MONOTONIC_CREATE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.RATE_MONOTONIC_CREATE( NAME, ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_CREATE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- RATE_MONOTONIC_IDENT + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.RATE_MONOTONIC_IDENT( + NAME, + ID, + STATUS + ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_IDENT", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- RATE_MONOTONIC_DELETE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.RATE_MONOTONIC_DELETE( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_DELETE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- RATE_MONOTONIC_CANCEL + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.RATE_MONOTONIC_CANCEL( ID, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_CANCEL", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- RATE_MONOTONIC_PERIOD + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.RATE_MONOTONIC_PERIOD( ID, TIMEOUT, STATUS ); + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "RATE_MONOTONIC_PERIOD", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + +-- MULTIPROCESSING_ANNOUNCE + + TIMER_DRIVER.INITIALIZE; + for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT + loop + DUMMY_RTEMS.MULTIPROCESSING_ANNOUNCE; + end loop; + TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER; + + TIME_TEST_SUPPORT.PUT_TIME( + "MULTIPROCESSING_ANNOUNCE", + TMTEST.END_TIME, + TIME_TEST_SUPPORT.OPERATION_COUNT, + OVERHEAD, + 0 + ); + + RTEMS.SHUTDOWN_EXECUTIVE( 0 ); + + end TASK_1; + +end TMTEST; diff --git a/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads b/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads new file mode 100644 index 0000000000..0375bdf22e --- /dev/null +++ b/c/src/ada-tests/tmtests/tmoverhd/tmtest.ads @@ -0,0 +1,180 @@ +-- +-- TMTEST / SPECIFICATION +-- +-- DESCRIPTION: +-- +-- This package is the specification for Calling Overhead Test of the RTEMS +-- Timing 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. +-- +-- tmtest.ads,v 1.3 1995/07/12 19:44:46 joel Exp +-- + +with RTEMS; +with SYSTEM; +with TIMER_DRIVER; +with System.Storage_Elements; + +package TMTEST 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 variable is set to the execution time returned +-- by the timer. +-- + + END_TIME : RTEMS.UNSIGNED32; + +-- +-- 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 and later for a region. +-- + + MEMORY_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 ) of RTEMS.UNSIGNED8; + for MEMORY_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT; + +-- +-- INIT +-- +-- DESCRIPTION: +-- +-- This RTEMS task initializes the application. +-- + + procedure INIT ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- TIMER_HANDLER +-- +-- DESCRIPTION: +-- +-- This subprogram is a timer service routine. +-- + + procedure TIMER_HANDLER ( + IGNORED_ID : in RTEMS.ID; + IGNORED_ADDRESS : in RTEMS.ADDRESS + ); + +-- +-- ISR_HANDLER +-- +-- DESCRIPTION: +-- +-- This subprogram is an interrupt service routine. +-- + + procedure ISR_HANDLER ( + VECTOR : in RTEMS.VECTOR_NUMBER + ); + +-- +-- ASR_HANDLER +-- +-- DESCRIPTION: +-- +-- This subprogram is an asynchronous signal routine. +-- + + procedure ASR_HANDLER ( + SIGNALS : in RTEMS.SIGNAL_SET + ); + +-- +-- TASK_1 +-- +-- DESCRIPTION: +-- +-- This RTEMS task is responsible for measuring and +-- reporting the calling overhead for all RTEMS +-- directives. +-- + + procedure TASK_1 ( + ARGUMENT : in RTEMS.TASK_ARGUMENT + ); + +-- +-- 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 + TMTEST.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 + 256 * 1024, -- executive RAM size + 2, -- 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 + 0 -- # ticks in a timeslice + ); + +end TMTEST; |