Back to home page

LXR

 
 

    


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;