From 5d3da3d02838be16538f6344a104bc45187f456a Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 11 Nov 2025 14:52:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Src/CanSerialPortFrameXCP.c | 57 +++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index 036b238..7436503 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -925,13 +925,17 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) { env->response[1] = i; // DAQ size = 0; - for (uint8_t k = 0; k < env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT; ++k) { + for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { - memcpy(&env->DATA[size], - (uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k], - env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { - size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + memcpy(&env->DATA[size], + (uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k], + env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + + size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + + } } @@ -943,12 +947,13 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) { for (uint8_t k = 0; k < count_size; ++k) { memcpy(&env->response[2], &env->DATA[size], BODY_MAX_LEN); env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO, 1000); - size += 6; + size += BODY_MAX_LEN; } if (count_size_tail) { memcpy(&env->response[2], &env->DATA[size], count_size_tail); - env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail, 1000); + env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail, + 1000); } @@ -959,15 +964,43 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) { size = 0; - for (uint8_t k = 0; k < env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT; ++k) { + for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { - memcpy((uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k], - &env->DAQ[i].ODT_NUMBER[j].DATA_STM[size], - env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { + + memcpy(&env->DATA[size], + env->DAQ[i].ODT_NUMBER[j].DATA_STM[k].DATA, + env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + + size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + + } - size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; } + uint8_t size_stim = size; + + for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { + + if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { + + if (size_stim <= size) { + memcpy((uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k], + &env->DAQ[i].ODT_NUMBER[j].DATA_STM[k].DATA[size_stim], + env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + + size_stim += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + } else { + asm("nop"); + } + + } + + } + + + + } }