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;