105 lines
2.5 KiB
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);
|
|
|
|
} |