From 7b6c99c81a9edcd54a2a9504f238d25bc73d101a Mon Sep 17 00:00:00 2001 From: cfif Date: Tue, 2 Dec 2025 17:33:58 +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 --- LinTasks.c | 65 +++++++++++++++++++++++++++++------------------------- LinTasks.h | 2 ++ 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/LinTasks.c b/LinTasks.c index eaa6063..acd73ff 100644 --- a/LinTasks.c +++ b/LinTasks.c @@ -682,41 +682,46 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) { eStall_STA Stall_Slave; eReset_STA Reset_Slave; - ret = RFR_STA_x(env->linIo, env->linData, - &BUS_ADR, - &CPOS_ALL, - &Emrf_Slave, - &Mode_Slave, - &Error1_Supply_Slave, - &Error2_Communication_Slave, - &Error3_Temperature_Slave, - &Error4_Permanent_Electrical_Slave, - &Stall_Slave, - &Reset_Slave); + if ((env->linStateActuator[i].DIAGNOSE_MT) || (env->linCommandActuator[i].isRFR_STA)) { - if (ret == LIN_RX_COMPLETED) { + env->linCommandActuator[i].isRFR_STA = 0; + + ret = RFR_STA_x(env->linIo, env->linData, + &BUS_ADR, + &CPOS_ALL, + &Emrf_Slave, + &Mode_Slave, + &Error1_Supply_Slave, + &Error2_Communication_Slave, + &Error3_Temperature_Slave, + &Error4_Permanent_Electrical_Slave, + &Stall_Slave, + &Reset_Slave); + + if (ret == LIN_RX_COMPLETED) { + + if (BUS_ADR != i) { + asm("nop"); + } + + if (BUS_ADR < LIN0_ISSR_ALL) { + env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL; + env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave; + env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave; + env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave; + env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; + env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; + env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; + env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; + env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; + } else { + asm("nop"); + } - if (BUS_ADR != i) { - asm("nop"); - } - if (BUS_ADR < LIN0_ISSR_ALL) { - env->linStateActuator[BUS_ADR].CPOS_ALL = CPOS_ALL; - env->linStateActuator[BUS_ADR].Emrf_Slave = Emrf_Slave; - env->linStateActuator[BUS_ADR].Mode_Slave = Mode_Slave; - env->linStateActuator[BUS_ADR].Error1_Supply_Slave = Error1_Supply_Slave; - env->linStateActuator[BUS_ADR].Error2_Communication_Slave = Error2_Communication_Slave; - env->linStateActuator[BUS_ADR].Error3_Temperature_Slave = Error3_Temperature_Slave; - env->linStateActuator[BUS_ADR].Error4_Permanent_Electrical_Slave = Error4_Permanent_Electrical_Slave; - env->linStateActuator[BUS_ADR].Stall_Slave = Stall_Slave; - env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; } else { - asm("nop"); + return ret; } - - - } else { - return ret; } } else { diff --git a/LinTasks.h b/LinTasks.h index 68bf893..471f833 100644 --- a/LinTasks.h +++ b/LinTasks.h @@ -440,6 +440,8 @@ typedef struct { uint8_t Baudrate; uint8_t Version_CFR; + uint8_t isRFR_STA; + } tLinCommandActuator; typedef struct {