Reduce directory depth

This commit is contained in:
Henrik Stickann
2022-05-24 14:07:22 +02:00
parent f0702e5714
commit 9c4f2d1927
7 changed files with 0 additions and 0 deletions

46
src/system/startup.cpp Normal file
View File

@@ -0,0 +1,46 @@
#include <sta/rtos/system/startup.hpp>
#ifdef STA_RTOS_STARTUP_ENABLE
#include <sta/lang.hpp>
#include <sta/rtos/system/system_event.hpp>
#include <sta/rtos/system/watchdog.hpp>
#include <sta/stm32/init.hpp>
#include <cmsis_os2.h>
namespace sta
{
// Provide weak implementation to allow overriding
STA_WEAK
void startupExtras(void *)
{}
} // namespace sta
// Declare with C linkage
extern "C"
{
void STA_RTOS_STARTUP_ENTRY_FUNCTION(void * arg)
{
// Call further initialization code
sta::startupExtras(arg);
// Initialize HAL
sta::initHAL();
#ifdef STA_RTOS_WATCHDOG_ENABLE
// Start timers
sta::startWatchdogTimer();
#endif // STA_RTOS_WATCHDOG_ENABLE
// Wake tasks
sta::signalStartupEvent();
// Terminate task
osThreadExit();
}
}
#endif // STA_RTOS_STARTUP_ENABLE

View File

@@ -0,0 +1,40 @@
#include <sta/rtos/system/system_event.hpp>
#ifdef STA_RTOS_SYSTEM_EVENT_ENABLE
#include <cmsis_os2.h>
#define STA_RTOS_SYSTEM_EVENT_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_SYSTEM_EVENT_NAME)
// Access handle from freertos.c
extern osEventFlagsId_t STA_RTOS_SYSTEM_EVENT_HANDLE;
namespace sta
{
void signalSystemEvents(uint32_t flags)
{
osEventFlagsSet(STA_RTOS_SYSTEM_EVENT_HANDLE, flags);
}
void waitForSystemEvents(uint32_t flags, uint32_t options, uint32_t timeout)
{
osEventFlagsWait(STA_RTOS_SYSTEM_EVENT_HANDLE, flags, options | osFlagsNoClear, timeout);
}
void signalStartupEvent()
{
signalSystemEvents(STA_SYSTEM_EVENT_STARTUP);
}
void waitForStartupEvent()
{
waitForSystemEvents(STA_SYSTEM_EVENT_STARTUP, osFlagsWaitAll, osWaitForever);
}
} // namespace sta
#endif // STA_RTOS_SYSTEM_EVENT_ENABLE

View File

@@ -0,0 +1,18 @@
#ifndef STA_RTOS_SYSTEM_WATCHDOG_HANDLES_HPP
#define STA_RTOS_SYSTEM_WATCHDOG_HANDLES_HPP
#include <sta/rtos/system/watchdog.hpp>
#include <cmsis_os2.h>
#define WATCHDOG_TASK_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_WATCHDOG_TASK_NAME)
#define WATCHDOG_TIMER_HANDLE STA_RTOS_MAKE_HANDLE_NAME(STA_RTOS_WATCHDOG_TIMER_NAME)
// Access handles from freertos.c
extern osThreadId_t WATCHDOG_TASK_HANDLE;
extern osTimerId_t WATCHDOG_TIMER_HANDLE;
#endif // STA_RTOS_SYSTEM_WATCHDOG_HANDLES_HPP

View File

@@ -0,0 +1,29 @@
#include <sta/rtos/system/watchdog.hpp>
#ifdef STA_RTOS_WATCHDOG_ENABLE
#include "handles.hpp"
namespace sta
{
void startWatchdogTimer()
{
osTimerStart(WATCHDOG_TIMER_HANDLE, STA_RTOS_WATCHDOG_TIMER_PERIOD);
}
} // namespace sta
// Declare with C linkage
extern "C"
{
void STA_RTOS_WATCHDOG_TIMER_CALLBACK(void *)
{
// Notify watchdog task to send heartbeat message
// Required because blocking in a timer callback is not allowed
osThreadFlagsSet(WATCHDOG_TASK_HANDLE, STA_WATCHDOG_FLAG_HEARTBEAT);
}
}
#endif // STA_RTOS_WATCHDOG_ENABLE

View File

@@ -0,0 +1,40 @@
#include <sta/rtos/system/watchdog.hpp>
#ifdef STA_RTOS_WATCHDOG_ENABLE
#include <sta/rtos/defs.hpp>
#include <sta/rtos/system/system_event.hpp>
#include "handles.hpp"
namespace sta
{
void notifyWatchdog(uint32_t flags)
{
osThreadFlagsSet(WATCHDOG_TASK_HANDLE, flags);
}
} // namespace sta
// Declare with C linkage
extern "C"
{
void STA_RTOS_WATCHDOG_ENTRY_FUNCTION(void * arg)
{
sta::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::watchdogEventHandler(arg, flags);
}
}
}
#endif // STA_RTOS_WATCHDOG_ENABLE