Warning, /testsuites/ada/tmtests/tm28/tmtest.adb is written in an unsupported language. File is not indexed.
0001 -- SPDX-License-Identifier: BSD-2-Clause
0002
0003 --
0004 -- TMTEST / BODY
0005 --
0006 -- DESCRIPTION:
0007 --
0008 -- This package is the implementation of Test 28 of the RTEMS
0009 -- Timing Test Suite.
0010 --
0011 -- DEPENDENCIES:
0012 --
0013 --
0014 --
0015 -- COPYRIGHT (c) 1989-2011.
0016 -- On-Line Applications Research Corporation (OAR).
0017 --
0018 -- Redistribution and use in source and binary forms, with or without
0019 -- modification, are permitted provided that the following conditions
0020 -- are met:
0021 -- 1. Redistributions of source code must retain the above copyright
0022 -- notice, this list of conditions and the following disclaimer.
0023 -- 2. Redistributions in binary form must reproduce the above copyright
0024 -- notice, this list of conditions and the following disclaimer in the
0025 -- documentation and/or other materials provided with the distribution.
0026 --
0027 -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0028 -- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0029 -- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0030 -- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0031 -- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0032 -- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0033 -- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0034 -- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0035 -- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0036 -- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0037 -- POSSIBILITY OF SUCH DAMAGE.
0038 --
0039
0040 with RTEMS_CALLING_OVERHEAD;
0041 with TEST_SUPPORT;
0042 with TEXT_IO;
0043 with TIMER_DRIVER;
0044 with RTEMS.PORT;
0045
0046 package body TMTEST is
0047
0048 --
0049 -- INIT
0050 --
0051
0052 procedure INIT (
0053 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0054 ) is
0055 pragma Unreferenced(ARGUMENT);
0056 STATUS : RTEMS.STATUS_CODES;
0057 begin
0058
0059 TEXT_IO.NEW_LINE( 2 );
0060 TEST_SUPPORT.ADA_TEST_BEGIN;
0061
0062 RTEMS.TASKS.CREATE(
0063 RTEMS.BUILD_NAME( 'T', 'E', 'S', 'T' ),
0064 128,
0065 1024,
0066 RTEMS.DEFAULT_MODES,
0067 RTEMS.DEFAULT_ATTRIBUTES,
0068 TMTEST.TASK_ID( 1 ),
0069 STATUS
0070 );
0071 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
0072
0073 RTEMS.TASKS.START(
0074 TMTEST.TASK_ID( 1 ),
0075 TMTEST.TEST_TASK'ACCESS,
0076 0,
0077 STATUS
0078 );
0079 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
0080
0081 RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0082 TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0083
0084 end INIT;
0085
0086 --
0087 -- TEST_TASK
0088 --
0089
0090 procedure TEST_TASK (
0091 ARGUMENT : in RTEMS.TASKS.ARGUMENT
0092 ) is
0093 pragma Unreferenced(ARGUMENT);
0094 NAME : RTEMS.NAME;
0095 OVERHEAD : RTEMS.UNSIGNED32;
0096 CONVERTED : RTEMS.ADDRESS;
0097 STATUS : RTEMS.STATUS_CODES;
0098 begin
0099
0100 TIMER_DRIVER.INITIALIZE;
0101 for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
0102 loop
0103 TIMER_DRIVER.EMPTY_FUNCTION;
0104 end loop;
0105 OVERHEAD := TIMER_DRIVER.READ_TIMER;
0106
0107 NAME := RTEMS.BUILD_NAME( 'P', 'O', 'R', 'T' );
0108 TIMER_DRIVER.INITIALIZE;
0109 for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
0110 loop
0111 RTEMS.PORT.CREATE(
0112 NAME,
0113 TMTEST.INTERNAL_PORT_AREA'ADDRESS,
0114 TMTEST.EXTERNAL_PORT_AREA'ADDRESS,
0115 16#FF#,
0116 TMTEST.PORT_ID( INDEX ),
0117 STATUS
0118 );
0119 end loop;
0120 TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
0121
0122 TIME_TEST_SUPPORT.PUT_TIME(
0123 "PORT_CREATE",
0124 TMTEST.END_TIME,
0125 TIME_TEST_SUPPORT.OPERATION_COUNT,
0126 OVERHEAD,
0127 RTEMS_CALLING_OVERHEAD.PORT_CREATE
0128 );
0129
0130 TIMER_DRIVER.INITIALIZE;
0131 for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
0132 loop
0133 RTEMS.PORT.EXTERNAL_TO_INTERNAL(
0134 TMTEST.PORT_ID( 1 ),
0135 TMTEST.EXTERNAL_PORT_AREA( 16#F# )'ADDRESS,
0136 CONVERTED,
0137 STATUS
0138 );
0139 end loop;
0140 TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
0141
0142 TIME_TEST_SUPPORT.PUT_TIME(
0143 "PORT_EXTERNAL_TO_INTERNAL",
0144 TMTEST.END_TIME,
0145 TIME_TEST_SUPPORT.OPERATION_COUNT,
0146 OVERHEAD,
0147 RTEMS_CALLING_OVERHEAD.PORT_EXTERNAL_TO_INTERNAL
0148 );
0149
0150 TIMER_DRIVER.INITIALIZE;
0151 for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
0152 loop
0153 RTEMS.PORT.INTERNAL_TO_EXTERNAL(
0154 TMTEST.PORT_ID( 1 ),
0155 TMTEST.INTERNAL_PORT_AREA( 16#F# )'ADDRESS,
0156 CONVERTED,
0157 STATUS
0158 );
0159 end loop;
0160 TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
0161
0162 TIME_TEST_SUPPORT.PUT_TIME(
0163 "PORT_INTERNAL_TO_EXTERNAL",
0164 TMTEST.END_TIME,
0165 TIME_TEST_SUPPORT.OPERATION_COUNT,
0166 OVERHEAD,
0167 RTEMS_CALLING_OVERHEAD.PORT_INTERNAL_TO_EXTERNAL
0168 );
0169
0170 TIMER_DRIVER.INITIALIZE;
0171 for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
0172 loop
0173 RTEMS.PORT.DELETE( TMTEST.PORT_ID( INDEX ), STATUS );
0174 end loop;
0175 TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
0176
0177 TIME_TEST_SUPPORT.PUT_TIME(
0178 "PORT_DELETE",
0179 TMTEST.END_TIME,
0180 TIME_TEST_SUPPORT.OPERATION_COUNT,
0181 OVERHEAD,
0182 RTEMS_CALLING_OVERHEAD.PORT_DELETE
0183 );
0184
0185 TEST_SUPPORT.ADA_TEST_END;
0186 RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0187
0188 end TEST_TASK;
0189
0190 end TMTEST;