Добавлен вывод стека при 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 "InternalFlashPage.h"
#include "StatusData.h"
//#include "FirmwareMetadataSection.h"
#include "HardFault.h"
#include "FirmwareMetadataSection.h"
#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_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) {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Debug mode")
LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Debug mode")
} else {
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Run mode")
LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Run mode")
}
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 {
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)) {
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);
}
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "Initialization of subsystems")
LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "Initialization of subsystems")
// Инициализация периферийных интерфейсов
InitPeripheralInterfaces(&env->slog.logger);
@ -269,7 +306,7 @@ static void Mma_InitSubSystems(tMma *env) {
Lin3_StartThread(&env->linTaskActuator3);
LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization")
LoggerInfoStatic(LOGGER, LOG_TASK_MAIN, "End of subsystem initialization")
}