Back to home page

LXR

 
 

    


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

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  COPYRIGHT (c) 1989-2013.
0005  *  On-Line Applications Research Corporation (OAR).
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions and the following disclaimer.
0012  * 2. Redistributions in binary form must reproduce the above copyright
0013  *    notice, this list of conditions and the following disclaimer in the
0014  *    documentation and/or other materials provided with the distribution.
0015  *
0016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0026  * POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 #if !defined(OPERATION_COUNT)
0030 #define OPERATION_COUNT 100
0031 #endif
0032 
0033 #ifdef HAVE_CONFIG_H
0034 #include "config.h"
0035 #endif
0036 
0037 #include <rtems/btimer.h>
0038 
0039 #define CONFIGURE_INIT
0040 #include "system.h"
0041 
0042 const char rtems_test_name[] = "TIME TEST 24";
0043 
0044 uint32_t   Task_count;
0045 
0046 rtems_task Tasks(
0047   rtems_task_argument argument
0048 );
0049 
0050 rtems_task High_task(
0051   rtems_task_argument argument
0052 );
0053 
0054 rtems_task Init(
0055   rtems_task_argument argument
0056 )
0057 {
0058   rtems_id          id;
0059   uint32_t    index;
0060   rtems_status_code status;
0061 
0062   Print_Warning();
0063 
0064   TEST_BEGIN();
0065 
0066   status = rtems_task_create(
0067     rtems_build_name( 'H', 'I', 'G', 'H' ),
0068     1,
0069     RTEMS_MINIMUM_STACK_SIZE,
0070     RTEMS_DEFAULT_MODES,
0071     RTEMS_DEFAULT_ATTRIBUTES,
0072     &id
0073   );
0074   directive_failed( status, "rtems_task_create HIGH" );
0075 
0076   status = rtems_task_start( id, High_task, 0 );
0077   directive_failed( status, "rtems_task_create HIGH" );
0078 
0079   for ( index = 1 ; index <= OPERATION_COUNT ; index++ ) {
0080     status = rtems_task_create(
0081       rtems_build_name( 'R', 'E', 'S', 'T' ),
0082       (RTEMS_MAXIMUM_PRIORITY / 2u) + 1u,
0083       RTEMS_MINIMUM_STACK_SIZE,
0084       RTEMS_DEFAULT_MODES,
0085       RTEMS_DEFAULT_ATTRIBUTES,
0086       &id
0087     );
0088     directive_failed( status, "rtems_task_create LOOP" );
0089 
0090     status = rtems_task_start( id, Tasks, 0 );
0091     directive_failed( status, "rtems_task_start LOOP" );
0092   }
0093   rtems_task_exit();
0094 }
0095 
0096 rtems_task High_task(
0097   rtems_task_argument argument
0098 )
0099 {
0100   uint32_t    index;
0101 
0102   benchmark_timer_initialize();
0103     for ( index=1 ; index <= OPERATION_COUNT ; index++ )
0104       (void) benchmark_timer_empty_function();
0105   overhead = benchmark_timer_read();
0106 
0107   benchmark_timer_initialize();
0108     for ( index=1 ; index <= OPERATION_COUNT ; index++ )
0109       (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
0110   end_time = benchmark_timer_read();
0111 
0112   put_time(
0113     "rtems_task_wake_after: yield returns to caller",
0114     end_time,
0115     OPERATION_COUNT,
0116     overhead,
0117     0
0118   );
0119 
0120   Task_count = 0;
0121 
0122   rtems_task_exit();
0123 }
0124 
0125 rtems_task Tasks(
0126   rtems_task_argument argument
0127 )
0128 {
0129   Task_count++;
0130 
0131   if ( Task_count == 1 )
0132     benchmark_timer_initialize();
0133   else if ( Task_count == OPERATION_COUNT ) {
0134     end_time = benchmark_timer_read();
0135 
0136     put_time(
0137       "rtems_task_wake_after: yields preempts caller",
0138       end_time,
0139       OPERATION_COUNT,
0140       overhead,
0141       0
0142     );
0143 
0144   TEST_END();
0145     rtems_test_exit( 0 );
0146   }
0147   (void) rtems_task_wake_after( RTEMS_YIELD_PROCESSOR );
0148 }