Watchdog & VirtualWatchdog process() update

Add uint32 argument - pass how much time already passed to the callback.
pull/11023/head
Filip Jagodzinski 2019-06-28 08:54:36 +02:00 committed by Martin Kojtal
parent cfcad68255
commit 01490b555d
4 changed files with 15 additions and 11 deletions

View File

@ -103,14 +103,14 @@ void VirtualWatchdog::remove_from_list()
} }
} }
void VirtualWatchdog::process() void VirtualWatchdog::process(uint32_t elapsed_ms)
{ {
VirtualWatchdog *cur_ptr = _first; VirtualWatchdog *cur_ptr = _first;
while (cur_ptr != NULL) { while (cur_ptr != NULL) {
if (cur_ptr->_current_count > cur_ptr->_max_timeout) { if (cur_ptr->_current_count > cur_ptr->_max_timeout) {
system_reset(); system_reset();
} else { } else {
cur_ptr->_current_count += Watchdog::elapsed_ms; cur_ptr->_current_count += elapsed_ms;
} }
cur_ptr = cur_ptr->_next; cur_ptr = cur_ptr->_next;
} }

View File

@ -94,7 +94,7 @@ public:
* *
* Otherwise, the system resets. * Otherwise, the system resets.
*/ */
static void process(); static void process(uint32_t elapsed_ms);
protected : protected :
/** Use add_to_list to store the registered user in the list. /** Use add_to_list to store the registered user in the list.

View File

@ -31,9 +31,9 @@ Watchdog::~Watchdog()
{ {
} }
bool Watchdog::start(Callback<void()> func, uint32_t timeout) bool Watchdog::start(Callback<void(uint32_t)> func, uint32_t timeout)
{ {
MBED_ASSERT(MBED_CONF_TARGET_WATCHDOG_TIMEOUT < get_max_timeout()); MBED_ASSERT(timeout < get_max_timeout());
core_util_critical_section_enter(); core_util_critical_section_enter();
// we update callback always, to be able to register new hook if needed // we update callback always, to be able to register new hook if needed
@ -43,7 +43,7 @@ bool Watchdog::start(Callback<void()> func, uint32_t timeout)
return false; return false;
} }
watchdog_config_t config; watchdog_config_t config;
config.timeout_ms = MBED_CONF_TARGET_WATCHDOG_TIMEOUT; config.timeout_ms = timeout;
watchdog_status_t sts = hal_watchdog_init(&config); watchdog_status_t sts = hal_watchdog_init(&config);
if (sts == WATCHDOG_STATUS_OK) { if (sts == WATCHDOG_STATUS_OK) {
_running = true; _running = true;
@ -51,8 +51,11 @@ bool Watchdog::start(Callback<void()> func, uint32_t timeout)
core_util_critical_section_exit(); core_util_critical_section_exit();
if (_running) { if (_running) {
us_timestamp_t ticker_timeout = (MS_TO_US(((timeout <= 0) ? 1 : timeout))); _ticker_timeout = MS_TO_US(timeout / 2);
_ticker->attach(callback(this, &Watchdog::kick), ticker_timeout); if (_ticker_timeout == 0) {
_ticker_timeout = 1;
}
_ticker->attach_us(callback(this, &Watchdog::kick), _ticker_timeout);
} }
return _running; return _running;
} }
@ -87,7 +90,7 @@ void Watchdog::kick()
core_util_critical_section_exit(); core_util_critical_section_exit();
if (_callback) { if (_callback) {
_callback(); _callback(_ticker_timeout);
} }
} }

View File

@ -71,7 +71,7 @@ public:
* successfully. assert if one of the input parameters is out of range for the current platform. * successfully. assert if one of the input parameters is out of range for the current platform.
* false if watchdog timer was not started * false if watchdog timer was not started
*/ */
bool start(Callback<void()> func = NULL, uint32_t timeout = watchdog_timeout); bool start(Callback<void(uint32_t)> func = NULL, uint32_t timeout = watchdog_timeout);
/** Stops the watchdog timer /** Stops the watchdog timer
* *
@ -113,7 +113,8 @@ private:
~Watchdog(); ~Watchdog();
bool _running; bool _running;
Callback<void()> _callback; Callback<void(uint32_t)> _callback;
us_timestamp_t _ticker_timeout;
#if DEVICE_LPTICKER #if DEVICE_LPTICKER
/** Create singleton instance of LowPowerTicker for watchdog periodic call back of kick. /** Create singleton instance of LowPowerTicker for watchdog periodic call back of kick.