diff --git a/APP/FC7240_flash.ld b/APP/FC7240_flash.ld index 3dd9ef8..2003bb3 100644 --- a/APP/FC7240_flash.ld +++ b/APP/FC7240_flash.ld @@ -7,9 +7,9 @@ M_VECTOR_RAM_SIZE = 0x0400; _BootloaderSize = 64K; _BootloaderBegin = 0x01000000; /* BANK1 */ -_FirmwareSize = 704K; +_FirmwareSize = 768K; _MetadataSize = 256; -_FirmwareSize_CALIB = 256K; +_FirmwareSize_CALIB = 192K; _FirmwareMainBegin = _BootloaderBegin + _BootloaderSize; _FirmwareMetaBegin = _FirmwareMainBegin + _FirmwareSize - _MetadataSize; @@ -31,12 +31,12 @@ MEMORY SRAM1 (RW) : ORIGIN = 0x21010000, LENGTH = 0x00008000 /* 32KB */ PFLASH_BOOT (RW) : ORIGIN = _BootloaderBegin, LENGTH = _BootloaderSize /* 64K */ - PFLASH_MAIN (RW) : ORIGIN = _FirmwareMainBegin, LENGTH = _FirmwareSize /* 704K */ + PFLASH_MAIN (RW) : ORIGIN = _FirmwareMainBegin, LENGTH = _FirmwareSize /* 768K */ PFLASH_MAIN_META (RW) : ORIGIN = _FirmwareMetaBegin, LENGTH = _MetadataSize /* 256 */ - PFLASH_CALIB (RW) : ORIGIN = _FirmwareCalibBegin, LENGTH = _FirmwareSize_CALIB /* 256K */ + PFLASH_CALIB (RW) : ORIGIN = _FirmwareCalibBegin, LENGTH = _FirmwareSize_CALIB /* 192K */ PFLASH_CALIB_META (RW) : ORIGIN = _FirmwareMetaCalibBegin, LENGTH = _MetadataSize /* 256 */ - PFLASH_R_MAIN (RW) : ORIGIN = _FirmwareRecoveryBegin, LENGTH = _FirmwareSize /* 704K */ + PFLASH_R_MAIN (RW) : ORIGIN = _FirmwareRecoveryBegin, LENGTH = _FirmwareSize /* 768K */ PFLASH_R_MAIN_META (RW) : ORIGIN = _FirmwareRecoveryMetaBegin, LENGTH = _MetadataSize /* 256 */ PFLASH_R_CALIB (RW) : ORIGIN = _FirmwareRecoveryCalibBegin, LENGTH = _FirmwareSize_CALIB /* 192K */ PFLASH_R_CALIB_META (RW) : ORIGIN = _FirmwareRecoveryMetaCalibBegin, LENGTH = _FirmwareSize_CALIB /* 256 */ diff --git a/APP/FreeRTOSConfig.h b/APP/FreeRTOSConfig.h index d2046c2..92419f1 100644 --- a/APP/FreeRTOSConfig.h +++ b/APP/FreeRTOSConfig.h @@ -76,7 +76,7 @@ extern uint32_t SystemCoreClock; #define configTICK_RATE_HZ ((TickType_t)1000) #define configMAX_PRIORITIES ( 56 ) #define configMINIMAL_STACK_SIZE ((uint16_t)64) -#define configTOTAL_HEAP_SIZE ((size_t)20 * 1024) +#define configTOTAL_HEAP_SIZE ((size_t)28 * 1024) #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 1 #define configUSE_16_BIT_TICKS 0 diff --git a/CMakeLists.txt b/CMakeLists.txt index a9e5137..6067341 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ SET(VECT_TAB_OFFSET "0x00000") #-- Defines -------------------------------------------------------------------- -ADD_DEFINITIONS(-DLFS_NO_MALLOC=1) +#ADD_DEFINITIONS(-DLFS_NO_MALLOC=1) ADD_DEFINITIONS(-DINTERNAL_HW_YEAR=${INTERNAL_HW_YEAR}) ADD_DEFINITIONS(-DINTERNAL_HW_MONTH=${INTERNAL_HW_MONTH}) diff --git a/MODULES/FileSystemLittleFs/lfs_util.h b/MODULES/FileSystemLittleFs/lfs_util.h index 6698c17..c83f5ee 100644 --- a/MODULES/FileSystemLittleFs/lfs_util.h +++ b/MODULES/FileSystemLittleFs/lfs_util.h @@ -51,9 +51,7 @@ extern "C" { #endif -extern void * pvPortMalloc( size_t xSize ); -extern void vPortFree( void * pv ); - +#include "freertos_os2.h" // Configuration check and setup // Macros, may be replaced by system specific wrappers. Arguments to these // macros must not have side-effects as the macros can be removed for a smaller @@ -240,12 +238,12 @@ static inline void *lfs_malloc(size_t size) { #if defined(LFS_MALLOC) return LFS_MALLOC(size); #elif !defined(LFS_NO_MALLOC) - void *p = malloc(size); - return p; - -// void *p = pvPortMalloc(size); +// void *p = malloc(size); // return p; + void *p = pvPortMalloc(size); + return p; + #else (void)size; return NULL; @@ -258,8 +256,8 @@ static inline void lfs_free(void *p) { LFS_FREE(p); #elif !defined(LFS_NO_MALLOC) -// vPortFree(p); - free(p); + vPortFree(p); +// free(p); //free(p); #else (void)p; diff --git a/MODULES/FirmwareMetadataSection/FirmwareMetadataSection.h b/MODULES/FirmwareMetadataSection/FirmwareMetadataSection.h index 5dda523..c691592 100644 --- a/MODULES/FirmwareMetadataSection/FirmwareMetadataSection.h +++ b/MODULES/FirmwareMetadataSection/FirmwareMetadataSection.h @@ -8,10 +8,10 @@ #include "stdint.h" #define ADR_META_BOOT (0x01000000 + (64 * 1024) - 256) -#define ADR_META_MAIN (0x01000000 + ((64 + 704) * 1024) - 256) +#define ADR_META_MAIN (0x01000000 + ((64 + 768) * 1024) - 256) #define ADR_META_MAPPED_BOOT (0x01100000 + (64 * 1024) - 256) -#define ADR_META_MAPPED_MAIN (0x01100000 + ((64 + 704) * 1024) - 256) +#define ADR_META_MAPPED_MAIN (0x01100000 + ((64 + 768) * 1024) - 256) extern volatile const uint32_t META_FW_CRC; diff --git a/MODULES/HVAC_M7_CAN_UDS/CanUds.h b/MODULES/HVAC_M7_CAN_UDS/CanUds.h index f361a5d..280d5ab 100644 --- a/MODULES/HVAC_M7_CAN_UDS/CanUds.h +++ b/MODULES/HVAC_M7_CAN_UDS/CanUds.h @@ -32,8 +32,8 @@ #define ADR_HEX_Mapped_BlockCalib 0x011C0000 #define SIZE_HEX_BlockBoot (64 * 1024) -#define SIZE_HEX_BlockMain (704 * 1024) -#define SIZE_HEX_BlockCalib (256 * 1024) +#define SIZE_HEX_BlockMain (768 * 1024) +#define SIZE_HEX_BlockCalib (192 * 1024) #define LEN_DEBUG_UDS_BUFF 128 diff --git a/MODULES/HVAC_M7_DebugTesting/MainModesArbiter.c b/MODULES/HVAC_M7_DebugTesting/MainModesArbiter.c index 71ba547..28c666f 100644 --- a/MODULES/HVAC_M7_DebugTesting/MainModesArbiter.c +++ b/MODULES/HVAC_M7_DebugTesting/MainModesArbiter.c @@ -95,8 +95,8 @@ static _Noreturn void Mma_Thread(tMma *env) { ModelTask_StartThread(&env->ModelTask); + LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Waiting for the model to run...") while (!env->ModelTask.isRunning) { - LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Waiting for the model to run...") SystemDelayMs(1); } diff --git a/MODULES/HVAC_M7_DebugTesting/MainStack.c b/MODULES/HVAC_M7_DebugTesting/MainStack.c index c486170..e075b08 100644 --- a/MODULES/HVAC_M7_DebugTesting/MainStack.c +++ b/MODULES/HVAC_M7_DebugTesting/MainStack.c @@ -11,7 +11,7 @@ uint32_t __attribute__((section(".stack_data"))) tAdc1Task_stack[384]; uint32_t __attribute__((section(".stack_data"))) tCanSpamDebugTransmitter_stack[384]; uint32_t __attribute__((section(".stack_data"))) tCanSpamReceiver_stack[384]; uint32_t __attribute__((section(".stack_data"))) tCanSpamTransmitter_stack[384]; -uint32_t __attribute__((section(".stack_data"))) tCanUds_stack[384]; +uint32_t __attribute__((section(".stack_data"))) tCanUds_stack[512]; uint32_t __attribute__((section(".stack_data"))) tCommandLine_stack[512]; uint32_t __attribute__((section(".stack_data"))) tMma_stack[512]; //uint32_t __attribute__((section(".stack_data"))) tIndication_stack[128]; diff --git a/MODULES/HVAC_M7_DebugTesting/MainStack.h b/MODULES/HVAC_M7_DebugTesting/MainStack.h index 6e61bd9..22816ca 100644 --- a/MODULES/HVAC_M7_DebugTesting/MainStack.h +++ b/MODULES/HVAC_M7_DebugTesting/MainStack.h @@ -16,7 +16,7 @@ extern uint32_t __attribute__((section(".stack_data"))) tAdc1Task_stack[384]; extern uint32_t __attribute__((section(".stack_data"))) tCanSpamDebugTransmitter_stack[384]; extern uint32_t __attribute__((section(".stack_data"))) tCanSpamReceiver_stack[384]; extern uint32_t __attribute__((section(".stack_data"))) tCanSpamTransmitter_stack[384]; -extern uint32_t __attribute__((section(".stack_data"))) tCanUds_stack[384]; +extern uint32_t __attribute__((section(".stack_data"))) tCanUds_stack[512]; extern uint32_t __attribute__((section(".stack_data"))) tCommandLine_stack[512]; extern uint32_t __attribute__((section(".stack_data"))) tMma_stack[512]; //extern uint32_t __attribute__((section(".stack_data"))) tIndication_stack[128]; diff --git a/MODULES/HVAC_M7_MODEL/Model_Task.c b/MODULES/HVAC_M7_MODEL/Model_Task.c index 872eefe..d1069b2 100644 --- a/MODULES/HVAC_M7_MODEL/Model_Task.c +++ b/MODULES/HVAC_M7_MODEL/Model_Task.c @@ -612,21 +612,13 @@ void InitWakeupModel(tModelTask *env) { #define SLEEP_TIME 3000 -static uint8_t fileBuffer[2048]; - -struct lfs_file_config file_cfg = { - .buffer = fileBuffer, // Указываем статический буфер - .attrs = NULL, - .attr_count = 0 -}; - lfs_file_t file; static _Noreturn void ModelTask_Thread(tModelTask *env) { - lfs_soff_t lfs_err = lfs_file_opencfg(&fs.lfs, &file, "/dtc.bin", LFS_O_RDONLY, &file_cfg); - uint32_t timeDTC = SystemGetMs() + 5000; + lfs_soff_t lfs_err = lfs_file_open(&fs.lfs, &file, "dtc.bin", LFS_O_RDONLY); + uint32_t timeDTC = SystemGetMs() + 500; if (lfs_err == LFS_ERR_OK) { @@ -634,6 +626,8 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) { if (reading != sizeof(dtc_state_error)) { LoggerInfoStatic(LOGGER, LOG_SIGN, "Error read dtc.bin"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Read dtc.bin - OK"); } lfs_file_close(&fs.lfs, &file); @@ -904,7 +898,7 @@ static _Noreturn void ModelTask_Thread(tModelTask *env) { memcpy(env->dtc_state_error, rtY.dtc_state_error_model, sizeof(env->dtc_state_error)); if (SystemGetMs() > timeDTC) { - set_Dtc_state(env->diagnostic, &file, &file_cfg, &env->ccu_candb_tx.CCU_Errors, env->dtc_state_error, + set_Dtc_state(env->diagnostic, &env->ccu_candb_tx.CCU_Errors, env->dtc_state_error, env->GET_HVAC_VIN, &env->CAN_ERROR_MISSLE, &env->CAN_TIME_MISSLE); } //конец--------------------------------------------------ВЫХОД МОДЕЛИ ДЛЯ DTC------------------------------------------- diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c index cc8077b..604c6c6 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.c +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.c @@ -14,7 +14,7 @@ #define LOG_SIGN "DIAGNOSTIC" #define LOGGER env->logger -const char* DTC_Error_Code_Strings[COUNT_DTC_CODE_ERROR] = { +const char *DTC_Error_Code_Strings[COUNT_DTC_CODE_ERROR] = { "DTC_CCU_POWER_SUPPLY_VOLTAGE_OUT_OF_RANGE", // 0xA0101C "DTC_IGNITION_VOLTAGE_OUT_OF_RANGE", // 0xA0111C "DTC_REAR_HVAC_AROMA_CONFIG_INVALID", // 0xA02056 @@ -161,16 +161,47 @@ void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger) { // osPriorityNormal); } +extern lfs_file_t file; + uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env) { if (osMutexAcquire(env->access, 5000) == osOK) { - // for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { - // Тест DTC не был выполнен с момента последней очистки -// dtc_state_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; -// dtc_state_FIX_error[i] |= UDS_dtc_mask_testNotCompletedSinceLastClear; -// } + env->isCleanDTC = true; + +// memset(dtc_state_error, 0, sizeof(dtc_state_error)); +/* + lfs_soff_t lfs_err = lfs_remove(&fs.lfs, "dtc.bin"); + + if (lfs_err == LFS_ERR_OK) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Clean dtc.bin - OK"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Clean dtc.bin - ERROR"); + } +*/ +/* + lfs_soff_t lfs_err = lfs_file_open(&fs.lfs, &file, "dtc.bin", LFS_O_WRONLY); + + if (lfs_err == LFS_ERR_OK) { + + int writes = lfs_file_write(&fs.lfs, &file, dtc_state_error, sizeof(dtc_state_error)); + + if (writes != sizeof(dtc_state_error)) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Error write dtc.bin") + LoggerInfoStatic(LOGGER, LOG_SIGN, "Clean dtc.bin - ERROR");; + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Write dtc.bin - OK"); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Clean dtc.bin - OK"); + } + + + lfs_err = lfs_file_close(&fs.lfs, &file); + + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Error clear dtc.bin"); + } +*/ osMutexRelease(env->access); } else { LoggerInfoStatic(LOGGER, LOG_SIGN, "Access error diagnostic_ClearDiagnosticInformation_14"); @@ -390,12 +421,20 @@ static void setErrorDTC_CAN(uint8_t *dtc_state_error_model, ccu_candb_error_miss } } -void set_Dtc_state(tDiagnostic *env, lfs_file_t *file, struct lfs_file_config *file_cfg, CCU_Errors_t *CCU_Errors, +void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE) { if (osMutexAcquire(env->access, 5000) == osOK) { + if (env->isCleanDTC) { + env->isCleanDTC = false; + + memset(dtc_state_error, 0, sizeof(dtc_state_error)); + + } + + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { if (dtc_state_error_model[i]) { dtc_state_error_model[i] = DTC_TEST_FAILED_CONFIRMED; @@ -409,31 +448,62 @@ void set_Dtc_state(tDiagnostic *env, lfs_file_t *file, struct lfs_file_config *f if (memcmp(dtc_state_error, dtc_state_error_model, sizeof(dtc_state_error)) != 0) { + bool isDTC_FileWrite = false; + + LoggerInfoStatic(LOGGER, LOG_SIGN, "begin------------------------------DTC-------------------------------") for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { if (dtc_state_error_model[i]) { - LoggerFormatInfo(LOGGER, LOG_SIGN, "DTC: %s", DTC_Error_Code_Strings[i]) + + if ((dtc_state_error[i] & DTC_TEST_CONFIRMED) != (dtc_state_error_model[i] & DTC_TEST_CONFIRMED)) { + isDTC_FileWrite = true; + } + + bool failed = false; + bool confirmed = false; + + if (dtc_state_error_model[i] & DTC_TEST_FAILED) { + failed = true; + } + if (dtc_state_error_model[i] & DTC_TEST_CONFIRMED) { + confirmed = true; + } + + LoggerFormatInfo(LOGGER, LOG_SIGN, "DTC: %s (CONFIRMED: %d FAILED: %d)", DTC_Error_Code_Strings[i], + confirmed, failed) } } + LoggerInfoStatic(LOGGER, LOG_SIGN, "end------------------------------DTC---------------------------------") memcpy(dtc_state_error, dtc_state_error_model, sizeof(dtc_state_error)); - lfs_soff_t lfs_err = lfs_file_opencfg(&fs.lfs, file, "/dtc.bin", LFS_O_RDWR | LFS_O_CREAT, file_cfg); + if (isDTC_FileWrite) { - if (lfs_err == LFS_ERR_OK) { - - int writes = lfs_file_write(&fs.lfs, file, dtc_state_error, sizeof(dtc_state_error)); - - if (writes != sizeof(dtc_state_error)) { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Error write dtc.bin"); + for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) { + dtc_state_error_model[i] = dtc_state_error[i] & (~(DTC_TEST_FAILED)); } - lfs_err = lfs_file_close(&fs.lfs, file); + LoggerInfoStatic(LOGGER, LOG_SIGN, "Write dtc.bin"); + + lfs_soff_t lfs_err = lfs_file_open(&fs.lfs, &file, "dtc.bin", LFS_O_WRONLY | LFS_O_CREAT); + + if (lfs_err == LFS_ERR_OK) { + + int writes = lfs_file_write(&fs.lfs, &file, dtc_state_error_model, sizeof(dtc_state_error)); + + if (writes != sizeof(dtc_state_error)) { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Error write dtc.bin"); + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Write dtc.bin - OK"); + } + + lfs_err = lfs_file_close(&fs.lfs, &file); + + } else { + LoggerInfoStatic(LOGGER, LOG_SIGN, "Error open (write) dtc.bin"); + } - } else { - LoggerInfoStatic(LOGGER, LOG_SIGN, "Error open (write) dtc.bin"); } - asm("nop"); } diff --git a/MODULES/HVAC_M7_StatusData/DiagnosticTask.h b/MODULES/HVAC_M7_StatusData/DiagnosticTask.h index 849cb03..54aa679 100644 --- a/MODULES/HVAC_M7_StatusData/DiagnosticTask.h +++ b/MODULES/HVAC_M7_StatusData/DiagnosticTask.h @@ -25,11 +25,13 @@ typedef struct { bool isNoBitsDTC; + bool isCleanDTC; + } tDiagnostic; void Diagnostic_Init(tDiagnostic *env, tLoggerInterface *logger); void set_NoBitsDTC(tDiagnostic *env, bool noBitsDTC); -void set_Dtc_state(tDiagnostic *env, lfs_file_t *file, struct lfs_file_config *file_cfg, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN, +void set_Dtc_state(tDiagnostic *env, CCU_Errors_t *CCU_Errors, uint8_t *dtc_state_error_model, char *VIN, ccu_candb_error_missing_rx_t *CAN_ERROR_MISSLE, ccu_candb_time_missing_rx_t *CAN_TIME_MISSLE); uint32_t diagnostic_ClearDiagnosticInformation_14(tDiagnostic *env); uint32_t diagnostic_UDS_ReadDTCInformation_19_count(tDiagnostic *env, tDiagnosticDTC *diagnosticDTC); diff --git a/WORK/HVAC_CALIB.bin b/WORK/HVAC_CALIB.bin index e64ee18..ca30cb2 100644 Binary files a/WORK/HVAC_CALIB.bin and b/WORK/HVAC_CALIB.bin differ diff --git a/WORK/HVAC_M7.bin b/WORK/HVAC_M7.bin index fb123f0..6e3d7ee 100755 Binary files a/WORK/HVAC_M7.bin and b/WORK/HVAC_M7.bin differ diff --git a/WORK/HVAC_MAIN.bin b/WORK/HVAC_MAIN.bin index 09d0ebe..7bdc0e8 100644 Binary files a/WORK/HVAC_MAIN.bin and b/WORK/HVAC_MAIN.bin differ diff --git a/WORK/create.sh b/WORK/create.sh index 5c84d51..d352c0d 100755 --- a/WORK/create.sh +++ b/WORK/create.sh @@ -2,7 +2,7 @@ echo "=== Processing HVAC Firmware ===" # Разделение файла -./fc_bin_hvac --split 0xB0000 --output1 HVAC_MAIN.bin --output2 HVAC_CALIB.bin HVAC_M7.bin && \ +./fc_bin_hvac --split 0xC0000 --output1 HVAC_MAIN.bin --output2 HVAC_CALIB.bin HVAC_M7.bin && \ echo "✓ Split OK" || { echo "✗ Split failed"; exit 1; } # Запись CRC в MAIN файл