File indexing completed on 2025-05-11 08:24:44
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 "system.h"
0034
0035 rtems_timer_service_routine Signal_3_to_task_1(
0036 rtems_id id,
0037 void *pointer
0038 )
0039 {
0040 rtems_status_code status;
0041
0042 status = rtems_signal_send( Task_id[ 1 ], RTEMS_SIGNAL_3 );
0043 directive_failed_with_level( status, "rtems_signal_send of 3", 1 );
0044
0045 Timer_got_this_id = id;
0046 Timer_got_this_pointer = pointer;
0047
0048 Signals_sent = TRUE;
0049 }
0050
0051 rtems_task Task_1(
0052 rtems_task_argument argument
0053 )
0054 {
0055 rtems_mode previous_mode;
0056 rtems_status_code status;
0057
0058 #if defined(RTEMS_SMP) || CPU_ENABLE_ROBUST_THREAD_DISPATCH == TRUE
0059 puts( "TA1 - rtems_signal_catch - RTEMS_INTERRUPT_LEVEL( 0 )" );
0060 status = rtems_signal_catch( Process_asr, RTEMS_INTERRUPT_LEVEL(0) );
0061 #else
0062 puts( "TA1 - rtems_signal_catch - RTEMS_INTERRUPT_LEVEL( 3 )" );
0063 status = rtems_signal_catch( Process_asr, RTEMS_INTERRUPT_LEVEL(3) );
0064 #endif
0065 directive_failed( status, "rtems_signal_catch" );
0066
0067 puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_16 to self" );
0068 status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_16 );
0069 directive_failed( status, "rtems_signal_send" );
0070
0071 puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_0 to self" );
0072 status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_0 );
0073 directive_failed( status, "rtems_signal_send" );
0074
0075 puts( "TA1 - rtems_signal_catch - RTEMS_NO_ASR" );
0076 status = rtems_signal_catch( Process_asr, RTEMS_NO_ASR );
0077 directive_failed( status, "rtems_signal_catch" );
0078
0079 puts( "TA1 - rtems_signal_send - RTEMS_SIGNAL_1 to self" );
0080 status = rtems_signal_send( RTEMS_SELF, RTEMS_SIGNAL_1 );
0081 directive_failed( status, "rtems_signal_send" );
0082
0083 puts( "TA1 - rtems_task_mode - disable ASRs" );
0084 status = rtems_task_mode( RTEMS_NO_ASR, RTEMS_ASR_MASK, &previous_mode );
0085 directive_failed( status, "rtems_task_mode" );
0086
0087 Timer_got_this_id = 0;
0088 Timer_got_this_pointer = NULL;
0089
0090 puts( "TA1 - sending signal to RTEMS_SELF from timer" );
0091 status = rtems_timer_fire_after(
0092 Timer_id[ 1 ],
0093 rtems_clock_get_ticks_per_second() / 2,
0094 Signal_3_to_task_1,
0095 (void *) Task_1
0096 );
0097 directive_failed( status, "rtems_timer_fire_after" );
0098
0099 puts( "TA1 - waiting for signal to arrive" );
0100
0101 Signals_sent = FALSE;
0102 Asr_fired = FALSE;
0103
0104 while ( Signals_sent == FALSE )
0105 ;
0106
0107 if ( Timer_got_this_id == Timer_id[ 1 ] &&
0108 Timer_got_this_pointer == Task_1 )
0109 puts( "TA1 - timer routine got the correct arguments" );
0110 else
0111 printf(
0112 "TA1 - timer got (0x%" PRIxrtems_id ", %p) instead of (0x%"
0113 PRIxrtems_id ", %p)!!!!\n",
0114 Timer_got_this_id,
0115 Timer_got_this_pointer,
0116 Timer_id[ 1 ],
0117 Task_1
0118 );
0119
0120 puts( "TA1 - rtems_task_mode - enable ASRs" );
0121 status = rtems_task_mode( RTEMS_ASR, RTEMS_ASR_MASK, &previous_mode );
0122 directive_failed( status, "rtems_task_mode" );
0123
0124 status = rtems_task_wake_after(2 * rtems_clock_get_ticks_per_second());
0125 directive_failed( status, "rtems_task_wake_after" );
0126
0127 puts( "TA1 - rtems_signal_catch - asraddr of NULL" );
0128 status = rtems_signal_catch( NULL, RTEMS_DEFAULT_MODES );
0129 directive_failed( status, "rtems_signal_catch" );
0130
0131 puts( "TA1 - rtems_task_exit" );
0132 rtems_task_exit();
0133 }