File indexing completed on 2025-05-11 08:24:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
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 }