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 16";
0043
0044 uint32_t Task_count;
0045
0046 rtems_task test_init(
0047 rtems_task_argument argument
0048 );
0049
0050 rtems_task Middle_tasks(
0051 rtems_task_argument argument
0052 );
0053
0054 rtems_task High_task(
0055 rtems_task_argument argument
0056 );
0057
0058 int operation_count = OPERATION_COUNT;
0059
0060 rtems_task Init(
0061 rtems_task_argument argument
0062 )
0063 {
0064 rtems_id id;
0065 rtems_status_code status;
0066
0067 Print_Warning();
0068
0069 TEST_BEGIN();
0070
0071 status = rtems_task_create(
0072 rtems_build_name( 'T', 'E', 'S', 'T' ),
0073 RTEMS_MAXIMUM_PRIORITY - 1u,
0074 RTEMS_MINIMUM_STACK_SIZE,
0075 RTEMS_DEFAULT_MODES,
0076 RTEMS_DEFAULT_ATTRIBUTES,
0077 &id
0078 );
0079 directive_failed( status, "rtems_task_create of test_init" );
0080
0081 status = rtems_task_start( id, test_init, 0 );
0082 directive_failed( status, "rtems_task_start of test_init" );
0083
0084 rtems_task_exit();
0085 }
0086
0087 rtems_task test_init(
0088 rtems_task_argument argument
0089 )
0090 {
0091 rtems_task_priority priority;
0092 rtems_status_code status;
0093 int index;
0094 rtems_task_entry task_entry;
0095
0096
0097
0098
0099
0100
0101 priority = RTEMS_MAXIMUM_PRIORITY - 2u;
0102 if ( OPERATION_COUNT > RTEMS_MAXIMUM_PRIORITY - 2u )
0103 operation_count = (int) (RTEMS_MAXIMUM_PRIORITY - 2u);
0104
0105 for( index = 0 ; index < operation_count ; index++ ) {
0106 status = rtems_task_create(
0107 rtems_build_name( 'M', 'I', 'D', ' ' ),
0108 priority,
0109 RTEMS_MINIMUM_STACK_SIZE,
0110 RTEMS_DEFAULT_MODES,
0111 RTEMS_DEFAULT_ATTRIBUTES,
0112 &Task_id[ index ]
0113 );
0114 directive_failed( status, "rtems_task_create LOOP" );
0115
0116 if ( index == operation_count-1 ) task_entry = High_task;
0117 else task_entry = Middle_tasks;
0118
0119 status = rtems_task_start( Task_id[ index ], task_entry, 0 );
0120 directive_failed( status, "rtems_task_start LOOP" );
0121
0122 priority--;
0123 }
0124
0125 Task_count = 0;
0126
0127 benchmark_timer_initialize();
0128 (void) rtems_event_send( Task_id[ Task_count ], RTEMS_EVENT_16 );
0129
0130 }
0131
0132 rtems_task Middle_tasks(
0133 rtems_task_argument argument
0134 )
0135 {
0136 rtems_event_set event_out;
0137
0138 (void) rtems_event_receive(
0139 RTEMS_EVENT_16,
0140 RTEMS_DEFAULT_OPTIONS,
0141 RTEMS_NO_TIMEOUT,
0142 &event_out
0143 );
0144
0145 Task_count++;
0146
0147 (void) rtems_event_send(
0148 Task_id[ Task_count ],
0149 RTEMS_EVENT_16
0150 );
0151 }
0152
0153 rtems_task High_task(
0154 rtems_task_argument argument
0155 )
0156 {
0157 rtems_event_set event_out;
0158
0159 (void) rtems_event_receive(
0160 RTEMS_EVENT_16,
0161 RTEMS_DEFAULT_OPTIONS,
0162 RTEMS_NO_TIMEOUT,
0163 &event_out
0164 );
0165
0166 end_time = benchmark_timer_read();
0167
0168 put_time(
0169 "rtems_event_send: task readied preempts caller",
0170 end_time,
0171 operation_count - 1u,
0172 0u,
0173 0
0174 );
0175
0176 TEST_END();
0177 rtems_test_exit( 0 );
0178 }