diff --git a/.gitignore b/.gitignore index 32f2c6e..7cbeba8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ # Doxygen docs/html docs/latex + +# Mac OS X +.DS_Store 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/c_api/startup.h b/include/sta/rtos/c_api/startup.h deleted file mode 100644 index 220436b..0000000 --- a/include/sta/rtos/c_api/startup.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef STA_RTOS_C_API_STARTUP_H -#define STA_RTOS_C_API_STARTUP_H - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * @brief - * - * @param arg Default task argument - */ -void startALPAKA(void * arg); - - -#ifdef __cplusplus -} -#endif - - -#endif // STA_RTOS_C_API_STARTUP_H diff --git a/include/sta/rtos/system/startup.hpp b/include/sta/rtos/system/startup.hpp index f3a2e46..f3e957a 100644 --- a/include/sta/rtos/system/startup.hpp +++ b/include/sta/rtos/system/startup.hpp @@ -5,30 +5,24 @@ #ifndef STA_RTOS_SYSTEM_STARTUP_HPP #define STA_RTOS_SYSTEM_STARTUP_HPP - /** - * @defgroup STA_RTOS_Startup Startup task + * @defgroup STA_RTOS_Startup RTOS Startup * @ingroup STA_RTOS_API - * @brief Startup system task. - * - * Check @ref STA_RTOS_BuildConfig for configuration options. + * @brief Initializes rtos functions. */ - namespace sta { namespace rtos { - /** - * @brief Extra initialization run at start of startup task. - * - * May be overridden by application if required. - * - * @ingroup STA_RTOS_Startup - */ - void startupExtras(void * argument); - } // namespace rtos -} // namespace sta + /** + * @brief Initializes rtos functions. + * + * @ingroup STA_RTOS_Startup + */ + void initSystem(); + } // namespace rtos +} // namespace sta #endif // STA_RTOS_SYSTEM_STARTUP_HPP 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 de6514d..e03a80e 100644 --- a/src/system/startup.cpp +++ b/src/system/startup.cpp @@ -1,64 +1,16 @@ -#include - -#include - -#include -#include -#include #include -#include -#include - -#include - namespace sta { namespace rtos { - // Provide weak implementation to allow overriding - STA_WEAK - void startupExtras(void *) - {} - - void initSystem() { + #ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE initSystemEvents(); #endif // STA_RTOS_SYSTEM_EVENTS_ENABLE -#ifdef STA_RTOS_WATCHDOG_ENABLE - initWatchdog(); -#endif // STA_RTOS_WATCHDOG_ENABLE - } } // namespace rtos } // namespace sta - - -void startALPAKA(void * arg) -{ - STA_ASSERT_MSG(osKernelGetState() != osKernelInactive, "Cannot call startALPAKA() before osKernelInitialize()"); - - // Initialize HAL - sta::initHAL(); - - // Initialize RTOS system resources - sta::rtos::initSystem(); - - // Call further initialization code - sta::rtos::startupExtras(arg); - - // Wake threads -#ifdef STA_RTOS_SYSTEM_EVENTS_ENABLE - sta::rtos::signalStartupEvent(); -#endif // STA_RTOS_SYSTEM_EVENTS_ENABLE - - // Check if called from thread - if (osThreadGetId() != nullptr) - { - // Terminate current thread - osThreadExit(); - } -} 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