diff --git a/MainModesArbiter.c b/MainModesArbiter.c index 538420e..e421c15 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -37,91 +37,41 @@ void Mma_Init( env->thread.id = 0; } -void LoadDataInFromModel(tMma *env) { - if (osMutexAcquire(env->ModelTask.access, 5000) == osOK) { +void GetCanErrors(tMma *env, uint8_t canIndex) { + FLEXCAN_ErrorInfoType errorInfo; - // Включение 5V (0 - ВКЛ) - GpioPinSet(&env->gpios->power.SW5V_EN, rtY.PowerEnable_Model.SW5V_EN); -// GpioPinSet(&env->gpios->power.SW5V_EN, true); + // Получить информацию об ошибках + FLEXCAN_ErrorType result = FLEXCAN_GetErrorInfo(canIndex, &errorInfo); - // Контроль напряжения борт-сети (1 - ВКЛ) - GpioPinSet(&env->gpios->power.PBATT_CK_EN, rtY.PowerEnable_Model.PBATT_CK_EN); + if (result == FLEXCAN_ERROR_OK) { + // Количество ошибок приёма + uint32_t rxErrors = errorInfo.u32RxErrCnt; + uint32_t rxErrorsFast = errorInfo.u32RxErrCnt_Fast; - GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_Motor_Front_EN, rtY.PowerEnable_Model.Incar_Motor_Front_EN); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_EN_Diag, true); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_FrontRearIncarMotor.Incar_Motor_Rear_EN, rtY.PowerEnable_Model.Incar_Motor_Rear_EN); + // Количество ошибок передачи + uint32_t txErrors = errorInfo.u32TxErrCnt; + uint32_t txErrorsFast = errorInfo.u32TxErrCnt_Fast; - GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_EN, rtY.PowerEnable_Model.TwoWayValve_EN); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.TwoWayValve_EN_Diag, true); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_TwoWayValveAndReservePowerSupply.ReservePower_EN, rtY.PowerEnable_Model.ReservePower_EN); + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "RX Errors: %lu (normal), %lu (fast)\n", rxErrors, rxErrorsFast); + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "TX Errors: %lu (normal), %lu (fast)\n", txErrors, txErrorsFast); - GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.EN_ReservePower, rtY.PowerEnable_Model.EN_ReservePower); - GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.EN_PowerReserve, rtY.PowerEnable_Model.EN_PowerReserve); - - GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver1_EN, rtY.PowerEnable_Model.PtcRelayDriver1_EN); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver_EN_Diag, true); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_2xChannelPTCPower.PtcRelayDriver2_EN, rtY.PowerEnable_Model.PtcRelayDriver2_EN); - - GpioPinSet(&env->gpios->power.VN7008AJ_FrontLINActuatorPowerDriverAB.LIN_ActPower_AB, rtY.PowerEnable_Model.LIN_ActPower_AB); - GpioPinSet(&env->gpios->power.VN7008AJ_FrontLINActuatorPowerDriverAB.EN_CurrentSensing_AB, true); - - GpioPinSet(&env->gpios->power.VN7008AJ_RearLINActuatorPowerDriverC.LIN_ActPower_C, rtY.PowerEnable_Model.LIN_ActPower_C); - GpioPinSet(&env->gpios->power.VN7008AJ_RearLINActuatorPowerDriverC.EN_CurrentSensing_C, true); - - GpioPinSet(&env->gpios->power.BTS4175SGAXUMA1_ShutOFFValveBatteryChiller.EN_BATTChiller, rtY.PowerEnable_Model.EN_BATTChiller); - - - GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffFront_EN, rtY.PowerEnable_Model.ShutOffFront_EN); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOff_EN_Diag, true); - GpioPinSet(&env->gpios->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffRear_EN, rtY.PowerEnable_Model.ShutOffRear_EN); - - GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV1_EN, rtY.PowerEnable_Model.ShutOffTXV1_EN); - GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV_EN_Diag, true); - GpioPinSet(&env->gpios->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV2_EN, rtY.PowerEnable_Model.ShutOffTXV2_EN); - -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentFront = %d", rtY.PWM_Get_f.pwmPercentFront) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentRear = %d", rtY.PWM_Get_f.pwmPercentRear) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentFrontReserved = %d", rtY.PWM_Get_f.pwmPercentFrontReserved) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "SET pwmPercentRearReserved = %d", rtY.PWM_Get_f.pwmPercentRearReserved) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0) - - env->pwms->pwmFrontIo.setActivePercent(env->pwms->pwmFrontIo.env, rtY.PWM_Get_f.pwmPercentFront); - env->pwms->pwmRearIo.setActivePercent(env->pwms->pwmRearIo.env, rtY.PWM_Get_f.pwmPercentRear); - env->pwms->pwmFrontReservedIo.setActivePercent(env->pwms->pwmFrontReservedIo.env, rtY.PWM_Get_f.pwmPercentFrontReserved); - env->pwms->pwmRearReservedIo.setActivePercent(env->pwms->pwmRearReservedIo.env, rtY.PWM_Get_f.pwmPercentRearReserved); - - PWM_Get.pwmPercentFront = env->pwms->pwmFrontCaptureIO.getPwm(env->pwms->pwmFrontCaptureIO.env); - PWM_Get.pwmPercentRear = env->pwms->pwmRearCaptureIO.getPwm(env->pwms->pwmRearCaptureIO.env); - PWM_Get.pwmPercentFrontReserved = env->pwms->pwmFrontCaptureIO.getPwm( - env->pwms->pwmFrontReservedCaptureIO.env); - PWM_Get.pwmPercentRearReserved = env->pwms->pwmRearCaptureIO.getPwm( - env->pwms->pwmRearReservedCaptureIO.env); - -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentFront = %d", PWM_Get.pwmPercentFront) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentRear = %d", PWM_Get.pwmPercentRear) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentFrontReserved = %d", PWM_Get.pwmPercentFrontReserved) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "GET pwmPercentRearReserved = %d", PWM_Get.pwmPercentRearReserved) -// LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "============================================== %d", 0) - - set_Dtc_state(&env->Diagnostic); - set_CanDebugSpamTransmitter(&env->canSpamDebugTransmitter); - set_CanSpamTransmitter(&env->canSpamTransmitter); - get_CanSpamReceiver(&env->canSpamReceiver); - - osMutexRelease(env->ModelTask.access); + // Общее количество ошибок + uint32_t totalErrors = rxErrors + rxErrorsFast + txErrors + txErrorsFast; + LoggerFormatInfo(LOGGER, LOG_TASK_ARB, "Total errors: %lu\n", totalErrors); } - } + + + static _Noreturn void Mma_Thread(tMma *env) { // Запуск устройства Mma_InitStage(env); -// env->pwms->pwmFrontIo.run(env->pwms->pwmFrontIo.env); + env->pwms->pwmFrontIo.run(env->pwms->pwmFrontIo.env); ModelTask_StartThread(&env->ModelTask); @@ -132,7 +82,6 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerInfoStatic(LOGGER, LOG_TASK_ARB, "Model running...") - // SMC_SetSystemMode(SMC_MODE_STANBY_3); for (;;) { @@ -140,7 +89,8 @@ static _Noreturn void Mma_Thread(tMma *env) { // bool ST_PowerReserve = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_PowerReserve.ST_PowerReserve); // bool ST_ReservePower = GpioPinGet(&env->gpios->power.BTS4175SGAXUMA1_ReservePowerOutput.ST_ReservePower); - LoadDataInFromModel(env); + +// GetCanErrors(env, 0); SystemDelayMs(25); diff --git a/MainModesArbiter_InitStage.c b/MainModesArbiter_InitStage.c index e4bab19..aec4b94 100644 --- a/MainModesArbiter_InitStage.c +++ b/MainModesArbiter_InitStage.c @@ -117,9 +117,6 @@ static void Mma_InitSubSystems(tMma *env) { // Indication_Init(&env->Indication, HVAC_DEV_MODE_STARTUP); - ModelTask_Init(&env->ModelTask, &env->linTaskActuator1, &env->linTaskActuator2, &env->linTaskActuator3, - &env->slog.logger); - CommandLine_Init(&env->cli, &env->slog, &env->serialPorts->SerialPortLog_IO, &env->serialPorts->cliVirtualPortOut_Io); CommandLine_StartThread(&env->cli); @@ -144,21 +141,78 @@ static void Mma_InitSubSystems(tMma *env) { CanXcpProcessing_Listener_Start(&env->CanSerialPortFrameXCP); - CanSpamReceiver_Init(&env->canSpamReceiver, &env->canPorts->Can0_IO, env->ModelTask.access, &env->slog.logger); + CanSpamReceiver_Init(&env->canSpamReceiver, &env->canPorts->Can0_IO, &env->slog.logger); CanSpamReceiver_StartThread(&env->canSpamReceiver); - CanSpamTransmitter_Init(&env->canSpamTransmitter, &env->canPorts->Can0_IO, env->ModelTask.access, &env->slog.logger); + CanSpamTransmitter_Init(&env->canSpamTransmitter, &env->canPorts->Can0_IO, &env->slog.logger); CanSpamTransmitter_StartThread(&env->canSpamTransmitter); - - CanSpamDebugReceiver_Init(&env->canSpamDebugReceiver, &env->canPorts->Can1_IO, env->ModelTask.access, &env->slog.logger); + CanSpamDebugReceiver_Init(&env->canSpamDebugReceiver, &env->canPorts->Can1_IO, &env->slog.logger); CanSpamDebugReceiver_StartThread(&env->canSpamDebugReceiver); - CanSpamDebugTransmitter_Init(&env->canSpamDebugTransmitter, &env->canPorts->Can1_IO, &env->canSpamDebugReceiver, env->ModelTask.access, + CanSpamDebugTransmitter_Init(&env->canSpamDebugTransmitter, &env->canPorts->Can1_IO, &env->canSpamDebugReceiver, &env->slog.logger); CanSpamDebugTransmitter_StartThread(&env->canSpamDebugTransmitter); + tLinData *linData4 = Lin4_Init(GetLin123CallbackHandler); + Lin_4_Init(&env->linTaskSensor4, linData4, &env->linPorts->lin4_Io, &env->slog.logger); +// Lin4_StartThread(&env->linTaskSensor4); + + tLinData *linData5 = Lin5_Init(GetLin123CallbackHandler); + Lin_5_Init(&env->linTaskSensor5, linData5, &env->linPorts->lin5_Io, &env->slog.logger); + Lin5_StartThread(&env->linTaskSensor5); + + +// tLinData *linData6 = Lin6_Init(GetLin123CallbackHandler); +// Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger); +// Lin6_StartThread(&env->linTaskSensor6); + + Adc_0_Init(&env->adcTask0, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger); + Adc_0_StartThread(&env->adcTask0); + + Adc_1_Init(&env->adcTask1, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger); + Adc_1_StartThread(&env->adcTask1); + + CanUds_Init( + &env->canUds, + &env->Diagnostic, + &env->canPorts->Can0_IO, + &env->storage, + &env->canSpamTransmitter, + &env->canSpamDebugTransmitter, + &env->adcTask0, + &P_bInternalFlashPage_ClearRange, + &P_bInternalFlashPage_WriteFromRam, + &env->slog.logger); + + CanSerialPortCanUds_Start(&env->canUds); + + StandBy_Init(); + + + ModelTask_Init( + &env->ModelTask, + &env->linTaskActuator1, + &env->linTaskActuator2, + &env->linTaskActuator3, + + env->pwms, + + env->gpios, + + &env->adcTask0, + &env->adcTask1, + + &env->canSpamReceiver, + &env->canSpamTransmitter, + &env->canSpamDebugTransmitter, + &env->Diagnostic, + + &env->slog.logger + ); + + tLinData *linData1 = Lin1_Init(GetLin123CallbackHandler); Lin_1_Init(&env->linTaskActuator1, linData1, &env->linPorts->lin1_Io, 9, @@ -196,41 +250,6 @@ static void Mma_InitSubSystems(tMma *env) { Lin3_StartThread(&env->linTaskActuator3); - tLinData *linData4 = Lin4_Init(GetLin123CallbackHandler); - Lin_4_Init(&env->linTaskSensor4, linData4, &env->linPorts->lin4_Io, &env->slog.logger); -// Lin4_StartThread(&env->linTaskSensor4); - - tLinData *linData5 = Lin5_Init(GetLin123CallbackHandler); - Lin_5_Init(&env->linTaskSensor5, linData5, &env->linPorts->lin5_Io, &env->slog.logger); - Lin5_StartThread(&env->linTaskSensor5); - - -// tLinData *linData6 = Lin6_Init(GetLin123CallbackHandler); -// Lin_6_Init(&env->linTaskSensor6, linData6, &env->linPorts->lin6_Io, &env->slog.logger); -// Lin6_StartThread(&env->linTaskSensor6); - - Adc_0_Init(&env->adcTask0, env->ModelTask.access, &env->adcs->adc_0_IO, env->gpios, &env->slog.logger); - Adc_0_StartThread(&env->adcTask0); - - Adc_1_Init(&env->adcTask1, env->ModelTask.access, &env->adcs->adc_1_IO, env->gpios, &env->slog.logger); - Adc_1_StartThread(&env->adcTask1); - - CanUds_Init( - &env->canUds, - &env->Diagnostic, - &env->canPorts->Can0_IO, - &env->storage, - &env->canSpamTransmitter, - &env->canSpamDebugTransmitter, - &env->adcTask0, - &P_bInternalFlashPage_ClearRange, - &P_bInternalFlashPage_WriteFromRam, - &env->slog.logger); - - CanSerialPortCanUds_Start(&env->canUds); - - StandBy_Init(); - LoggerInfoStatic(&env->slog.logger, LOG_TASK_MAIN, "End of subsystem initialization") diff --git a/PeripheralInterfaces.c b/PeripheralInterfaces.c index fb4eb2c..d4cc4ee 100644 --- a/PeripheralInterfaces.c +++ b/PeripheralInterfaces.c @@ -6,7 +6,6 @@ void InitPeripheralInterfaces(tLoggerInterface *logger) { Gpios_Init(); - CanPorts_Init(logger); Adcs_Init(logger); Pwms_Init(logger);