Добавлены DTC (сброс)
This commit is contained in:
parent
fb1a1f04a3
commit
d69de48d13
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -95,8 +95,8 @@ static _Noreturn void Mma_Thread(tMma *env) {
|
|||
|
||||
ModelTask_StartThread(&env->ModelTask);
|
||||
|
||||
while (!env->ModelTask.isRunning) {
|
||||
LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Waiting for the model to run...")
|
||||
while (!env->ModelTask.isRunning) {
|
||||
SystemDelayMs(1);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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-------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
||||
for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) {
|
||||
dtc_state_error_model[i] = dtc_state_error[i] & (~(DTC_TEST_FAILED));
|
||||
}
|
||||
|
||||
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, sizeof(dtc_state_error));
|
||||
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);
|
||||
lfs_err = lfs_file_close(&fs.lfs, &file);
|
||||
|
||||
} else {
|
||||
LoggerInfoStatic(LOGGER, LOG_SIGN, "Error open (write) dtc.bin");
|
||||
}
|
||||
|
||||
}
|
||||
asm("nop");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Binary file not shown.
BIN
WORK/HVAC_M7.bin
BIN
WORK/HVAC_M7.bin
Binary file not shown.
Binary file not shown.
|
|
@ -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 файл
|
||||
|
|
|
|||
Loading…
Reference in New Issue