static int rtems_shell_main_time( int argc, char *argv[] ) { rtems_shell_cmd_t* shell_cmd; int errorlevel = 0; struct timespec start; struct timespec end; struct timespec period; rtems_status_code sc; argc--; sc = rtems_clock_get_uptime(&start); if (sc != RTEMS_SUCCESSFUL) printf("error: cannot read time\n"); if (argc) { shell_cmd = rtems_shell_lookup_cmd(argv[1]); if ( argv[1] == NULL ) { errorlevel = -1; } else if ( shell_cmd == NULL ) { errorlevel = rtems_shell_script_file(argc, &argv[1]); } else { errorlevel = shell_cmd->command(argc, &argv[1]); } } sc = rtems_clock_get_uptime(&end); if (sc != RTEMS_SUCCESSFUL) printf("error: cannot read time\n"); period.tv_sec = end.tv_sec - start.tv_sec; period.tv_nsec = end.tv_nsec - start.tv_nsec; if (period.tv_nsec < 0) { --period.tv_sec; period.tv_nsec += 1000000000UL; } printf("time: %" PRIdtime_t ":%02" PRIdtime_t ":%02" PRIdtime_t ".%03li\n", period.tv_sec / 3600, period.tv_sec / 60, period.tv_sec % 60, period.tv_nsec / 1000000); return errorlevel; }
int getrusage(int who, struct rusage *usage) { struct timespec uptime; struct timeval rtime; if ( !usage ) rtems_set_errno_and_return_minus_one( EFAULT ); /* * RTEMS only has a single process so there are no children. * The single process has been running since the system * was booted and since there is no distinction between system * and user time, we will just report the uptime. */ if (who == RUSAGE_SELF) { rtems_clock_get_uptime( &uptime ); rtime.tv_sec = uptime.tv_sec; rtime.tv_usec = uptime.tv_nsec / 1000; usage->ru_utime = rtime; usage->ru_stime = rtime; return 0; } if (who == RUSAGE_CHILDREN) { rtems_set_errno_and_return_minus_one( ENOSYS ); } rtems_set_errno_and_return_minus_one( EINVAL ); }
static void rx_irq_handler(void *arg) { static struct rx_state tmp_state; static uint8_t next_channel = 0xff; struct timespec diff, ts; rtems_clock_get_uptime(&ts); rtems_timespec_subtract(&tmp_state.last_update, &ts, &diff); memcpy(&tmp_state, &ts, sizeof(ts)); if ((diff.tv_sec > 0) || (diff.tv_nsec > MAX_PULSE_TIME)) { next_channel = 0; } else if (next_channel < RX_NUM_CHANNELS) { tmp_state.values[next_channel] = diff.tv_nsec; next_channel++; if (next_channel == RX_NUM_CHANNELS) memcpy(¤t_state, &tmp_state, sizeof(current_state)); } volatile lm3s69xx_gpio *portd = LM3S69XX_GPIO(LM3S69XX_PORT_D); portd->icr = 1U << 3; rtems_semaphore_release(rx_sem); }
rtems_task Init( rtems_task_argument argument ) { rtems_status_code sc; rtems_id timer1; struct timespec uptime; TEST_BEGIN(); sc = rtems_timer_initiate_server( 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_ATTRIBUTES ); directive_failed( sc, "rtems_timer_initiate_server" ); sc = rtems_timer_create(rtems_build_name( 'T', 'M', 'R', '1' ), &timer1); directive_failed( sc, "rtems_timer_create" ); Fired = 0; timerRan = false; Timer_Routine(timer1, NULL); while (1) { sc = rtems_task_wake_after( 10 ); directive_failed( sc, "rtems_task_wake_after" ); if ( timerRan == true ) { timerRan = false; sc = rtems_clock_get_uptime( &uptime ); directive_failed( sc, "rtems_clock_get_uptime" ); printf( "Timer fired at %" PRIdtime_t "\n", uptime.tv_sec ); } if ( Fired >= 10 ) { TEST_END(); rtems_test_exit( 0 ); } /* technically the following is a critical section */ } }
rtems_task Test_task( rtems_task_argument task_index ) { rtems_status_code status; rtems_interval ticks; struct timespec uptime; ticks = task_index * 5 * rtems_clock_get_ticks_per_second(); for ( ; ; ) { status = rtems_task_wake_after( ticks ); status = rtems_clock_get_uptime( &uptime ); if ( uptime.tv_sec >= 35 ) { printk( "*** END OF LOW MEMORY CLOCK TICK TEST (delay) ***\n" ); rtems_shutdown_executive( 0 ); } printk( "TA%d - rtems_clock_uptime - %d:%d\n", task_index, uptime.tv_sec, uptime.tv_nsec ); } }
rtems_task Init( rtems_task_argument argument ) { rtems_status_code status; rtems_time_of_day time; int index; puts( "\n\n*** NANOSECOND CLOCK TEST ***" ); time.year = 2007; time.month = 03; time.day = 24; time.hour = 11; time.minute = 15; time.second = 0; time.ticks = 0; status = rtems_clock_set( &time ); directive_failed( status, "clock set" ); /* * Iterate 10 times showing difference in TOD */ printf( "10 iterations of getting TOD\n" ); for (index=0 ; index <10 ; index++ ) { struct timespec start, stop; struct timespec diff; #if 0 clock_gettime( CLOCK_REALTIME, &start ); clock_gettime( CLOCK_REALTIME, &stop ); #else _TOD_Get( &start ); _TOD_Get( &stop ); #endif subtract_em( &start, &stop, &diff ); printf( "Start: %s:%ld\nStop : %s:%ld", my_ctime(start.tv_sec), start.tv_nsec, my_ctime(stop.tv_sec), stop.tv_nsec ); printf( " --> %" PRIdtime_t ":%ld\n", diff.tv_sec, diff.tv_nsec ); } /* * Iterate 10 times showing difference in Uptime */ printf( "\n10 iterations of getting Uptime\n" ); for (index=0 ; index <10 ; index++ ) { struct timespec start, stop; struct timespec diff; rtems_clock_get_uptime( &start ); rtems_clock_get_uptime( &stop ); subtract_em( &start, &stop, &diff ); printf( "%" PRIdtime_t ":%ld %" PRIdtime_t ":%ld --> %" PRIdtime_t ":%ld\n", start.tv_sec, start.tv_nsec, stop.tv_sec, stop.tv_nsec, diff.tv_sec, diff.tv_nsec ); } /* * Iterate 10 times showing difference in Uptime with different counts */ printf( "\n10 iterations of getting Uptime with different loop values\n" ); for (index=1 ; index <=10 ; index++ ) { struct timespec start, stop; struct timespec diff; int j, max = (index * 10000); rtems_clock_get_uptime( &start ); for (j=0 ; j<max ; j++ ) dummy_function_empty_body_to_force_call(); rtems_clock_get_uptime( &stop ); subtract_em( &start, &stop, &diff ); printf( "loop of %d %" PRIdtime_t ":%ld %" PRIdtime_t ":%ld --> %" PRIdtime_t ":%ld\n", max, start.tv_sec, start.tv_nsec, stop.tv_sec, stop.tv_nsec, diff.tv_sec, diff.tv_nsec ); } sleep(1); puts( "*** END OF NANOSECOND CLOCK TEST ***" ); exit(0); }
/* * Print routing tables. */ void routepr(u_long rtree) { struct radix_node_head **rnhp, *rnh, head; size_t intsize; int fam, fibnum, numfibs; intsize = sizeof(int); if (sysctlbyname("net.my_fibnum", &fibnum, &intsize, NULL, 0) == -1) fibnum = 0; if (sysctlbyname("net.fibs", &numfibs, &intsize, NULL, 0) == -1) numfibs = 1; rt_tables = calloc(numfibs * (AF_MAX+1), sizeof(struct radix_node_head *)); if (rt_tables == NULL) err(EX_OSERR, "memory allocation failed"); /* * Since kernel & userland use different timebase * (time_uptime vs time_second) and we are reading kernel memory * directly we should do rt_rmx.rmx_expire --> expire_time conversion. */ #ifdef __rtems__ { rtems_clock_get_uptime(&uptime); } #else /* __rtems__ */ if (clock_gettime(CLOCK_UPTIME, &uptime) < 0) err(EX_OSERR, "clock_gettime() failed"); #endif /* __rtems__ */ printf("Routing tables\n"); if (Aflag == 0 && NewTree) ntreestuff(); else { if (rtree == 0) { printf("rt_tables: symbol not in namelist\n"); return; } if (kread((u_long)(rtree), (char *)(rt_tables), (numfibs * (AF_MAX+1) * sizeof(struct radix_node_head *))) != 0) return; for (fam = 0; fam <= AF_MAX; fam++) { int tmpfib; switch (fam) { case AF_INET6: case AF_INET: tmpfib = fibnum; break; default: tmpfib = 0; } rnhp = (struct radix_node_head **)*rt_tables; /* Calculate the in-kernel address. */ rnhp += tmpfib * (AF_MAX+1) + fam; /* Read the in kernel rhn pointer. */ if (kget(rnhp, rnh) != 0) continue; if (rnh == NULL) continue; /* Read the rnh data. */ if (kget(rnh, head) != 0) continue; if (fam == AF_UNSPEC) { if (Aflag && af == 0) { printf("Netmasks:\n"); p_tree(head.rnh_treetop); } } else if (af == AF_UNSPEC || af == fam) { size_cols(fam, head.rnh_treetop); pr_family(fam); do_rtent = 1; pr_rthdr(fam); p_tree(head.rnh_treetop); } } } }
rtems_task Init( rtems_task_argument argument ) { rtems_time_of_day time; rtems_interval interval; struct timeval tv; rtems_status_code status; TEST_BEGIN(); puts( "TA1 - rtems_clock_get_tod - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_tod( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_tod NULL param" ); /* errors before clock is set */ status = rtems_clock_get_tod( &time ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_tod - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_tod before clock is set #1" ); puts( "TA1 - rtems_clock_get_tod - RTEMS_NOT_DEFINED" ); } puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_seconds_since_epoch( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_seconds_since_epoch NULL param" ); status = rtems_clock_get_seconds_since_epoch( &interval ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_seconds_before_epoch" ); puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_NOT_DEFINED" ); } puts( "TA1 - rtems_clock_get_uptime - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_uptime( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_uptime NULL param" ); puts( "TA1 - rtems_clock_get_uptime_timeval" ); rtems_clock_get_uptime_timeval( &tv ); puts( "TA1 - rtems_clock_get_uptime_seconds" ); rtems_clock_get_uptime_seconds(); puts( "TA1 - rtems_clock_get_uptime_nanoseconds" ); rtems_clock_get_uptime_nanoseconds(); puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_tod_timeval( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_tod_timeval NULL param" ); status = rtems_clock_get_tod_timeval( &tv ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_timeval" ); puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_NOT_DEFINED" ); } /* NULL parameter */ status = rtems_clock_set( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_set sull pointer" ); puts( "TA1 - rtems_clock_set - RTEMS_INVALID_ADDRESS" ); build_time( &time, 2, 5, 1987, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid year" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 15, 5, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid month" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 32, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid day" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 25, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid hour" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 61, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid minute" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 61, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid second" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 45, rtems_clock_get_ticks_per_second() + 1 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid ticks per second" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set successful" ); puts( " - RTEMS_SUCCESSFUL" ); rtems_clock_get_tod( &time ); print_time( "TA1 - current time - ", &time, "\n" ); TEST_END(); }
void Screen2() { rtems_time_of_day time; rtems_interval interval; struct timeval tv; rtems_status_code status; puts( "TA1 - rtems_clock_get_tod - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_tod( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_tod NULL param" ); /* errors before clock is set */ status = rtems_clock_get_tod( &time ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_tod - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_tod before clock is set #1" ); puts( "TA1 - rtems_clock_get_tod - RTEMS_NOT_DEFINED" ); } puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_seconds_since_epoch( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_seconds_since_epoch NULL param" ); status = rtems_clock_get_seconds_since_epoch( &interval ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_seconds_before_epoch" ); puts( "TA1 - rtems_clock_get_seconds_since_epoch - RTEMS_NOT_DEFINED" ); } puts( "TA1 - rtems_clock_get_uptime - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_uptime( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_uptime NULL param" ); puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_get_tod_timeval( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_get_tod_timeval NULL param" ); status = rtems_clock_get_tod_timeval( &tv ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_clock_get_timeval" ); puts( "TA1 - rtems_clock_get_tod_timeval - RTEMS_NOT_DEFINED" ); } puts( "TA1 - rtems_clock_set_nanoseconds_extension - RTEMS_INVALID_ADDRESS" ); status = rtems_clock_set_nanoseconds_extension( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_set_nanoseconds_extension NULL param" ); /* NULL parameter */ status = rtems_clock_set( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_clock_set sull pointer" ); puts( "TA1 - rtems_clock_set - RTEMS_INVALID_ADDRESS" ); /* wake when NULL param */ status = rtems_task_wake_when( NULL ); fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_task_wake_when NULL param" ); puts( "TA1 - rtems_task_wake_when - RTEMS_INVALID_ADDRESS" ); /* wake when before set */ status = rtems_task_wake_when( &time ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - rtems_task_wake_when - RTEMS_NOT_DEFINED -- " "DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "rtems_task_wake_when before clock is set" ); puts( "TA1 - rtems_task_wake_when - RTEMS_NOT_DEFINED" ); } /* before time set */ status = rtems_timer_fire_when( 0, &time, Delayed_routine, NULL ); if ( status == RTEMS_SUCCESSFUL ) { puts( "TA1 - timer_wake_when - RTEMS_NOT_DEFINED -- DID BSP SET THE TIME OF DAY?" ); } else { fatal_directive_status( status, RTEMS_NOT_DEFINED, "task_fire_when before clock is set" ); puts( "TA1 - rtems_timer_fire_when - RTEMS_NOT_DEFINED" ); } build_time( &time, 2, 5, 1987, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid year" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 15, 5, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid month" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 32, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid day" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 25, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid hour" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 61, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid minute" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 61, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid second" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 45, rtems_clock_get_ticks_per_second() + 1 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_clock_set with invalid ticks per second" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 8, 30, 45, 0 ); print_time( "TA1 - rtems_clock_set - ", &time, "" ); status = rtems_clock_set( &time ); directive_failed( status, "rtems_clock_set successful" ); puts( " - RTEMS_SUCCESSFUL" ); /* rtems_task_wake_when */ build_time( &time, 2, 5, 1988, 8, 30, 48, rtems_clock_get_ticks_per_second() + 1 ); time.second += 3; puts( "TA1 - rtems_task_wake_when - TICKINVALID - sleep about 3 seconds" ); /* NULL time */ status = rtems_task_wake_when( NULL ); fatal_directive_status( status, RTEMS_INVALID_ADDRESS, "rtems_task_wake_when with NULL" ); puts( "TA1 - rtems_task_wake_when - RTEMS_INVALID_ADDRESS" ); /* invalid ticks */ status = rtems_task_wake_when( &time ); directive_failed( status, "rtems_task_wake_when with invalid ticks per second" ); puts( "TA1 - rtems_task_wake_when - TICKINVALID - woke up RTEMS_SUCCESSFUL" ); build_time( &time, 2, 5, 1961, 8, 30, 48, 0 ); print_time( "TA1 - rtems_task_wake_when - ", &time, "" ); status = rtems_task_wake_when( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_task_wake_when with invalid year" ); puts( " - RTEMS_INVALID_CLOCK" ); build_time( &time, 2, 5, 1988, 25, 30, 48, 0 ); print_time( "TA1 - rtems_task_wake_when - ", &time, "" ); status = rtems_task_wake_when( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_task_wake_when with invalid hour" ); puts( " - RTEMS_INVALID_CLOCK" ); rtems_clock_get_tod( &time ); print_time( "TA1 - current time - ", &time, "\n" ); time.month = 1; print_time( "TA1 - rtems_task_wake_when - ", &time, "" ); status = rtems_task_wake_when( &time ); fatal_directive_status( status, RTEMS_INVALID_CLOCK, "rtems_task_wake_when before current time" ); puts( " - RTEMS_INVALID_CLOCK" ); }