Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:44

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*  Task_1
0004  *
0005  *  This routine serves as a test task.  It tests the region manager.
0006  *
0007  *  Input parameters:
0008  *    argument - task argument
0009  *
0010  *  Output parameters:  NONE
0011  *
0012  *  COPYRIGHT (c) 1989-2009.
0013  *  On-Line Applications Research Corporation (OAR).
0014  *
0015  * Redistribution and use in source and binary forms, with or without
0016  * modification, are permitted provided that the following conditions
0017  * are met:
0018  * 1. Redistributions of source code must retain the above copyright
0019  *    notice, this list of conditions and the following disclaimer.
0020  * 2. Redistributions in binary form must reproduce the above copyright
0021  *    notice, this list of conditions and the following disclaimer in the
0022  *    documentation and/or other materials provided with the distribution.
0023  *
0024  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0025  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0026  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0027  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0028  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0029  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0030  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0031  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0032  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0033  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0034  * POSSIBILITY OF SUCH DAMAGE.
0035  */
0036 
0037 #ifdef HAVE_CONFIG_H
0038 #include "config.h"
0039 #endif
0040 
0041 #include "system.h"
0042 
0043 rtems_task Task_1(
0044   rtems_task_argument argument
0045 )
0046 {
0047   rtems_id           rnid;
0048   void              *segment_address_1;
0049   void              *segment_address_2;
0050   void              *segment_address_3;
0051   void              *segment_address_4;
0052   rtems_status_code  status;
0053 
0054   status = rtems_region_ident( Region_name[ 1 ], &rnid );
0055   printf( "TA1 - rtems_region_ident - rnid => %08" PRIxrtems_id "\n", rnid );
0056   directive_failed( status, "rtems_region_ident of RN1" );
0057 
0058   puts(
0059     "TA1 - rtems_region_get_segment - wait on 1000 byte segment from region 2"
0060   );
0061   status = rtems_region_get_segment(
0062     Region_id[ 2 ],
0063     1000,
0064     RTEMS_DEFAULT_OPTIONS,
0065     RTEMS_NO_TIMEOUT,
0066     &segment_address_1
0067   );
0068   directive_failed( status, "rtems_region_get_segment" );
0069   puts_nocr( "TA1 - got segment from region 2 - " );
0070   Put_address_from_area_2( segment_address_1 );
0071   new_line;
0072 
0073   puts( "TA1 - rtems_region_get_segment - wait on 3K segment from region 3" );
0074   status = rtems_region_get_segment(
0075     Region_id[ 3 ],
0076     3072,
0077     RTEMS_DEFAULT_OPTIONS,
0078     RTEMS_NO_TIMEOUT,
0079     &segment_address_2
0080   );
0081   directive_failed( status, "rtems_region_get_segment" );
0082   puts_nocr( "TA1 - got segment from region 3 - " );
0083   Put_address_from_area_3( segment_address_2 );
0084   new_line;
0085 
0086   puts_nocr( "TA1 - rtems_region_get_segment - get 3080 byte segment " );
0087   puts     ( "from region 1 - NO_WAIT" );
0088   status = rtems_region_get_segment(
0089     Region_id[ 1 ],
0090     3080,
0091     RTEMS_NO_WAIT,
0092     RTEMS_NO_TIMEOUT,
0093     &segment_address_3
0094   );
0095   directive_failed( status, "rtems_region_get_segment" );
0096   puts_nocr( "TA1 - got segment from region 1 - " );
0097   Put_address_from_area_1( segment_address_3 );
0098   new_line;
0099 
0100   puts( "TA1 - rtems_task_wake_after - yield processor" );
0101   status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
0102   directive_failed( status, "rtems_task_wake_after" );
0103 
0104   puts_nocr(
0105     "TA1 - rtems_region_return_segment - return segment to region 1 - "
0106   );
0107   Put_address_from_area_1( segment_address_3 );
0108   status = rtems_region_return_segment( Region_id[ 1 ], segment_address_3 );
0109   directive_failed( status, "rtems_region_return_segment" );
0110   new_line;
0111 
0112   puts(
0113     "TA1 - rtems_region_get_segment - wait 10 seconds for 3K "
0114       "segment from region 1"
0115   );
0116   status = rtems_region_get_segment(
0117     Region_id[ 1 ],
0118     3072,
0119     RTEMS_DEFAULT_OPTIONS,
0120     10 * rtems_clock_get_ticks_per_second(),
0121     &segment_address_4
0122   );
0123   directive_failed( status, "rtems_region_get_segment" );
0124   puts_nocr( "TA1 - got segment from region 1 - " );
0125   Put_address_from_area_1( segment_address_4 );
0126   new_line;
0127 
0128   puts_nocr(
0129     "TA1 - rtems_region_return_segment - return segment to region 2 - "
0130   );
0131   Put_address_from_area_2( segment_address_1 );
0132   new_line;
0133   status = rtems_region_return_segment( Region_id[ 2 ], segment_address_1 );
0134   directive_failed( status, "rtems_region_return_segment" );
0135 
0136   puts( "TA1 - rtems_task_wake_after - yield processor" );
0137   status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
0138   directive_failed( status, "rtems_task_wake_after" );
0139 
0140   puts( "TA1 - rtems_task_delete - delete TA3" );
0141   status = rtems_task_delete( Task_id[ 3 ] );
0142   directive_failed( status, "rtems_task_delete of TA3" );
0143 
0144   status = rtems_task_create(
0145     Task_name[ 4 ],
0146     BASE_PRIORITY,
0147     RTEMS_MINIMUM_STACK_SIZE,
0148     RTEMS_DEFAULT_MODES,
0149     RTEMS_DEFAULT_ATTRIBUTES,
0150     &Task_id[ 4 ]
0151   );
0152   directive_failed( status, "rtems_task_create of TA4" );
0153 
0154   status = rtems_task_create(
0155     Task_name[ 5 ],
0156     BASE_PRIORITY,
0157     RTEMS_MINIMUM_STACK_SIZE,
0158     RTEMS_DEFAULT_MODES,
0159     RTEMS_DEFAULT_ATTRIBUTES,
0160     &Task_id[ 5 ]
0161   );
0162   directive_failed( status, "rtems_task_create of TA5" );
0163 
0164   status = rtems_task_start( Task_id[ 4 ], Task_4, 0 );
0165   directive_failed( status, "rtems_task_start of TA4" );
0166 
0167   status = rtems_task_start( Task_id[ 5 ], Task5, 0 );
0168   directive_failed( status, "rtems_task_start of TA5" );
0169 
0170   puts( "TA1 - rtems_task_wake_after - yield processor" );
0171   status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() );
0172   directive_failed( status, "rtems_task_wake_after" );
0173 
0174   puts_nocr(
0175     "TA1 - rtems_region_return_segment - return segment to region 1 - "
0176   );
0177   Put_address_from_area_1( segment_address_4 );
0178   status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 );
0179   directive_failed( status, "rtems_region_return_segment" );
0180   new_line;
0181 
0182   puts( "TA1 - rtems_task_wake_after - yield processor" );
0183   status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() );
0184   directive_failed( status, "rtems_task_wake_after" );
0185 
0186   puts_nocr( "TA1 - rtems_region_get_segment - wait 10 seconds for 3K " );
0187   puts     ( "segment from region 1");
0188   status = rtems_region_get_segment(
0189     Region_id[ 1 ],
0190     3072,
0191     RTEMS_DEFAULT_OPTIONS,
0192     10 * rtems_clock_get_ticks_per_second(),
0193     &segment_address_4
0194   );
0195   directive_failed( status, "rtems_region_get_segment" );
0196   puts_nocr( "TA1 - got segment from region 1 - " );
0197   Put_address_from_area_1( segment_address_4 );
0198   new_line;
0199 
0200   puts( "TA1 - rtems_task_wake_after - yield processor" );
0201   status = rtems_task_wake_after( 1 * rtems_clock_get_ticks_per_second() );
0202   directive_failed( status, "rtems_task_wake_after" );
0203 
0204   puts( "TA1 - rtems_task_delete - delete TA4" );
0205   status = rtems_task_delete( Task_id[ 4 ] );
0206   directive_failed( status, "rtems_task_delete of TA4" );
0207 
0208   puts_nocr(
0209     "TA1 - rtems_region_return_segment - return segment to region 1 - "
0210   );
0211   Put_address_from_area_1( segment_address_4 );
0212   status = rtems_region_return_segment( Region_id[ 1 ], segment_address_4 );
0213   directive_failed( status, "rtems_region_return_segment" );
0214   new_line;
0215 
0216   puts( "TA1 - rtems_task_wake_after - yield processor" );
0217   status = rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
0218 
0219   puts( "TA1 - rtems_region_delete - delete region 1" );
0220   status = rtems_region_delete( Region_id[ 1 ] );
0221   directive_failed( status, "rtems_region_delete" );
0222 
0223   puts( "TA1 - rtems_region_get_segment - get 3K segment from region 4" );
0224   status = rtems_region_get_segment(
0225     Region_id[ 4 ],
0226     3072,
0227     RTEMS_DEFAULT_OPTIONS,
0228     RTEMS_NO_TIMEOUT,
0229     &segment_address_1
0230   );
0231   directive_failed( status, "rtems_region_get_segment" );
0232   puts_nocr( "TA1 - got segment from region 4 - " );
0233   Put_address_from_area_4( segment_address_1 );
0234   new_line;
0235 
0236   puts(
0237    "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4"
0238   );
0239   status =  rtems_region_get_segment(
0240     Region_id[ 4 ],
0241     3072,
0242     RTEMS_NO_WAIT,
0243     RTEMS_NO_TIMEOUT,
0244     &segment_address_2
0245   );
0246   fatal_directive_status(
0247     status,
0248     RTEMS_UNSATISFIED,
0249     "rtems_region_get_segment with no memory left"
0250   );
0251   puts( "TA1 - rtems_region_get_segment - RTEMS_UNSATISFIED" );
0252 
0253   puts( "TA1 - rtems_region_extend - extend region 4 by 1" );
0254   status = rtems_region_extend(
0255     Region_id[ 4 ],
0256     &Area_4[4096],
0257     1
0258   );
0259   fatal_directive_status(
0260     status,
0261     RTEMS_INVALID_ADDRESS,
0262     "rtems_region_extend with too small memory area"
0263   );
0264   puts( "TA1 - rtems_region_extend - RTEMS_INVALID_ADDRESS" );
0265 
0266   puts( "TA1 - rtems_region_extend - extend region 4 by 4K - 1" );
0267   status = rtems_region_extend(
0268     Region_id[ 4 ],
0269     (char *) &Area_4[4096] + 1,
0270     4096 - 1
0271   );
0272   directive_failed( status, "rtems_region_extend" );
0273 
0274   puts(
0275    "TA1 - rtems_region_get_segment - attempt to get 3K segment from region 4"
0276   );
0277   status = rtems_region_get_segment(
0278     Region_id[ 4 ],
0279     3072,
0280     RTEMS_NO_WAIT,
0281     RTEMS_NO_TIMEOUT,
0282     &segment_address_3
0283   );
0284   directive_failed( status, "rtems_region_get_segment" );
0285   puts_nocr( "TA1 - got 3K segment from region 4 - " );
0286   Put_address_from_area_4( segment_address_3 );
0287   new_line;
0288 
0289   puts_nocr(
0290     "TA1 - rtems_region_return_segment - return segment to region 4 - "
0291   );
0292   Put_address_from_area_4( segment_address_1 );
0293   status = rtems_region_return_segment( Region_id[ 4 ], segment_address_1 );
0294   directive_failed( status, "rtems_region_return_segment" );
0295   new_line;
0296 
0297   puts_nocr(
0298     "TA1 - rtems_region_return_segment - return segment to region 4 - "
0299   );
0300   Put_address_from_area_4( segment_address_3 );
0301   status = rtems_region_return_segment( Region_id[ 4 ], segment_address_3 );
0302   directive_failed( status, "rtems_region_return_segment" );
0303   new_line;
0304 
0305   puts( "TA1 - rtems_region_delete - delete region 4" );
0306   status = rtems_region_delete( Region_id[ 4 ] );
0307   directive_failed( status, "rtems_region_delete" );
0308 
0309   TEST_END();
0310   rtems_test_exit( 0 );
0311 }