From 3f3b2eab06e4b91b214976676d8a8c791ebf0ddf Mon Sep 17 00:00:00 2001 From: cfif Date: Wed, 12 Nov 2025 09:32:15 +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 --- Inc/CanSerialPortFrameXCP.h | 1 + Src/CanSerialPortFrameXCP.c | 43 ++++++++++++++++++++++--------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/Inc/CanSerialPortFrameXCP.h b/Inc/CanSerialPortFrameXCP.h index 49961e8..0508106 100644 --- a/Inc/CanSerialPortFrameXCP.h +++ b/Inc/CanSerialPortFrameXCP.h @@ -232,6 +232,7 @@ typedef struct { typedef struct { uint8_t ODT_ENTRIES_COUNT; + uint8_t IS_STIM_RECEIVED; tXCP_DATA_STIM DATA_STM[MAX_ODT_ENTRIES_SIZE]; uint8_t BIT_OFFSET[MAX_ODT_ENTRIES_SIZE]; uint8_t ADR_EXT[MAX_ODT_ENTRIES_SIZE]; diff --git a/Src/CanSerialPortFrameXCP.c b/Src/CanSerialPortFrameXCP.c index 7436503..73b8770 100644 --- a/Src/CanSerialPortFrameXCP.c +++ b/Src/CanSerialPortFrameXCP.c @@ -927,13 +927,15 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) { for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { - if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { + uint8_t ODT_ENTRIES_SIZE = env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + + if (ODT_ENTRIES_SIZE) { 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]); + ODT_ENTRIES_SIZE); - size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + size += ODT_ENTRIES_SIZE; } @@ -966,41 +968,48 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) { for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { - if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { + uint8_t ODT_ENTRIES_SIZE = env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + + if (ODT_ENTRIES_SIZE) { memcpy(&env->DATA[size], env->DAQ[i].ODT_NUMBER[j].DATA_STM[k].DATA, - env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]); + ODT_ENTRIES_SIZE); - size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + size += ODT_ENTRIES_SIZE; } } - uint8_t size_stim = size; + uint8_t size_stim = 0; for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { - if (env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]) { + if (env->DAQ[i].ODT_NUMBER[j].IS_STIM_RECEIVED) { - 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]); + uint8_t ODT_ENTRIES_SIZE = env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; + + if (ODT_ENTRIES_SIZE) { + + if ((size_stim + ODT_ENTRIES_SIZE) <= 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], + ODT_ENTRIES_SIZE); + + size_stim += ODT_ENTRIES_SIZE; + } else { + asm("nop"); + } - size_stim += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]; - } else { - asm("nop"); } + env->DAQ[i].ODT_NUMBER[j].IS_STIM_RECEIVED = 0; } } - - } }