HVAC_BOOT_M7/APP/main.c

105 lines
2.5 KiB
C

//
// Created by cfif on 22.09.2025.
//
#include "Clock.h"
#include "LoggerToSerialPort.h"
#include "LoggerInterface.h"
#include "StorageOnFlash.h"
#include "Rtcs.h"
#include "SerialPorts.h"
#include "CmsisRtosThreadUtils.h"
#include "SystemDelayInterface.h"
#include "DeviceStorage.h"
typedef struct {
tRtcs *rtcs;
tLoggerToSerialPort slog;
tStorageOnFlash *flash;
tDeviceStorage storage;
struct {
osThreadId_t id;
uint32_t stack[2048];
StaticTask_t controlBlock;
osThreadAttr_t attr;
} thread;
} tBootMma;
tBootMma MAIN_BOOT_ENV;
#define LOGGER &MAIN_ENV.slog.logger
#define LOG_SIGN "Boot"
_Noreturn void stop() {
while (1) {
asm("nop");
}
}
#define STOP stop();
#if (configCHECK_FOR_STACK_OVERFLOW > 0)
void vApplicationStackOverflowHook(TaskHandle_t xTask, const char *pcTaskName) {
PROCESS_UNUSED_VAR(xTask);
PROCESS_UNUSED_VAR(pcTaskName);
STOP
}
#endif
static _Noreturn void MainTransmitter_Thread(tBootMma *env) {
// Настройка таймера реального времени
time_t set_timestamp = 1768553105;
RtcSet(&env->rtcs->rtcI0, &set_timestamp);
SerialPorts_Init();
LoggerToSerialPort_Init(
&env->slog,
3,
&SERIAL_PORTS.cliVirtualPortOut_Io,
&SERIAL_PORTS.SerialPortLog_IO,
&env->rtcs->rtcI0,
SERIAL_LOGGER_SHOW_TIME | SERIAL_LOGGER_SHOW_AUTHOR | SERIAL_LOGGER_SHOW_LOG_LEVEL,
1000
);
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Start logging")
LoggerInfoStatic(&env->slog.logger, LOG_SIGN, "Initialization of subsystems")
bool result = DeviceStorage_Init(&env->storage, true, &env->flash->interface_calib, &env->flash->interface_param,
&env->slog.logger);
env->flash->nf_storage_param.logger = &env->slog.logger;
env->flash->nf_storage_calib.logger = &env->slog.logger;
for (;;) {
SystemDelayMs(1000);
}
}
void MainTransmitter_StartThread(tBootMma *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (MainTransmitter_Thread), (void *) (env), &env->thread.attr);
}
}
int main(void) {
Bsp_CLOCK_Init();
NVIC_SetPriorityGrouping(NVIC_PRIORITY_GROUP_4);
tBootMma *env = &MAIN_BOOT_ENV;
InitThreadAtrStatic(&env->thread.attr, "LogTransmitter", env->thread.controlBlock, env->thread.stack,
osPriorityNormal);
MainTransmitter_StartThread(env);
}