File indexing completed on 2025-05-11 08:24:45
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 <tmacros.h>
0034 #include <rtems/cpuuse.h>
0035
0036 const char rtems_test_name[] = "SP 46";
0037
0038 rtems_task Periodic_Task(
0039 rtems_task_argument argument
0040 );
0041 rtems_task Init(
0042 rtems_task_argument argument
0043 );
0044
0045 volatile int partial_loop = 0;
0046
0047 rtems_task Periodic_Task(
0048 rtems_task_argument argument
0049 )
0050 {
0051 rtems_status_code status;
0052 rtems_name period_name = rtems_build_name('P','E','R','a');
0053 rtems_id period_id;
0054 rtems_interval start;
0055 rtems_interval end;
0056
0057 puts( "Periodic - Create Period" );
0058
0059 status = rtems_rate_monotonic_create( period_name, &period_id );
0060 directive_failed(status, "rate_monotonic_create");
0061
0062 partial_loop = 0;
0063 while (1) {
0064
0065 status = rtems_rate_monotonic_period( period_id, 25 );
0066 directive_failed(status, "rate_monotonic_period");
0067 partial_loop = 0;
0068
0069 start = rtems_clock_get_ticks_since_boot();
0070 end = start + 5;
0071 while ( end <= rtems_clock_get_ticks_since_boot() )
0072 ;
0073
0074 partial_loop = 1;
0075
0076 rtems_task_wake_after( 5 );
0077 }
0078
0079 puts( "Periodic - Deleting self" );
0080 rtems_task_exit();
0081 }
0082
0083 rtems_task Init(
0084 rtems_task_argument argument
0085 )
0086 {
0087 rtems_status_code status;
0088 rtems_id task_id;
0089
0090 TEST_BEGIN();
0091
0092
0093
0094
0095
0096
0097 puts( "INIT - rtems_task_create - creating task 1" );
0098 status = rtems_task_create(
0099 rtems_build_name( 'T', 'A', '1', ' ' ),
0100 1,
0101 RTEMS_MINIMUM_STACK_SIZE,
0102 RTEMS_DEFAULT_MODES,
0103 RTEMS_DEFAULT_ATTRIBUTES,
0104 &task_id
0105 );
0106 directive_failed( status, "rtems_task_create of TA1" );
0107
0108 puts( "INIT - rtems_task_start - TA1 " );
0109 status = rtems_task_start( task_id, Periodic_Task, 0 );
0110 directive_failed( status, "rtems_task_start of TA1" );
0111
0112 while ( !partial_loop ) {
0113 status = rtems_task_wake_after( 2 );
0114 directive_failed( status, "rtems_task_wake_after" );
0115 }
0116
0117 rtems_cpu_usage_reset();
0118
0119 status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() );
0120 directive_failed( status, "rtems_task_wake_after" );
0121
0122
0123
0124
0125 TEST_END();
0126 rtems_test_exit( 0 );
0127 }
0128
0129 #define CONFIGURE_INIT
0130
0131
0132 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0133 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0134
0135
0136 #define CONFIGURE_MAXIMUM_TASKS 2
0137 #define CONFIGURE_MAXIMUM_PERIODS 1
0138 #define CONFIGURE_INIT_TASK_STACK_SIZE (RTEMS_MINIMUM_STACK_SIZE * 2)
0139 #define CONFIGURE_INIT_TASK_PRIORITY 10
0140 #define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
0141
0142 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0143
0144 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0145
0146 #define CONFIGURE_EXTRA_TASK_STACKS (1 * RTEMS_MINIMUM_STACK_SIZE)
0147
0148 #include <rtems/confdefs.h>
0149