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
0030
0031 #ifdef HAVE_CONFIG_H
0032 #include "config.h"
0033 #endif
0034
0035 #define CONFIGURE_INIT
0036 #include "system.h"
0037
0038 const char rtems_test_name[] = "SP 38";
0039
0040 volatile bool signal_sent;
0041 volatile bool signal_processed;
0042
0043 rtems_id main_task;
0044 void signal_handler(rtems_signal_set signals);
0045 rtems_timer_service_routine test_signal_from_isr(
0046 rtems_id timer,
0047 void *arg
0048 );
0049
0050 void signal_handler(
0051 rtems_signal_set signals
0052 )
0053 {
0054 signal_processed = TRUE;
0055 }
0056
0057 rtems_timer_service_routine test_signal_from_isr(
0058 rtems_id timer,
0059 void *arg
0060 )
0061 {
0062 rtems_status_code status;
0063
0064 status = rtems_signal_send( main_task, 0x0a0b0c0d );
0065 directive_failed_with_level( status, "rtems_signal_send", 1 );
0066
0067 signal_sent = TRUE;
0068 }
0069
0070 rtems_task Init(
0071 rtems_task_argument argument
0072 )
0073 {
0074 rtems_status_code status;
0075 rtems_id timer;
0076 rtems_interval start;
0077 rtems_interval now;
0078
0079 TEST_BEGIN();
0080
0081 main_task = rtems_task_self();
0082
0083
0084
0085
0086 status = rtems_timer_create( 1, &timer );
0087 directive_failed( status, "rtems_timer_create" );
0088
0089
0090
0091
0092 start = rtems_clock_get_ticks_since_boot();
0093
0094 status = rtems_signal_catch( signal_handler, RTEMS_DEFAULT_MODES );
0095 directive_failed( status, "rtems_signal_catch" );
0096 puts( "rtems_signal_catch - handler installed" );
0097
0098
0099
0100
0101 signal_sent = FALSE;
0102
0103 status = rtems_timer_fire_after( timer, 10, test_signal_from_isr, NULL );
0104 directive_failed( status, "timer_fire_after failed" );
0105
0106 while (1) {
0107 now = rtems_clock_get_ticks_since_boot();
0108 if ( (now-start) > 100 ) {
0109 puts( "Signal from ISR did not get processed\n" );
0110 rtems_test_exit( 0 );
0111 }
0112 if ( signal_processed )
0113 break;
0114 }
0115
0116 puts( "Signal sent from ISR has been processed" );
0117 TEST_END();
0118 rtems_test_exit( 0 );
0119 }