TestSubmodule/LOCAL/Src/Main_Thread.c

84 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "Main_Thread.h"
#include "Main_Private.h"
#include "CmsisRtosThreadUtils.h"
#define LOGGER &env->slog.logger
#define LOG_SIGN "Main"
/**
* Процедура инициализации и запуска подсистем
* Логирование, хранилище, командный интерфейс
* @param env
*/
#undef LOG_SIGN
#define LOG_SIGN "Main_ISS"
static void MainThread_InitSubSystems(tMain *env){
/// Инициализация Логирования
LoggerToSerialPort_Init(
&env->slog,
0,
&SERIAL_PORTS.comint_IO, //Пока нет платы с 485
//&SERIAL_PORTS.comint_HD_IO, //485
NULL,
SERIAL_LOGGER_SHOW_AUTHOR | SERIAL_LOGGER_SHOW_LOG_LEVEL
);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Start Logging")
/// Инициализация Индикации
Indication_Init(&env->indication,&env->gpios.ledPins);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Indication Init Completed")
/// Передача интерфейса логирования в хранилище
env->storage.logger = &env->slog.logger;
/// Инициализация хранилища
StorageOnFlash_Init();
if(DeviceStorage_Init(&env->storage, &env->flash->interface) == false){
LoggerErrorStatic(LOGGER, LOG_SIGN, "Storage Init Error")
} else {
LoggerInfoStatic(LOGGER, LOG_SIGN, "Storage Init Completed")
}
/// Запуск потока дампера
VarsTabDumpObserver_StartThread(&env->storage.dumpObserver);
/// Запуск потока индикации
Indication_StartThread(&env->indication);
}
/**
* Процедура Потока MAIN
* @param env
*/
#undef LOG_SIGN
#define LOG_SIGN "Main_Thread"
_Noreturn void Main_Thread(tMain *env) {
MainThread_InitSubSystems(env);
LoggerInfoStatic(LOGGER, LOG_SIGN, "Start main loop")
while (1){
///Вызов процедуры обработчика
Main_Processing(env);
SystemDelayMs(MAIN_THREAD_DELAY_MS);
}
}
/**
* Процедура вызова запуска потока MAIN
* @param env
*/
void Main_StartThread(tMain *env){
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (Main_Thread), (void *) (env), &env->thread.attr);
} else {
osThreadResume(env->thread.id);
}
}
/**
* Процедура инициализации потока MAIN
* @param env
*/
void Main_InitThread(tMain *env){
InitThreadAtrStatic(&env->thread.attr, "MAIN", env->thread.controlBlock, env->thread.stack, osPriorityNormal);
env->thread.id = 0;
}