Обновление
This commit is contained in:
parent
6d9cc4c827
commit
8fadc4e641
373
LinTasks.c
373
LinTasks.c
|
|
@ -537,6 +537,31 @@ void Lin_0_Init(tLinTaskActuator *env,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static bool setState20(tLinTaskActuator *env, bool isError, uint8_t index) {
|
||||||
|
|
||||||
|
if (isError) {
|
||||||
|
env->linStateActuator[index].error_connect = 1;
|
||||||
|
} else {
|
||||||
|
env->linStateActuator[index].error_connect = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (env->linCommandActuator[index].BUS_ADR == 0x20) {
|
||||||
|
for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) {
|
||||||
|
env->linCommandActuator[j].COM = LIN_ACT_CFR_NONE;
|
||||||
|
|
||||||
|
if (isError) {
|
||||||
|
env->linStateActuator[j].error_connect = 1;
|
||||||
|
} else {
|
||||||
|
env->linStateActuator[j].error_connect = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
|
|
||||||
lin_event_id_t ret;
|
lin_event_id_t ret;
|
||||||
|
|
@ -558,26 +583,18 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
env->linCommandActuator[j].isRFR_STA = 1;
|
env->linCommandActuator[j].isRFR_STA = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
env->linStateActuator[i].error_connect = 1;
|
if (setState20(env, true, i))
|
||||||
|
break;
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
|
||||||
for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) {
|
|
||||||
env->linStateActuator[j].error_connect = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
if (setState20(env, false, i))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
|
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
|
||||||
|
|
@ -590,19 +607,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
if (ret == LIN_TX_COMPLETED) {
|
||||||
} else {
|
} else {
|
||||||
env->linStateActuator[i].error_connect = 1;
|
if (setState20(env, true, i))
|
||||||
|
break;
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
|
||||||
for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) {
|
|
||||||
env->linStateActuator[j].error_connect = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
if (setState20(env, false, i))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -622,19 +632,12 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
if (ret == LIN_TX_COMPLETED) {
|
||||||
} else {
|
} else {
|
||||||
env->linStateActuator[i].error_connect = 1;
|
if (setState20(env, true, i))
|
||||||
|
break;
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
|
||||||
for (uint8_t j = 0; j < LIN0_ISSR_ALL; ++j) {
|
|
||||||
env->linStateActuator[j].error_connect = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->linCommandActuator[i].BUS_ADR == 0x20) {
|
if (setState20(env, false, i))
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -709,7 +712,6 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
env->linStateActuator[i].error_connect = 1;
|
env->linStateActuator[i].error_connect = 1;
|
||||||
// return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -717,7 +719,6 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
env->linStateActuator[i].error_connect = 1;
|
env->linStateActuator[i].error_connect = 1;
|
||||||
// return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -730,300 +731,24 @@ lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
||||||
return LIN_NO_EVENT;
|
return LIN_NO_EVENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
lin_event_id_t Lin0_Scheduler(tLinTaskActuator *env) {
|
|
||||||
|
|
||||||
lin_event_id_t ret;
|
|
||||||
|
|
||||||
|
|
||||||
ret = CFR_MOD_x(env->linIo, env->linData,
|
|
||||||
0x20,
|
|
||||||
LIN_MODE_STOP);
|
|
||||||
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ret = CFR_INI_x(env->linIo, env->linData,
|
|
||||||
0x20,
|
|
||||||
6000);
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = CFR_MOD_x(env->linIo, env->linData,
|
|
||||||
0x20,
|
|
||||||
LIN_MODE_NORMAL);
|
|
||||||
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
asm("nop");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ret = DFR_STA_x(env->linIo, env->linData, 0x27);
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint16_t CPOS_ALL;
|
|
||||||
eEmrf_Slave_STA Emrf_Slave;
|
|
||||||
eMode_Mod Mode_Slave;
|
|
||||||
uint8_t Error1_Supply_Slave;
|
|
||||||
uint8_t Error2_Communication_Slave;
|
|
||||||
uint8_t Error3_Temperature_Slave;
|
|
||||||
uint8_t Error4_Permanent_Electrical_Slave;
|
|
||||||
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 (ret == LIN_RX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
} else {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//asm("nop");
|
|
||||||
|
|
||||||
|
|
||||||
ret = CFR_SET_x(env->linIo, env->linData,
|
|
||||||
0x27,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
asm("nop");
|
|
||||||
|
|
||||||
ret = ISSR_x(env->linIo, env->linData,
|
|
||||||
7,
|
|
||||||
&env->linStateActuator[7].BLOCK_MT,
|
|
||||||
&env->linStateActuator[7].CPOS_ALL,
|
|
||||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
|
||||||
|
|
||||||
if (ret == LIN_RX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint8_t IDE_ref;
|
|
||||||
uint8_t IDE_Sup;
|
|
||||||
uint8_t IDE_Har;
|
|
||||||
|
|
||||||
ret = DFR_IDE_x(env->linIo, env->linData, 7);
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = RFR_IDE_x(env->linIo, env->linData,
|
|
||||||
&BUS_ADR,
|
|
||||||
&IDE_ref,
|
|
||||||
&IDE_Sup,
|
|
||||||
&IDE_Har);
|
|
||||||
|
|
||||||
if (ret == LIN_RX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
|
|
||||||
asm("nop");
|
|
||||||
|
|
||||||
|
|
||||||
ret = ISSR_x(env->linIo, env->linData,
|
|
||||||
7,
|
|
||||||
&env->linStateActuator[7].BLOCK_MT,
|
|
||||||
&env->linStateActuator[7].CPOS_ALL,
|
|
||||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
|
||||||
|
|
||||||
if (ret == LIN_RX_COMPLETED) {
|
|
||||||
|
|
||||||
if ((env->linStateActuator[7].DIAGNOSE_MT) || (env->linCommandActuator[7].isRFR_STA)) {
|
|
||||||
|
|
||||||
env->linCommandActuator[7].isRFR_STA = 0;
|
|
||||||
|
|
||||||
ret = DFR_STA_x(env->linIo, env->linData, 7);
|
|
||||||
|
|
||||||
if (ret == LIN_TX_COMPLETED) {
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint16_t CPOS_ALL;
|
|
||||||
eEmrf_Slave_STA Emrf_Slave;
|
|
||||||
eMode_Mod Mode_Slave;
|
|
||||||
uint8_t Error1_Supply_Slave;
|
|
||||||
uint8_t Error2_Communication_Slave;
|
|
||||||
uint8_t Error3_Temperature_Slave;
|
|
||||||
uint8_t Error4_Permanent_Electrical_Slave;
|
|
||||||
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 (ret == LIN_RX_COMPLETED) {
|
|
||||||
|
|
||||||
if (BUS_ADR != 7) {
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
asm("nop");
|
|
||||||
//return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
asm("nop");
|
|
||||||
//return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
asm("nop");
|
|
||||||
//return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint8_t IDE_ref;
|
|
||||||
uint8_t IDE_Sup;
|
|
||||||
uint8_t IDE_Har;
|
|
||||||
|
|
||||||
ret = DFR_IDE_x(env->linIo, env->linData,7);
|
|
||||||
ret = RFR_IDE_x(env->linIo, env->linData,
|
|
||||||
&BUS_ADR,
|
|
||||||
&IDE_ref,
|
|
||||||
&IDE_Sup,
|
|
||||||
&IDE_Har);
|
|
||||||
|
|
||||||
|
|
||||||
ret = CFR_INI_x(env->linIo, env->linData,
|
|
||||||
0x20,
|
|
||||||
0);
|
|
||||||
|
|
||||||
|
|
||||||
ret = ISSR_x(env->linIo, env->linData,
|
|
||||||
7,
|
|
||||||
&env->linStateActuator[7].BLOCK_MT,
|
|
||||||
&env->linStateActuator[7].CPOS_ALL,
|
|
||||||
&env->linStateActuator[7].DIAGNOSE_MT);
|
|
||||||
|
|
||||||
|
|
||||||
ret = DFR_PRG_x(env->linIo, env->linData, 7);
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint8_t BUS_NEW_ADR;
|
|
||||||
uint8_t NOTL_DREH_Master;
|
|
||||||
uint8_t NOTL_ENAB_Master;
|
|
||||||
uint8_t DREH_Slave;
|
|
||||||
uint8_t ParitySlave;
|
|
||||||
uint8_t Version_CFR;
|
|
||||||
|
|
||||||
ret = RFR_PRG_x(env->linIo, env->linData,
|
|
||||||
&BUS_ADR,
|
|
||||||
&BUS_NEW_ADR,
|
|
||||||
&NOTL_DREH_Master,
|
|
||||||
&NOTL_ENAB_Master,
|
|
||||||
&DREH_Slave,
|
|
||||||
&ParitySlave,
|
|
||||||
&Version_CFR);
|
|
||||||
|
|
||||||
|
|
||||||
for (uint8_t i = 0; i < 31; ++i) {
|
|
||||||
|
|
||||||
ret = DFR_STA_x(env->linIo, env->linData, i);
|
|
||||||
|
|
||||||
uint8_t BUS_ADR;
|
|
||||||
uint16_t CPOS_ALL;
|
|
||||||
eEmrf_Slave_STA Emrf_Slave;
|
|
||||||
eMode_Mod Mode_Slave;
|
|
||||||
uint8_t Error1_Supply_Slave;
|
|
||||||
uint8_t Error2_Communication_Slave;
|
|
||||||
uint8_t Error3_Temperature_Slave;
|
|
||||||
uint8_t Error4_Permanent_Electrical_Slave;
|
|
||||||
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 (ret == LIN_RX_COMPLETED) {
|
|
||||||
asm("nop");
|
|
||||||
} else {
|
|
||||||
asm("nop");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ret == LIN_TX_COMPLETED) || (ret == LIN_RX_COMPLETED)) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return LIN_NO_EVENT;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
static _Noreturn void Lin0_Thread(tLinTaskActuator *env) {
|
static _Noreturn void Lin0_Thread(tLinTaskActuator *env) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
if (osMutexAcquire(env->access, 100) == osOK) {
|
if (osMutexAcquire(env->access, 100) == osOK) {
|
||||||
lin_event_id_t res = Lin0_Scheduler(env);
|
lin_event_id_t res = Lin0_Scheduler(env);
|
||||||
env->errorConnect = res;
|
|
||||||
|
uint8_t isError = 0;
|
||||||
|
for (uint8_t i = 0; i < LIN0_ISSR_ALL; ++i) {
|
||||||
|
if (env->linStateActuator[i].error_connect == 1)
|
||||||
|
++isError;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isError == LIN0_ISSR_ALL) {
|
||||||
|
env->error_connect = 1;
|
||||||
|
} else {
|
||||||
|
env->error_connect = 0;
|
||||||
|
}
|
||||||
|
|
||||||
osMutexRelease(env->access);
|
osMutexRelease(env->access);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -452,7 +452,7 @@ typedef struct {
|
||||||
osMutexId_t access;
|
osMutexId_t access;
|
||||||
|
|
||||||
uint8_t busy; // Устройство занято
|
uint8_t busy; // Устройство занято
|
||||||
uint8_t errorConnect; // Ошибка соединения (устройство не отвечает)
|
uint8_t error_connect; // Ошибка соединения (устройство не отвечает)
|
||||||
|
|
||||||
tLinStateFullActuator linStateActuator[9];
|
tLinStateFullActuator linStateActuator[9];
|
||||||
tLinCommandActuator linCommandActuator[9];
|
tLinCommandActuator linCommandActuator[9];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue