diff --git a/README.md b/README.md index 4255e1f..d445f17 100644 --- a/README.md +++ b/README.md @@ -25,16 +25,6 @@ Mainly defers to the TACOS CAN module, but provides a simple interface for sendi Expandable for isotp. -## Watchdog - -The watchdog task waits for signals sent either from its heartbeat timer or manually via `sta::notifyWatchdog` -and passes the event flags to the `sta::watchdogEventHandler` function. This function must be implemented by the application. - -Configuration: -* `#define STA_RTOS_WATCHDOG_ENABLE`: Enable module -* `#define STA_RTOS_WATCHDOG_TIMER_PERIOD `: Set period in ticks of heartbeat timer (default: 1000) - - # STA-Core Interfaces The library provides implementations for the following interfaces using CMSIS-RTOS2 functionality: diff --git a/include/sta/rtos/system/watchdog.hpp b/include/sta/rtos/system/watchdog.hpp deleted file mode 100644 index 1e3a9e4..0000000 --- a/include/sta/rtos/system/watchdog.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @file - * @brief Implementation of watchdog system task. - */ -#ifndef STA_RTOS_SYSTEM_WATCHDOG_HPP -#define STA_RTOS_SYSTEM_WATCHDOG_HPP - - -/** - * @defgroup STA_RTOS_Watchdog Watchdog task - * @ingroup STA_RTOS_API - * @brief Watchdog system task. - * - * Check @ref STA_RTOS_BuildConfig for configuration options. - */ - -#ifdef DOXYGEN -/** - * @brief Enable module. - * - * @ingroup STA_RTOS_BuildConfig - */ -# define STA_RTOS_WATCHDOG_ENABLE -#endif // DOXYGEN - - -/** - * @def STA_RTOS_SYSTEM_WATCHDOG_TIMER_PERIOD - * @brief Set period in ticks of heartbeat timer. - * - * @ingroup STA_RTOS_BuildConfig - */ -#ifndef STA_RTOS_SYSTEM_WATCHDOG_TIMER_PERIOD -# define STA_RTOS_SYSTEM_WATCHDOG_TIMER_PERIOD 1000 -#endif // !STA_RTOS_SYSTEM_WATCHDOG_TIMER_PERIOD - - -#include -#ifdef STA_RTOS_WATCHDOG_ENABLE - - -#include - - -// Watchdog task flags -// - -/** - * @brief Watchdog heartbeat flag. - * - * @ingroup STA_RTOS_Watchdog - */ -#define STA_WATCHDOG_FLAG_HEARTBEAT 0x00001000U - - -namespace sta -{ - namespace rtos - { - /** - * @brief Initialize system watchdog. - * - * @ingroup STA_RTOS_Watchdog - */ - void initWatchdog(); - - /** - * @brief Send notification to watchdog task. - * - * @ingroup STA_RTOS_Watchdog - */ - void notifyWatchdog(uint32_t flags); - - - /** - * @brief Handler for watchdog events. - * - * Must be implemented by application. - * - * @param arg Watchdog task argument - * @param flags Event flags - * - * @ingroup STA_RTOS_Watchdog - */ - void watchdogEventHandler(void * arg, uint32_t flags); - } // namespace rtos -} // namespace sta - - -#endif // STA_RTOS_WATCHDOG_ENABLE - -#endif // STA_RTOS_SYSTEM_WATCHDOG_HPP diff --git a/src/system/startup.cpp b/src/system/startup.cpp index 6602034..e03a80e 100644 --- a/src/system/startup.cpp +++ b/src/system/startup.cpp @@ -1,6 +1,4 @@ #include -#include - namespace sta { @@ -13,10 +11,6 @@ namespace sta initSystemEvents(); #endif // STA_RTOS_SYSTEM_EVENTS_ENABLE -#ifdef STA_RTOS_WATCHDOG_ENABLE - initWatchdog(); -#endif // STA_RTOS_WATCHDOG_ENABLE - } } // namespace rtos } // namespace sta diff --git a/src/system/watchdog.cpp b/src/system/watchdog.cpp deleted file mode 100644 index 1bf582d..0000000 --- a/src/system/watchdog.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include -#ifdef STA_RTOS_WATCHDOG_ENABLE - -#include -#include -#include -#include -#include - -#include -#include - - -namespace -{ - StaticTask_t watchdogCB; - StaticTimer_t watchdogTimerCB; - - osThreadId_t watchdogTaskHandle = nullptr; - osTimerId_t watchdogTimerHandle = nullptr; - - // Static stack memory - uint32_t stackBuffer[256]; -} - - -extern "C" -{ - void watchdogTask(void * arg); - void watchdogTimerCallback(void *); -} - - -namespace sta -{ - namespace rtos - { - void initWatchdog() - { - // Create thread using static allocation - const osThreadAttr_t taskAttributes = { - .name = "sysWatchdog", - .cb_mem = &watchdogCB, - .cb_size = sizeof(watchdogCB), - .stack_mem = &stackBuffer[0], - .stack_size = sizeof(stackBuffer), - .priority = (osPriority_t) osPriorityLow, - }; - - watchdogTaskHandle = osThreadNew(watchdogTask, NULL, &taskAttributes); - STA_ASSERT_MSG(watchdogTaskHandle != nullptr, "System watchdog task initialization failed"); - - - // Create timer using static allocation - const osTimerAttr_t timerAttributes = { - .name = "sysWatchdogTimer", - .attr_bits = 0, // Reserved, must be set to 0 - .cb_mem = &watchdogTimerCB, - .cb_size = sizeof(watchdogTimerCB) - }; - - watchdogTimerHandle = osTimerNew(watchdogTimerCallback, osTimerPeriodic, nullptr, &timerAttributes); - STA_ASSERT_MSG(watchdogTimerHandle != nullptr, "System watchdog timer initialization failed"); - osTimerStart(watchdogTimerHandle, STA_RTOS_SYSTEM_WATCHDOG_TIMER_PERIOD); - } - - - void notifyWatchdog(uint32_t flags) - { - STA_ASSERT_MSG(watchdogTaskHandle != nullptr, "System watchdog not initialized"); - osThreadFlagsSet(watchdogTaskHandle, flags); - } - } // namespace rtos -} // namespace sta - - - -void watchdogTask(void * arg) -{ - sta::rtos::waitForStartupEvent(); - - while (true) - { - // Wait for any flag to be set - uint32_t flags = osThreadFlagsWait(STA_RTOS_THREAD_FLAGS_VALID_BITS, osFlagsWaitAny, osWaitForever); - - // Call event handler - sta::rtos::watchdogEventHandler(arg, flags); - } -} - -void watchdogTimerCallback(void *) -{ - // Notify watchdog task to send heartbeat message - // Required because blocking in a timer callback is not allowed - osThreadFlagsSet(watchdogTaskHandle, STA_WATCHDOG_FLAG_HEARTBEAT); -} - - - -#endif // STA_RTOS_WATCHDOG_ENABLE