Back to home page

LXR

 
 

    


Warning, /testsuites/ada/sptests/sp08/sptest.adb is written in an unsupported language. File is not indexed.

0001 -- SPDX-License-Identifier: BSD-2-Clause
0002 
0003 --
0004 --  SPTEST / BODY
0005 --
0006 --  DESCRIPTION:
0007 --
0008 --  This package is the implementation of Test 8 of the RTEMS
0009 --  Single Processor 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 INTERFACES; use INTERFACES;
0041 with TEST_SUPPORT;
0042 with TEXT_IO;
0043 with UNSIGNED32_IO;
0044 
0045 package body SPTEST is
0046 
0047 -- 
0048 --  INIT
0049 --
0050 
0051    procedure INIT (
0052       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0053    ) is
0054       pragma Unreferenced(ARGUMENT);
0055       STATUS : RTEMS.STATUS_CODES;
0056    begin
0057 
0058       TEXT_IO.NEW_LINE( 2 );
0059       TEST_SUPPORT.ADA_TEST_BEGIN;
0060 
0061       SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
0062 
0063       RTEMS.TASKS.CREATE( 
0064          SPTEST.TASK_NAME( 1 ), 
0065          1, 
0066          2048, 
0067          RTEMS.DEFAULT_MODES,
0068          RTEMS.DEFAULT_ATTRIBUTES,
0069          SPTEST.TASK_ID( 1 ),
0070          STATUS
0071       );
0072       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0073 
0074       RTEMS.TASKS.START(
0075          SPTEST.TASK_ID( 1 ),
0076          SPTEST.TASK_1'ACCESS,
0077          0,
0078          STATUS
0079       );
0080       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0081 
0082       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0083       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0084 
0085    end INIT;
0086 
0087 -- 
0088 --  PUT_MODE
0089 --
0090 
0091    procedure PUT_MODE(
0092       COMMENT     : in    STRING;
0093       OUTPUT_MODE : in    RTEMS.MODE
0094    ) is
0095    begin
0096 
0097       TEXT_IO.PUT( COMMENT );
0098       UNSIGNED32_IO.PUT( OUTPUT_MODE, BASE => 16, WIDTH => 8 );
0099       TEXT_IO.NEW_LINE;
0100 
0101    end PUT_MODE;
0102 
0103 -- 
0104 --  TASK_1
0105 --
0106 
0107    procedure TASK_1 (
0108       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0109    ) is
0110       pragma Unreferenced(ARGUMENT);
0111       PREVIOUS_MODE : RTEMS.MODE;
0112       STATUS : RTEMS.STATUS_CODES;
0113    begin
0114 
0115 -- BEGINNING OF ASR
0116 
0117       RTEMS.TASKS.MODE( 
0118          RTEMS.ASR, 
0119          RTEMS.ASR_MASK, 
0120          PREVIOUS_MODE, 
0121          STATUS 
0122       );
0123       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0124       SPTEST.PUT_MODE(
0125          "TA1 - task_mode - ASR                  - previous mode: ", 
0126          PREVIOUS_MODE
0127       );
0128    
0129       RTEMS.TASKS.MODE( 
0130          RTEMS.NO_ASR, 
0131          RTEMS.ASR_MASK, 
0132          PREVIOUS_MODE, 
0133          STATUS 
0134       );
0135       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0136       SPTEST.PUT_MODE(
0137          "TA1 - task_mode - NO_ASR               - previous mode: ", 
0138          PREVIOUS_MODE
0139       );
0140    
0141       RTEMS.TASKS.MODE( 
0142          RTEMS.NO_ASR, 
0143          RTEMS.ASR_MASK, 
0144          PREVIOUS_MODE, 
0145          STATUS 
0146       );
0147       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0148       SPTEST.PUT_MODE(
0149          "TA1 - task_mode - NO_ASR               - previous mode: ", 
0150          PREVIOUS_MODE
0151       );
0152    
0153       RTEMS.TASKS.MODE( 
0154          RTEMS.ASR, 
0155          RTEMS.ASR_MASK, 
0156          PREVIOUS_MODE, 
0157          STATUS 
0158       );
0159       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0160       SPTEST.PUT_MODE(
0161          "TA1 - task_mode - ASR                  - previous mode: ", 
0162          PREVIOUS_MODE
0163       );
0164    
0165 -- END OF ASR
0166 
0167 -- BEGINNING OF TIMESLICE
0168 
0169       RTEMS.TASKS.MODE( 
0170          RTEMS.NO_TIMESLICE, 
0171          RTEMS.TIMESLICE_MASK, 
0172          PREVIOUS_MODE, 
0173          STATUS 
0174       );
0175       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0176       SPTEST.PUT_MODE(
0177          "TA1 - task_mode - NO_TIMESLICE         - previous mode: ", 
0178          PREVIOUS_MODE
0179       );
0180    
0181       RTEMS.TASKS.MODE( 
0182          RTEMS.TIMESLICE, 
0183          RTEMS.TIMESLICE_MASK, 
0184          PREVIOUS_MODE, 
0185          STATUS 
0186       );
0187       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0188       SPTEST.PUT_MODE(
0189          "TA1 - task_mode - TIMESLICE            - previous mode: ", 
0190          PREVIOUS_MODE
0191       );
0192    
0193       RTEMS.TASKS.MODE( 
0194          RTEMS.TIMESLICE, 
0195          RTEMS.TIMESLICE_MASK, 
0196          PREVIOUS_MODE, 
0197          STATUS 
0198       );
0199       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0200       SPTEST.PUT_MODE(
0201          "TA1 - task_mode - TIMESLICE            - previous mode: ", 
0202          PREVIOUS_MODE
0203       );
0204    
0205       RTEMS.TASKS.MODE( 
0206          RTEMS.NO_TIMESLICE, 
0207          RTEMS.TIMESLICE_MASK, 
0208          PREVIOUS_MODE, 
0209          STATUS 
0210       );
0211       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0212       SPTEST.PUT_MODE(
0213          "TA1 - task_mode - NO_TIMESLICE         - previous mode: ", 
0214          PREVIOUS_MODE
0215       );
0216    
0217 -- END OF TIMESLICE
0218 
0219 -- BEGINNING OF PREEMPT
0220 
0221       RTEMS.TASKS.MODE( 
0222          RTEMS.PREEMPT, 
0223          RTEMS.PREEMPT_MASK, 
0224          PREVIOUS_MODE, 
0225          STATUS 
0226       );
0227       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0228       SPTEST.PUT_MODE(
0229          "TA1 - task_mode - PREEMPT              - previous mode: ", 
0230          PREVIOUS_MODE
0231       );
0232    
0233       RTEMS.TASKS.MODE( 
0234          RTEMS.NO_PREEMPT, 
0235          RTEMS.PREEMPT_MASK, 
0236          PREVIOUS_MODE, 
0237          STATUS 
0238       );
0239       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0240       SPTEST.PUT_MODE(
0241          "TA1 - task_mode - NO_PREEMPT           - previous mode: ", 
0242          PREVIOUS_MODE
0243       );
0244    
0245       RTEMS.TASKS.MODE( 
0246          RTEMS.NO_PREEMPT, 
0247          RTEMS.PREEMPT_MASK, 
0248          PREVIOUS_MODE, 
0249          STATUS 
0250       );
0251       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0252       SPTEST.PUT_MODE(
0253          "TA1 - task_mode - NO_PREEMPT           - previous mode: ", 
0254          PREVIOUS_MODE
0255       );
0256    
0257       RTEMS.TASKS.MODE( 
0258          RTEMS.PREEMPT, 
0259          RTEMS.PREEMPT_MASK, 
0260          PREVIOUS_MODE, 
0261          STATUS 
0262       );
0263       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0264       SPTEST.PUT_MODE(
0265          "TA1 - task_mode - PREEMPT              - previous mode: ", 
0266          PREVIOUS_MODE
0267       );
0268    
0269 -- END OF PREEMPT
0270 
0271 -- BEGINNING OF INTERRUPT_LEVEL
0272 
0273       RTEMS.TASKS.MODE( 
0274          RTEMS.INTERRUPT_LEVEL( 3 ), 
0275          RTEMS.INTERRUPT_MASK, 
0276          PREVIOUS_MODE, 
0277          STATUS 
0278       );
0279       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0280       SPTEST.PUT_MODE(
0281          "TA1 - task_mode - INTERRUPT_LEVEL( 3 ) - previous mode: ", 
0282          PREVIOUS_MODE
0283       );
0284    
0285       RTEMS.TASKS.MODE( 
0286          RTEMS.INTERRUPT_LEVEL( 5 ), 
0287          RTEMS.INTERRUPT_MASK, 
0288          PREVIOUS_MODE, 
0289          STATUS 
0290       );
0291       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0292       SPTEST.PUT_MODE(
0293          "TA1 - task_mode - INTERRUPT_LEVEL( 5 ) - previous mode: ", 
0294          PREVIOUS_MODE
0295       );
0296    
0297 -- END OF INTERRUPT_LEVEL
0298 
0299 -- BEGINNING OF COMBINATIONS
0300 
0301       RTEMS.TASKS.MODE( 
0302          RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR + 
0303             RTEMS.TIMESLICE + RTEMS.NO_PREEMPT, 
0304          RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
0305             RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
0306          PREVIOUS_MODE, 
0307          STATUS 
0308       );
0309       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0310       SPTEST.PUT_MODE(
0311          "TA1 - task_mode - set all modes        - previous mode: ", 
0312          PREVIOUS_MODE
0313       );
0314    
0315       RTEMS.TASKS.MODE( 
0316          RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR + 
0317             RTEMS.TIMESLICE + RTEMS.NO_PREEMPT, 
0318          RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
0319             RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
0320          PREVIOUS_MODE, 
0321          STATUS 
0322       );
0323       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0324       SPTEST.PUT_MODE(
0325          "TA1 - task_mode - set all modes        - previous mode: ", 
0326          PREVIOUS_MODE
0327       );
0328    
0329       RTEMS.TASKS.MODE( 
0330          RTEMS.INTERRUPT_LEVEL( 0 ) + RTEMS.ASR + 
0331             RTEMS.NO_TIMESLICE + RTEMS.PREEMPT, 
0332          RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
0333             RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
0334          PREVIOUS_MODE, 
0335          STATUS 
0336       );
0337       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0338       SPTEST.PUT_MODE(
0339          "TA1 - task_mode - clear all modes      - previous mode: ", 
0340          PREVIOUS_MODE
0341       );
0342    
0343 -- END OF COMBINATIONS
0344 
0345 -- BEGINNING OF CURRENT MODE
0346 
0347       RTEMS.TASKS.MODE( 
0348          RTEMS.CURRENT_MODE,
0349          RTEMS.CURRENT_MODE,
0350          PREVIOUS_MODE, 
0351          STATUS 
0352       );
0353       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
0354       SPTEST.PUT_MODE(
0355          "TA1 - task_mode - get current mode     - previous mode: ", 
0356          PREVIOUS_MODE
0357       );
0358    
0359 -- END OF CURRENT MODE
0360 
0361       TEST_SUPPORT.ADA_TEST_END;
0362       RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0363    end TASK_1;
0364 
0365 end SPTEST;