84 lines
2.6 KiB
C
84 lines
2.6 KiB
C
#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;
|
||
} |