static void reset_callback(rtems_id timer_id, void *arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; sc = rtems_timer_reset(timer [TIMER_RESET]); directive_failed_with_level(sc, "rtems_timer_reset", -1); sc = rtems_timer_reset(timer [TIMER_NEVER_INTERVAL]); directive_failed_with_level(sc, "rtems_timer_reset", -1); reset_tod_timer(); if (!case_hit) { case_hit = _Timer_server->insert_chain != NULL; } }
static void interrupt_callback(rtems_id timer_id, void *arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; assert_time(T2); rtems_test_assert( obtain_try && !obtain_done && !release_happened && !delayed_happened && !interrupt_triggered_happened && !server_triggered_happened ); sc = rtems_timer_server_fire_after( timer [INTERRUPT_TRIGGERED], T3 - T2, interrupt_triggered_callback, NULL ); directive_failed_with_level(sc, "rtems_timer_server_fire_after", -1); interrupt_happened = true; }
/* * Timer Service Routine * * If we are in an ISR, then this is a normal clock tick. * If we are not, then it is the test case. */ rtems_timer_service_routine test_unblock_task( rtems_id timer, void *arg ) { bool in_isr; rtems_status_code status; in_isr = rtems_interrupt_is_in_progress(); status = rtems_task_is_suspended( blocked_task_id ); if ( in_isr ) { status = rtems_timer_fire_after( timer, 1, test_unblock_task, NULL ); directive_failed( status, "timer_fire_after failed" ); return; } if ( (status != RTEMS_ALREADY_SUSPENDED) ) { status = rtems_timer_fire_after( timer, 1, test_unblock_task, NULL ); directive_failed( status, "timer_fire_after failed" ); return; } blocked_task_status = 2; _Thread_Disable_dispatch(); status = rtems_task_resume( blocked_task_id ); _Thread_Unnest_dispatch(); #if defined( RTEMS_SMP ) directive_failed_with_level( status, "rtems_task_resume", 1 ); #else directive_failed( status, "rtems_task_resume" ); #endif }
void Task_switch( rtems_tcb *unused, rtems_tcb *heir ) { uint32_t index; rtems_time_of_day time; rtems_status_code status; index = task_number( heir->Object.id ) - task_number( Task_id[1] ) + 1; switch( index ) { case 1: case 2: case 3: Run_count[ index ] += 1; status = rtems_clock_get_tod( &time ); directive_failed_with_level( status, "rtems_clock_get_tod", 1 ); if (taskSwitchLogIndex < (sizeof taskSwitchLog / sizeof taskSwitchLog[0])) { taskSwitchLog[taskSwitchLogIndex].taskIndex = index; taskSwitchLog[taskSwitchLogIndex].when = time; taskSwitchLogIndex++; } if ( time.second >= 16 ) testsFinished = 1; break; case 0: default: break; } }
rtems_timer_service_routine Delayed_resume( rtems_id ignored_id, void *ignored_address ) { rtems_status_code status; status = rtems_task_resume( Task_id[ 1 ] ); directive_failed_with_level( status, "rtems_task_resume of self", 1 ); }
rtems_timer_service_routine TA2_send_10_to_self( rtems_id ignored_id, void *ignored_address ) { rtems_status_code status; status = rtems_event_send( Task_id[ 2 ], RTEMS_EVENT_10 ); directive_failed_with_level( status, "rtems_event_send of 10", 1 ); }
rtems_timer_service_routine TA1_send_9_to_self_60_seconds( rtems_id ignored_id, void *ignored_address ) { rtems_status_code status; status = rtems_event_send( Task_id[ 1 ], RTEMS_EVENT_9 ); directive_failed_with_level( status, "rtems_event_send of 9", 1 ); }
rtems_timer_service_routine test_signal_from_isr( rtems_id timer, void *arg ) { rtems_status_code status; status = rtems_signal_send( main_task, 0x0a0b0c0d ); directive_failed_with_level( status, "rtems_signal_send", 1 ); signal_sent = TRUE; }
static void reset_tod_timer(void) { rtems_status_code sc = RTEMS_SUCCESSFUL; sc = rtems_timer_server_fire_when( timer [TIMER_NEVER_TOD], &tod, never_callback, NULL ); directive_failed_with_level(sc, "rtems_timer_server_fire_after", -1); }
static rtems_timer_service_routine test_release_from_isr( rtems_id timer, void *arg ) { rtems_status_code status; if ( interrupts_blocking_op() ) { case_hit = true; } status = rtems_semaphore_release( Semaphore ); directive_failed_with_level( status, "release", -1 ); }
rtems_timer_service_routine test_release_from_isr( rtems_id timer, void *arg ) { rtems_status_code status; if ( getState() == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) { case_hit = true; } status = rtems_semaphore_release( Semaphore ); directive_failed_with_level( status, "release", -1 ); }
rtems_timer_service_routine Signal_3_to_task_1( rtems_id id, void *pointer ) { rtems_status_code status; status = rtems_signal_send( Task_id[ 1 ], RTEMS_SIGNAL_3 ); directive_failed_with_level( status, "rtems_signal_send of 3", 1 ); Timer_got_this_id = id; Timer_got_this_pointer = pointer; Signals_sent = TRUE; }
static void release_callback(rtems_id timer_id, void *arg) { rtems_status_code sc = RTEMS_SUCCESSFUL; char buf [1]; size_t size = sizeof(buf); uint32_t released = 0; assert_time(T4); rtems_test_assert( obtain_try && interrupt_happened && !delayed_happened && !interrupt_triggered_happened && !server_triggered_happened ); switch (resource_type) { case SEMAPHORE: sc = rtems_semaphore_release(semaphore); break; case MUTEX: sc = rtems_semaphore_release(mutex); break; case MESSAGE_QUEUE: sc = rtems_message_queue_send(message_queue, buf, size); break; case EVENT: sc = rtems_event_send(_Timer_server->thread->Object.id, RTEMS_EVENT_0); break; case BARRIER: sc = rtems_barrier_release(barrier, &released); break; case TASK_WAKE_AFTER: sc = RTEMS_SUCCESSFUL; break; default: rtems_test_assert(false); break; } directive_failed_with_level(sc, "release", 1); release_happened = true; }