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 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <rtems/btimer.h>
0034
0035 #define CONFIGURE_INIT
0036 #include "system.h"
0037
0038 const char rtems_test_name[] = "TIME TEST 5";
0039
0040 rtems_id Task_id[OPERATION_COUNT+1];
0041 uint32_t Task_index;
0042
0043 rtems_task High_task(
0044 rtems_task_argument argument
0045 );
0046
0047 rtems_task Middle_tasks(
0048 rtems_task_argument argument
0049 );
0050
0051 rtems_task Low_task(
0052 rtems_task_argument argument
0053 );
0054
0055 extern void test_init(void);
0056
0057 int operation_count = OPERATION_COUNT;
0058
0059 rtems_task Init(
0060 rtems_task_argument argument
0061 )
0062 {
0063 Print_Warning();
0064
0065 TEST_BEGIN();
0066
0067 test_init();
0068
0069 rtems_task_exit();
0070 }
0071
0072 void test_init(void)
0073 {
0074 rtems_status_code status;
0075 rtems_task_entry task_entry;
0076 rtems_task_priority priority;
0077 uint32_t index;
0078
0079 priority = RTEMS_MAXIMUM_PRIORITY - 1;
0080
0081 if ( OPERATION_COUNT > RTEMS_MAXIMUM_PRIORITY - 2 )
0082 operation_count = RTEMS_MAXIMUM_PRIORITY - 2;
0083
0084 for( index = 0; index <= operation_count ; index++ ) {
0085
0086 status = rtems_task_create(
0087 rtems_build_name( 'T', 'I', 'M', 'E' ),
0088 priority,
0089 RTEMS_MINIMUM_STACK_SIZE,
0090 RTEMS_DEFAULT_MODES,
0091 RTEMS_DEFAULT_ATTRIBUTES,
0092 &Task_id[ index ]
0093 );
0094 directive_failed( status, "rtems_task_create loop" );
0095
0096 priority--;
0097
0098 if ( index==0 ) task_entry = Low_task;
0099 else if ( index==operation_count ) task_entry = High_task;
0100 else task_entry = Middle_tasks;
0101
0102 status = rtems_task_start( Task_id[ index ], task_entry, 0 );
0103 directive_failed( status, "rtems_task_start loop" );
0104 }
0105 }
0106
0107 rtems_task High_task(
0108 rtems_task_argument argument
0109 )
0110 {
0111 benchmark_timer_initialize();
0112
0113 (void) rtems_task_suspend( RTEMS_SELF );
0114
0115 end_time = benchmark_timer_read();
0116
0117 put_time(
0118 "rtems_task_resume: task readied preempts caller",
0119 end_time,
0120 operation_count,
0121 0,
0122 0
0123 );
0124
0125 TEST_END();
0126 rtems_test_exit( 0 );
0127 }
0128
0129 rtems_task Middle_tasks(
0130 rtems_task_argument argument
0131 )
0132 {
0133 (void) rtems_task_suspend( RTEMS_SELF );
0134
0135 Task_index++;
0136 (void) rtems_task_resume( Task_id[ Task_index ] );
0137 }
0138
0139 rtems_task Low_task(
0140 rtems_task_argument argument
0141 )
0142 {
0143
0144 end_time = benchmark_timer_read();
0145
0146 put_time(
0147 "rtems_task_suspend: calling task",
0148 end_time,
0149 operation_count,
0150 0,
0151 0
0152 );
0153
0154 Task_index = 1;
0155 benchmark_timer_initialize();
0156 (void) rtems_task_resume( Task_id[ Task_index ] );
0157 }