diff --git a/LinActuatorTasks.c b/LinActuatorTasks.c index 69f92bb..823ea1a 100644 --- a/LinActuatorTasks.c +++ b/LinActuatorTasks.c @@ -8,6 +8,7 @@ #include "fc7xxx_driver_lin.h" #include "Lins.h" #include "LoggerInterface.h" +#include "string.h" //#define LOG_SIGN "Lin0" #define LOGGER env->logger @@ -543,6 +544,8 @@ static bool setState20(tLinTaskActuator *env, bool isError, uint8_t index) { env->linCommandActuator[index].COM = LIN_ACT_CFR_SUCCESSFUL; env->linCommandActuator[index].isRFR_STA = 1; + env->linStateActuator[index].Stall_Slave = LIN_STALL_STA_OFF; + if (env->linCommandActuator[index].BUS_ADR == 0) { if (isBroadCast(env)) { @@ -552,6 +555,8 @@ static bool setState20(tLinTaskActuator *env, bool isError, uint8_t index) { env->linCommandActuator[j].COM = LIN_ACT_CFR_SUCCESSFUL; env->linCommandActuator[j].isRFR_STA = 1; + env->linStateActuator[index].Stall_Slave = LIN_STALL_STA_OFF; + if (isError) { env->linStateActuator[j].error_connect = 1; } else { @@ -566,7 +571,7 @@ static bool setState20(tLinTaskActuator *env, bool isError, uint8_t index) { return false; } -static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { +static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env) { lin_event_id_t ret = LIN_NO_EVENT; @@ -579,7 +584,8 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[0].COM == LIN_ACT_CFR_MOD) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command (BROADCAST): LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, + "Sending a command (BROADCAST): LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].MODE) #endif @@ -588,7 +594,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully (BROADCAST): LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].MODE) @@ -596,7 +602,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { setState20(env, false, 0); } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command failed (BROADCAST) [%d]: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].MODE) @@ -609,7 +615,8 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[0].COM == LIN_ACT_CFR_INI) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, + "Sending a command (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS) #endif @@ -619,7 +626,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS) #endif @@ -627,7 +634,8 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Command failed (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, + "Command failed (BROADCAST): LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS) #endif @@ -640,7 +648,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[0].COM == LIN_ACT_CFR_SET) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Sending a command (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS, @@ -662,7 +670,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS, @@ -676,7 +684,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command failed (BROADCAST): LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[0].BUS_ADR, env->linCommandActuator[0].POS, @@ -703,7 +711,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].BUS_ADR == 0) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Let's skip the command: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Let's skip the command: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].MODE) #endif @@ -713,7 +721,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_MOD) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Sending a command: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].MODE) #endif @@ -722,7 +730,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].MODE) @@ -732,7 +740,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Command failed [%d]: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command failed [%d]: LIN_ACT_CFR_MOD (ADR = %d MODE = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].MODE) #endif @@ -747,7 +755,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].BUS_ADR == 0) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Let's skip the command: LIN_ACT_CFR_INI (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Let's skip the command: LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS) #endif @@ -756,7 +764,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_INI) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Sending a command: LIN_ACT_CFR_INI (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Sending a command: LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS) #endif @@ -766,7 +774,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully: LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS) #endif @@ -774,7 +782,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, "Command failed: LIN_ACT_CFR_INI (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command failed: LIN_ACT_CFR_INI (ADR = %d POS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS) #endif @@ -790,7 +798,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].BUS_ADR == 0) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Let's skip the command: LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS, @@ -805,7 +813,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Sending a command: LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS, @@ -826,7 +834,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { if (ret == LIN_TX_COMPLETED) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command completed successfully: LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS, @@ -841,7 +849,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Command failed: LIN_ACT_CFR_SET (ADR = %d POS = %d STALL= %d LNOISE = %d AUTOS = %d SPEED = %d COILS = %d)", env->linCommandActuator[i].BUS_ADR, env->linCommandActuator[i].POS, @@ -890,10 +898,10 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { &Reset_Slave); if (ret == LIN_RX_COMPLETED) { - LoggerFormatInfo(LOGGER, LOG_SIGN, "OK: State = %d", i) + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "OK: State = %d", i) } else { - LoggerFormatInfo(LOGGER, LOG_SIGN, "ERROR: State = %d", i) + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "ERROR: State = %d", i) } } @@ -967,7 +975,6 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { BUS_ADR = BUS_ADR - 1; - if (BUS_ADR != i) { asm("nop"); } @@ -984,7 +991,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { Error4_Permanent_Electrical_Slave) ) { #if (LOG_LIN_ACTUATOR == 1) - LoggerFormatInfo(LOGGER, LOG_SIGN, + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "State: ADR = %d CPOS = %d Emrf = %d Mode = %d ErrSupply = %d ErrComm = %d ErrTemp = %d ErrElect = %d", BUS_ADR + 1, CPOS_ALL, @@ -1011,7 +1018,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { #if (LOG_LIN_ACTUATOR == 1) if (Stall_Slave == LIN_STALL_STA_ON) { - LoggerFormatInfo(LOGGER, LOG_SIGN, "Detect STALL: (ADR = %d POS = %d)", + LoggerFormatInfo(LOGGER, env->SIGN_LOG, "Detect STALL: (ADR = %d POS = %d)", BUS_ADR + 1, CPOS_ALL) } @@ -1021,7 +1028,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { env->linStateActuator[BUS_ADR].Reset_Slave = Reset_Slave; -// LoggerFormatInfo(LOGGER, LOG_SIGN, "BUS_ADR = %d, CPOS_ALL = %d, Stall_Slave = %d", BUS_ADR, +// LoggerFormatInfo(LOGGER, env->SIGN_LOG, "BUS_ADR = %d, CPOS_ALL = %d, Stall_Slave = %d", BUS_ADR, // env->linStateActuator[BUS_ADR].CPOS_ALL, // env->linStateActuator[BUS_ADR].Stall_Slave) @@ -1033,7 +1040,7 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { } else { //#if (LOG_LIN_ACTUATOR == 1) -// LoggerFormatInfo(LOGGER, LOG_SIGN, +// LoggerFormatInfo(LOGGER, env->SIGN_LOG, // "Command READ - ERROR: ADR = %d ", // i // ) @@ -1064,28 +1071,12 @@ static lin_event_id_t Lin_Scheduler(tLinTaskActuator *env, char *LOG_SIGN) { void resetStall(tLinTaskActuator *env, uint8_t *dataLocalStall, char *LOG_SIGN) { #if (LOG_LIN_ACTUATOR == 1) - LoggerInfoStatic(LOGGER, LOG_SIGN, "Reset STALL (DETECT STALL RESET)") + LoggerInfoStatic(LOGGER, env->SIGN_LOG, "Reset LOCAL STALL (DETECT STALL RESET)") #endif for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) { - -// if (env->linCommandActuator[i].COM == LIN_ACT_CFR_SET) { -// !!!!!! env->linStateActuator[i].Stall_Slave = LIN_STALL_STA_OFF; dataLocalStall[i] = LIN_STALL_STA_OFF; -/* - if (env->linCommandActuator[i].BUS_ADR == 0) { - - for (uint8_t j = 0; j < env->LIN_ISSR_ALL; ++j) { - env->linStateActuator[j].Stall_Slave = LIN_STALL_STA_OFF; - dataLocalStall[j] = LIN_STALL_STA_OFF; - } - - return; - } -*/ - // } } - } //начало----------------------------------------- LIN 1 ---------------------------------------------------------------- @@ -1105,6 +1096,8 @@ void Lin_1_Init(tLinTaskActuator *env, env->LIN_ISSR_ALL = LIN_ISSR_ALL; env->access = osMutexNew(NULL); + memcpy(env->SIGN_LOG, "Ln1 ", sizeof("Ln1 ") - 1); + InitThreadAtrStatic(&env->threadLin.attr, "Ln1", env->threadLin.controlBlock, env->threadLin.stack, osPriorityNormal); } @@ -1113,8 +1106,8 @@ void Lin_1_Init(tLinTaskActuator *env, static _Noreturn void Lin1_Thread(tLinTaskActuator *env) { for (;;) { - if (osMutexAcquire(env->access, 1000) == osOK) { - lin_event_id_t res = Lin_Scheduler(env, "Ln1 "); + if (osMutexAcquire(env->access, 5000) == osOK) { + lin_event_id_t res = Lin_Scheduler(env); uint8_t isError = 0; for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) { @@ -1131,6 +1124,8 @@ static _Noreturn void Lin1_Thread(tLinTaskActuator *env) { env->busy = false; osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, "Ln1 ", "Mutex acquisition error") } SystemDelayMs(500); @@ -1168,6 +1163,8 @@ void Lin_2_Init(tLinTaskActuator *env, env->LIN_ISSR_ALL = LIN_ISSR_ALL; env->access = osMutexNew(NULL); + memcpy(env->SIGN_LOG, "Ln2 ", sizeof("Ln2 ") - 1); + InitThreadAtrStatic(&env->threadLin.attr, "Ln2", env->threadLin.controlBlock, env->threadLin.stack, osPriorityNormal); } @@ -1176,8 +1173,8 @@ void Lin_2_Init(tLinTaskActuator *env, static _Noreturn void Lin2_Thread(tLinTaskActuator *env) { for (;;) { - if (osMutexAcquire(env->access, 1000) == osOK) { - lin_event_id_t res = Lin_Scheduler(env, "Ln2 "); + if (osMutexAcquire(env->access, 5000) == osOK) { + lin_event_id_t res = Lin_Scheduler(env); uint8_t isError = 0; for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) { @@ -1194,6 +1191,8 @@ static _Noreturn void Lin2_Thread(tLinTaskActuator *env) { env->busy = false; osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, "Ln2 ", "Mutex acquisition error") } SystemDelayMs(500); @@ -1231,6 +1230,8 @@ void Lin_3_Init(tLinTaskActuator *env, env->LIN_ISSR_ALL = LIN_ISSR_ALL; env->access = osMutexNew(NULL); + memcpy(env->SIGN_LOG, "Ln3 ", sizeof("Ln3 ") - 1); + InitThreadAtrStatic(&env->threadLin.attr, "Ln3", env->threadLin.controlBlock, env->threadLin.stack, osPriorityNormal); } @@ -1239,8 +1240,8 @@ void Lin_3_Init(tLinTaskActuator *env, static _Noreturn void Lin3_Thread(tLinTaskActuator *env) { for (;;) { - if (osMutexAcquire(env->access, 1000) == osOK) { - lin_event_id_t res = Lin_Scheduler(env, "Ln3 "); + if (osMutexAcquire(env->access, 5000) == osOK) { + lin_event_id_t res = Lin_Scheduler(env); uint8_t isError = 0; for (uint8_t i = 0; i < env->LIN_ISSR_ALL; ++i) { @@ -1257,6 +1258,8 @@ static _Noreturn void Lin3_Thread(tLinTaskActuator *env) { env->busy = false; osMutexRelease(env->access); + } else { + LoggerInfoStatic(LOGGER, "Ln3 ", "Mutex acquisition error") } SystemDelayMs(500); diff --git a/LinActuatorTasks.h b/LinActuatorTasks.h index 5577353..aa99b3b 100644 --- a/LinActuatorTasks.h +++ b/LinActuatorTasks.h @@ -446,6 +446,8 @@ typedef struct { bool busy; // Устройство занято uint8_t error_connect; // Ошибка соединения (устройство не отвечает) + char SIGN_LOG[5]; + tLinStateFullActuator linStateActuator[9]; tLinCommandActuator linCommandActuator[9];