int watchdog_clear_if_timeout(watchdog_ctx_t *ctx) { int elapsed = time(NULL) - ctx->lastclear; if (ctx->status != STARTED) return -1; if (elapsed > ctx->clear_period) { watchdog_clear(ctx); return 1; } return 0; }
void main(void) { cpu_init(); device_init(); DPRINTF("Device Started.\n"); while(1) { watchdog_clear(); wait_for_cmd(); check_water_status(); if(schedule_count > SCHE_COUNT) { ET1 = 0; schedule_count = 0; ET1 = 1; process_cmd(); } } }
int chip_watchdog(void) { watchdog_clear(); return 0; };
/* * this routine serves two purposes: * 1. report progress * 2. check for deadlocks */ void *reporter(void *arg) { int status; int end = 0; struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = USEC_TO_NSEC(report_interval); tsnorm(&ts); if (duration >= 0) end = duration + time(NULL); /* sleep initially to let everything get up and running */ status = clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL); if (status) { error("from clock_nanosleep: %s\n", strerror(status)); return NULL; } debug("reporter: starting report loop\n"); info("Press Control-C to stop test\nCurrent Inversions: \n"); for (;;) { pthread_mutex_lock(&shutdown_mtx); if (shutdown) { pthread_mutex_unlock(&shutdown_mtx); break; } pthread_mutex_unlock(&shutdown_mtx); /* wait for our reporting interval */ status = clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL); if (status) { error("from clock_nanosleep: %s\n", strerror(status)); break; } /* check for signaled shutdown */ if (!quiet) { pthread_mutex_lock(&shutdown_mtx); if (shutdown == 0) { fputs(UP_ONE, stdout); printf("Current Inversions: %lu\n", total_inversions()); } } pthread_mutex_unlock(&shutdown_mtx); /* if we specified a duration, see if it has expired */ if (end && time(NULL) > end) { info("duration reached (%d seconds)\n", duration); set_shutdown_flag(); continue; } /* check for a pending SIGINT */ if (pending_interrupt()) { info("Keyboard Interrupt!\n"); break; } /* check watchdog stuff */ if ((watchdog_check())) { error("reporter stopping due to watchdog event\n"); set_shutdown_flag(); break; } /* clear watchdog counters */ watchdog_clear(); } debug("reporter: finished\n"); set_shutdown_flag(); return NULL; }