Обновление

This commit is contained in:
cfif 2025-11-12 09:32:15 +03:00
parent 5d3da3d028
commit 3f3b2eab06
2 changed files with 27 additions and 17 deletions

View File

@ -232,6 +232,7 @@ typedef struct {
typedef struct { typedef struct {
uint8_t ODT_ENTRIES_COUNT; uint8_t ODT_ENTRIES_COUNT;
uint8_t IS_STIM_RECEIVED;
tXCP_DATA_STIM DATA_STM[MAX_ODT_ENTRIES_SIZE]; tXCP_DATA_STIM DATA_STM[MAX_ODT_ENTRIES_SIZE];
uint8_t BIT_OFFSET[MAX_ODT_ENTRIES_SIZE]; uint8_t BIT_OFFSET[MAX_ODT_ENTRIES_SIZE];
uint8_t ADR_EXT[MAX_ODT_ENTRIES_SIZE]; uint8_t ADR_EXT[MAX_ODT_ENTRIES_SIZE];

View File

@ -927,13 +927,15 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) {
for (uint8_t k = 0; k < MAX_ODT_ENTRIES_SIZE; ++k) { 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], memcpy(&env->DATA[size],
(uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k], (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) { 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], memcpy(&env->DATA[size],
env->DAQ[i].ODT_NUMBER[j].DATA_STM[k].DATA, 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) { 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) { uint8_t ODT_ENTRIES_SIZE = env->DAQ[i].ODT_NUMBER[j].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[k].DATA[size_stim], if (ODT_ENTRIES_SIZE) {
env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]);
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;
} }
} }
} }
} }