Back to home page

LXR

 
 

    


Warning, /testsuites/ada/sptests/sp02/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 2 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.PREEMPT_TASK_NAME := RTEMS.BUILD_NAME(  'P', 'R', 'M', 'T' );
0062 
0063       RTEMS.TASKS.CREATE( 
0064          SPTEST.PREEMPT_TASK_NAME,
0065          1, 
0066          2048, 
0067          RTEMS.DEFAULT_MODES,
0068          RTEMS.DEFAULT_ATTRIBUTES,
0069          SPTEST.PREEMPT_TASK_ID,
0070          STATUS
0071       );
0072       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF PREEMPT" );
0073 
0074       RTEMS.TASKS.START(
0075          SPTEST.PREEMPT_TASK_ID,
0076          SPTEST.PREEMPT_TASK'ACCESS,
0077          0,
0078          STATUS
0079       );
0080       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF PREEMPT" );
0081 
0082       TEXT_IO.PUT_LINE( "INIT - task_wake_after - yielding processor" );
0083       RTEMS.TASKS.WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
0084       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0085 
0086       SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
0087       SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
0088       SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
0089 
0090       RTEMS.TASKS.CREATE( 
0091          SPTEST.TASK_NAME( 1 ), 
0092          3, 
0093          2048, 
0094          RTEMS.DEFAULT_MODES,
0095          RTEMS.DEFAULT_ATTRIBUTES,
0096          SPTEST.TASK_ID( 1 ),
0097          STATUS
0098       );
0099       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0100 
0101       RTEMS.TASKS.CREATE( 
0102          SPTEST.TASK_NAME( 2 ), 
0103          3, 
0104          2048, 
0105          RTEMS.DEFAULT_MODES,
0106          RTEMS.DEFAULT_ATTRIBUTES,
0107          SPTEST.TASK_ID( 2 ),
0108          STATUS
0109       );
0110       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
0111 
0112       RTEMS.TASKS.CREATE( 
0113          SPTEST.TASK_NAME( 3 ), 
0114          3, 
0115          2048, 
0116          RTEMS.DEFAULT_MODES,
0117          RTEMS.DEFAULT_ATTRIBUTES,
0118          SPTEST.TASK_ID( 3 ),
0119          STATUS
0120       );
0121       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
0122 
0123       RTEMS.TASKS.START(
0124          SPTEST.TASK_ID( 1 ),
0125          SPTEST.TASK_1'ACCESS,
0126          0,
0127          STATUS
0128       );
0129       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0130 
0131       RTEMS.TASKS.START(
0132          SPTEST.TASK_ID( 2 ),
0133          SPTEST.TASK_2'ACCESS,
0134          0,
0135          STATUS
0136       );
0137       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
0138 
0139       RTEMS.TASKS.START(
0140          SPTEST.TASK_ID( 3 ),
0141          SPTEST.TASK_3'ACCESS,
0142          0,
0143          STATUS
0144       );
0145       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
0146 
0147       TEXT_IO.PUT_LINE( 
0148          "INIT - suspending TA2 while middle task on a ready chain"
0149       );
0150  
0151       RTEMS.TASKS.SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
0152       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
0153 
0154       RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 1 ), STATUS );
0155       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
0156 
0157       RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 2 ), STATUS );
0158       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
0159 
0160       RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 3 ), STATUS );
0161       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
0162 
0163       RTEMS.TASKS.CREATE( 
0164          SPTEST.TASK_NAME( 1 ), 
0165          1, 
0166          2048, 
0167          RTEMS.DEFAULT_MODES,
0168          RTEMS.DEFAULT_ATTRIBUTES,
0169          SPTEST.TASK_ID( 1 ),
0170          STATUS
0171       );
0172       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
0173 
0174       RTEMS.TASKS.CREATE( 
0175          SPTEST.TASK_NAME( 2 ), 
0176          3, 
0177          2048, 
0178          RTEMS.DEFAULT_MODES,
0179          RTEMS.DEFAULT_ATTRIBUTES,
0180          SPTEST.TASK_ID( 2 ),
0181          STATUS
0182       );
0183       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
0184 
0185       RTEMS.TASKS.CREATE( 
0186          SPTEST.TASK_NAME( 3 ), 
0187          3, 
0188          2048, 
0189          RTEMS.DEFAULT_MODES,
0190          RTEMS.DEFAULT_ATTRIBUTES,
0191          SPTEST.TASK_ID( 3 ),
0192          STATUS
0193       );
0194       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
0195 
0196       RTEMS.TASKS.START(
0197          SPTEST.TASK_ID( 1 ),
0198          SPTEST.TASK_1'ACCESS,
0199          0,
0200          STATUS
0201       );
0202       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
0203 
0204       RTEMS.TASKS.START(
0205          SPTEST.TASK_ID( 2 ),
0206          SPTEST.TASK_2'ACCESS,
0207          0,
0208          STATUS
0209       );
0210       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
0211 
0212       RTEMS.TASKS.START(
0213          SPTEST.TASK_ID( 3 ),
0214          SPTEST.TASK_3'ACCESS,
0215          0,
0216          STATUS
0217       );
0218       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
0219 
0220       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0221       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
0222 
0223    end INIT;
0224 
0225 -- 
0226 --  PREEMPT_TASK
0227 --
0228 
0229    procedure PREEMPT_TASK (
0230       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0231    ) is
0232       pragma Unreferenced(ARGUMENT);
0233       STATUS            : RTEMS.STATUS_CODES;
0234    begin
0235 
0236       TEXT_IO.PUT_LINE( "PREEMPT - task_delete - deleting self" );
0237       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0238       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PREEMPT" );
0239 
0240    end PREEMPT_TASK;
0241 
0242 -- 
0243 --  TASK_1
0244 --
0245 
0246    procedure TASK_1 (
0247       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0248    ) is
0249       pragma Unreferenced(ARGUMENT);
0250       TID2              : RTEMS.ID;
0251       TID3              : RTEMS.ID;
0252       STATUS            : RTEMS.STATUS_CODES;
0253       PREVIOUS_PRIORITY : RTEMS.TASKS.PRIORITY;
0254    begin
0255 
0256       TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
0257       RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0258       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0259           
0260       RTEMS.TASKS.IDENT( 
0261          SPTEST.TASK_NAME( 2 ), 
0262          RTEMS.SEARCH_ALL_NODES, 
0263          TID2, 
0264          STATUS 
0265       );
0266       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
0267    
0268       TEXT_IO.PUT( "TA1 - task_ident - tid of TA2 (" );
0269       UNSIGNED32_IO.PUT( TID2, WIDTH => 8, BASE => 10#16# );
0270       TEXT_IO.PUT_LINE( ")" );
0271 
0272       RTEMS.TASKS.IDENT( 
0273          SPTEST.TASK_NAME( 3 ), 
0274          RTEMS.SEARCH_ALL_NODES, 
0275          TID3, 
0276          STATUS 
0277       );
0278       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
0279    
0280       TEXT_IO.PUT( "TA1 - task_ident - tid of TA3 (" );
0281       UNSIGNED32_IO.PUT( TID3, WIDTH => 8, BASE => 10#16# );
0282       TEXT_IO.PUT_LINE( ")" );
0283 
0284       RTEMS.TASKS.SET_PRIORITY( TID3, 2, PREVIOUS_PRIORITY, STATUS );
0285       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
0286 
0287       TEXT_IO.PUT_LINE( 
0288          "TA1 - task_set_priority - set TA3's priority to 2"
0289       );
0290 
0291       TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
0292       RTEMS.TASKS.SUSPEND( TID2, STATUS );
0293       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
0294 
0295       TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
0296       RTEMS.TASKS.DELETE( TID2, STATUS );
0297       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
0298 
0299       TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep for 5 seconds" );
0300       RTEMS.TASKS.WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0301       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
0302 
0303       TEST_SUPPORT.ADA_TEST_END;
0304       RTEMS.SHUTDOWN_EXECUTIVE( 0 );
0305    
0306    end TASK_1;
0307 
0308 -- 
0309 --  TASK_2
0310 --
0311 
0312    procedure TASK_2 (
0313       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0314    ) is
0315       pragma Unreferenced(ARGUMENT);
0316       STATUS : RTEMS.STATUS_CODES;
0317    begin
0318 
0319       TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 minute" );
0320       RTEMS.TASKS.WAKE_AFTER( 60 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0321       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA2" );
0322           
0323    end TASK_2;
0324 
0325 -- 
0326 --  TASK_3
0327 --
0328 
0329    procedure TASK_3 (
0330       ARGUMENT : in     RTEMS.TASKS.ARGUMENT
0331    ) is
0332       pragma Unreferenced(ARGUMENT);
0333       STATUS : RTEMS.STATUS_CODES;
0334    begin
0335 
0336       TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 5 seconds" );
0337       RTEMS.TASKS.WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
0338       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA3" );
0339 
0340       TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
0341       RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
0342       TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
0343           
0344    end TASK_3;
0345 
0346 end SPTEST;