Добавлен вывод стека при HardFault

This commit is contained in:
cfif 2026-07-14 17:34:02 +03:00
parent ef9fe49961
commit 3c45c317e9
1 changed files with 48 additions and 11 deletions

View File

@ -5,7 +5,8 @@
#include "MainModesArbiter_Private.h" #include "MainModesArbiter_Private.h"
#include "InternalFlashPage.h" #include "InternalFlashPage.h"
#include "StatusData.h" #include "StatusData.h"
//#include "FirmwareMetadataSection.h" #include "HardFault.h"
#include "FirmwareMetadataSection.h"
#define LOGGER &env->slog.logger #define LOGGER &env->slog.logger
@ -52,29 +53,65 @@ static void Mma_InitSubSystems(tMma *env) {
env->flash->nf_storage_param.logger = &env->slog.logger; env->flash->nf_storage_param.logger = &env->slog.logger;
env->flash->nf_storage_calib.logger = &env->slog.logger; env->flash->nf_storage_calib.logger = &env->slog.logger;
tFirmwareMetaMap *firmwareMetaMap_Boot = (tFirmwareMetaMap *) ADR_META_BOOT;
tFirmwareMetaMap *firmwareMetaMap_Main = (tFirmwareMetaMap *) ADR_META_MAIN;
char dataTmp[10];
memset(dataTmp, 0, sizeof(dataTmp));
memcpy(dataTmp, firmwareMetaMap_Boot->fingerprint.testerCode, 9);
LoggerFormatInfo(LOGGER, LOG_TASK_MAIN, "Boot: ModuleID: %d, testerCode: %s, year: 0x%02X, month: 0x%02X day: 0x%02X",
firmwareMetaMap_Boot->fingerprint.ModuleID,
dataTmp,
firmwareMetaMap_Boot->fingerprint.year,
firmwareMetaMap_Boot->fingerprint.month,
firmwareMetaMap_Boot->fingerprint.day);
memcpy(dataTmp, firmwareMetaMap_Main->fingerprint.testerCode, 9);
LoggerFormatInfo(LOGGER, LOG_TASK_MAIN, "Main: ModuleID: %d, testerCode: %s, year: 0x%02X, month: 0x%02X day: 0x%02X",
firmwareMetaMap_Main->fingerprint.ModuleID,
dataTmp,
firmwareMetaMap_Main->fingerprint.year,
firmwareMetaMap_Main->fingerprint.month,
firmwareMetaMap_Main->fingerprint.day);
if (hardFault_magic == 0xDEADBEEF) {
hardFault_magic = 0;
LoggerFormatError(LOGGER, LOG_TASK_MAIN, "HardFault addresses (%d):", hardFault_count);
for (uint32 i = 0; i < hardFault_count; ++i) {
LoggerFormatError(LOGGER, LOG_TASK_MAIN, " [%d] 0x%08X", i, hardFault_addresses[i]);
}
}
if (CHECK_JTAG_DEBUG_ACTIVE) { if (CHECK_JTAG_DEBUG_ACTIVE) {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Debug mode") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Debug mode")
} else { } else {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Run mode") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Run mode")
} }
if (CHECK_PARALLEL_ENABLE) { if (CHECK_PARALLEL_ENABLE) {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Parallel memory access enabled (OTA update unavailable)") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Parallel memory access enabled (OTA update unavailable)")
} else { } else {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Parallel memory access disabled (OTA update available)") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Parallel memory access disabled (OTA update available)")
} }
if (RGM_SRS_WAKEUP_MASK == (RGM->SRS & RGM_SRS_WAKEUP_MASK)) { if (RGM_SRS_WAKEUP_MASK == (RGM->SRS & RGM_SRS_WAKEUP_MASK)) {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Wake up from standby") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Wake up from standby")
tGpioPin Ign_Wakeup = vInitGpioPinPull(GPIO_E, PORT_PIN_16, GPIO_IN, GPIO_PIN_NOREVERSE, GPIO_HIGH, GPIO_PUSH_PULL, tGpioPin Ign_Wakeup = vInitGpioPinPull(GPIO_E, PORT_PIN_16, GPIO_IN, GPIO_PIN_NOREVERSE, GPIO_HIGH,
GPIO_PUSH_PULL,
PORT_PULL_UP); PORT_PULL_UP);
} }
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Initialization of subsystems") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Initialization of subsystems")
// Инициализация периферийных интерфейсов // Инициализация периферийных интерфейсов
InitPeripheralInterfaces(&env->slog.logger); InitPeripheralInterfaces(&env->slog.logger);
@ -183,10 +220,10 @@ static void Mma_InitSubSystems(tMma *env) {
// Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger); // Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger);
// Lin6_StartThread(&env->linTaskSensor6); // Lin6_StartThread(&env->linTaskSensor6);
Adc_0_Init(&env->adcTask0, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger); Adc_0_Init(&env->adcTask0, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger);
Adc_0_StartThread(&env->adcTask0); Adc_0_StartThread(&env->adcTask0);
Adc_1_Init(&env->adcTask1, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger); Adc_1_Init(&env->adcTask1, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger);
Adc_1_StartThread(&env->adcTask1); Adc_1_StartThread(&env->adcTask1);
CanUds_Init( CanUds_Init(
@ -269,7 +306,7 @@ static void Mma_InitSubSystems(tMma *env) {
Lin3_StartThread(&env->linTaskActuator3); Lin3_StartThread(&env->linTaskActuator3);
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization") LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "End of subsystem initialization")
} }