You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
620 B
27 lines
620 B
2 years ago
|
typedef struct simple_watchdog_state_t {
|
||
|
uint32_t fault;
|
||
|
uint32_t last_ts;
|
||
|
uint32_t threshold;
|
||
|
} simple_watchdog_state_t;
|
||
|
|
||
|
simple_watchdog_state_t wd_state;
|
||
|
|
||
|
|
||
|
void simple_watchdog_kick(void) {
|
||
|
uint32_t ts = microsecond_timer_get();
|
||
|
|
||
|
uint32_t et = get_ts_elapsed(ts, wd_state.last_ts);
|
||
|
if (et > wd_state.threshold) {
|
||
|
print("WD timeout 0x"); puth(et); print("\n");
|
||
|
fault_occurred(wd_state.fault);
|
||
|
}
|
||
|
|
||
|
wd_state.last_ts = ts;
|
||
|
}
|
||
|
|
||
|
void simple_watchdog_init(uint32_t fault, uint32_t threshold) {
|
||
|
wd_state.fault = fault;
|
||
|
wd_state.threshold = threshold;
|
||
|
wd_state.last_ts = microsecond_timer_get();
|
||
|
}
|