提交 396d6c6b 作者: wysheng

简化超时检测

上级 b053e7c3
......@@ -414,7 +414,7 @@ StructTCUEM TCUChgContralTCUEM_B;
StructTCUCControl TCUControlInfo =
{
.ChargingServiceFlag = 1,
.ChargingServiceFlag = 2,
.version = 0x0230,
.ChargeNum =
{
......@@ -1468,13 +1468,15 @@ void AckTCUHeartBeat(StructTCUSend * pPgnRecv)
if (pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatRecvTime = GetSystemTick();
}
if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.HeartBeatErrCnt_B = 0;
}
TCUCommuStatus.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
TCUCommuStatus.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
......@@ -1485,7 +1487,6 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
cp56time2a * time = NULL;
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
......@@ -1495,7 +1496,7 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.TimeRecvTime = GetSystemTick();
TCUCommuStatus.CommStage = TimeStage;
memcpy(time, &pPgnRecv->Data[1], 7);
......@@ -1562,8 +1563,7 @@ void TCUVersionCheck(StructTCUSend * pPgnRecv)
{
TCUCommuStatus.VerChkVaild = 1; //版本校验成功
TCUCommuStatus.CommStage = VersionStage;
TCUCommuStatus.VersionRecvTime = GetSystemTick();
TCUCommuStatus.VersionSentTime = 0; //版本发送初始话
}
else
TCUCommuStatus.VerChkVaild = 0; //版本校验失败
......@@ -1580,7 +1580,7 @@ void TCUVersionCheckSent(void)
0
};
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[0] = 0;
Data[1] = TCUControlInfo.version;
Data[2] = (u8) (TCUControlInfo.version >> 8);
if(TCUCommuStatus.ChgNum == 1)
......@@ -1597,7 +1597,6 @@ void TCUVersionCheckSent(void)
void TCUParam(StructTCUSend * pPgnRecv)
{
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
......@@ -1608,8 +1607,7 @@ void TCUParam(StructTCUSend * pPgnRecv)
}
TCUCommuStatus.CommStage = ChageParamStage;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
TCUCommuStatus.ParamRecvTime = GetSystemTick();
TCUCommuStatus.ParamSentTime = 0; //参数发送初始化
}
......@@ -1659,8 +1657,7 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = ServiceContralStage;
TCUCommuStatus.ServiceContralRecvTime = GetSystemTick();
TCUCommuStatus.ServiceContralSentTime = 0;
if ((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02))
TCUCommuStatus.ServiceContralVaildValue = 1; //数据合法性校验失败
......@@ -1725,9 +1722,9 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.ElectLockRecvTime = GetSystemTick();
TCUCommuStatus.CommStage = ElectLockStage;
TCUCommuStatus.ElectLockSentTime = 0;
TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
......@@ -1815,8 +1812,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = PowerControlStage;
TCUCommuStatus.PowerControlRecvTime = GetSystemTick();
TCUCommuStatus.PowerControlSentTime = 0;
TCUCommuStatus.PowerControltype = pPgnRecv->Data[1];
TCUCommuStatus.PowerControlParam = pPgnRecv->Data[2] + (u16)
pPgnRecv->Data[3] << 8;
......@@ -2395,11 +2391,11 @@ void TCUMeasuRecv(StructTCUSend * pPgnRecv)
{
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.DCMeasuRecvTime = GetSystemTick();
TCUCommuStatus.DCMeasuErrCnt = 0;
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.DCMeasuRecvTime_B = GetSystemTick();
TCUCommuStatus.DCMeasuErrCnt_B = 0;
}
}
......
......@@ -29,7 +29,7 @@ const StructTCUCommuParam TCUCommuParam =
{
.HeartPeriod = 1,
.HeartErrCntMax = 3,
.HeartTimeout = 3,
.HeartTimeout = 1,
.SignInPeriod = 60,
};
......@@ -87,8 +87,7 @@ void TCURecvProcess(void)
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = ChgInfornQueryStage;
TCUCommuStatus.ChgInfornQueryRecvTime = GetSystemTick();
TCUCommuStatus.ChgInfornQuerySentTime = 0;
break;
case eCmd_verificationAck: //车辆验证应答帧
......@@ -128,106 +127,62 @@ void TCURecvProcess(void)
void InformationReporting(void)
{
if (TCUCommuStatus.DCConInforSendTime == 0)
{
InformationReporting_22_A();
InformationReporting_23_A();
TCUCommuStatus.DCConInforSendTime = GetSystemTick();
}
else if (GetSystemTick() -TCUCommuStatus.DCConInforSendTime >= 500)
//遥信
static u32 DCConInforSendTime = 0;
if (GetSystemTick() -DCConInforSendTime >= 500)
{
DCConInforSendTime = GetSystemTick();
InformationReporting_22_A();
InformationReporting_23_A();
TCUCommuStatus.DCConInforSendTime = GetSystemTick();
}
if (TCUCommuStatus.DCConInforSendTime_B == 0)
{
InformationReporting_22_B();
InformationReporting_23_B();
TCUCommuStatus.DCConInforSendTime_B = GetSystemTick();
}
else if (GetSystemTick() -TCUCommuStatus.DCConInforSendTime_B >= 500)
{
InformationReporting_22_B();
InformationReporting_23_B();
TCUCommuStatus.DCConInforSendTime_B = GetSystemTick();
} //遥信
}
void DCMeasuring_A(void)
{
if (0 == TCUCommuStatus.DCMeasuRecvTime) //遥测
static u32 DCMeasuRecvTime = 0;
if ((GetSystemTick() - DCMeasuRecvTime) > 1000)
{
if ((GetSystemTick() -TCUCommuStatus.DCMeasuSendTime) > 2000)
TCUCommuStatus.DCMeasuErrCnt++;
DCMeasuRecvTime = GetSystemTick();
if (TCUCommuStatus.DCMeasuErrCnt > 5)
{
TCUCommuStatus.DCMeasuErrCnt++;
if (TCUCommuStatus.DCMeasuErrCnt > 5)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
}
else
{
measuringReporting20_A();
TCUCommuStatus.DCMeasuSendTime = GetSystemTick();
TCUCommuStatus.DCMeasuRecvTime = 0;
}
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
}
}
else //循环发送
{
if ((GetSystemTick() -TCUCommuStatus.DCMeasuSendTime) > 1000)
else
{
measuringReporting20_A();
TCUCommuStatus.DCMeasuSendTime = GetSystemTick();
TCUCommuStatus.DCMeasuRecvTime = 0;
}
}
}
void DCMeasuring_B(void)
{
if (0 == TCUCommuStatus.DCMeasuRecvTime_B) //遥测
{
if ((GetSystemTick() -TCUCommuStatus.DCMeasuSendTime_B) > 2000)
TCUCommuStatus.DCMeasuErrCnt_B++;
if (TCUCommuStatus.DCMeasuErrCnt_B > 5)
{
TCUCommuStatus.DCMeasuErrCnt_B++;
if (TCUCommuStatus.DCMeasuErrCnt_B > 5)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
}
else
{
measuringReporting20_B();
TCUCommuStatus.DCMeasuSendTime_B = GetSystemTick();
TCUCommuStatus.DCMeasuRecvTime_B = 0;
}
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
}
}
else //循环发送
{
if ((GetSystemTick() -TCUCommuStatus.DCMeasuSendTime_B) > 1000)
else
{
measuringReporting20_B();
TCUCommuStatus.DCMeasuSendTime_B = GetSystemTick();
TCUCommuStatus.DCMeasuRecvTime_B = 0;
}
}
}
void ConEMSend(void)
{
static u32 ConEMSendTick = 0;
......@@ -309,254 +264,197 @@ void ConEMSend(void)
void CommutionConfigurationStage(void)
{
static EnumTCUCommStage oldStage;
static u32 VersionRecvTime = 0;
static u32 VersionSendTimes = 0;
if (TCUCommuStatus.CommStage == VersionStage)
{
if (GetSystemTick() -TCUCommuStatus.VersionRecvTime <= 2000) //2S
if(oldStage != VersionStage)
{
if (TCUCommuStatus.VersionSentTime == 0)
{
TCUVersionCheckSent();
TCUCommuStatus.VersionSentTime = GetSystemTick();
}
else if (GetSystemTick() -TCUCommuStatus.VersionSentTime >= 500)
{
TCUVersionCheckSent();
TCUCommuStatus.VersionSentTime = GetSystemTick();
}
VersionRecvTime = 0;
VersionSendTimes = 0;
}
else if (GetSystemTick() -TCUCommuStatus.VersionRecvTime >= 5000)
if (GetSystemTick() - VersionRecvTime >= 500)
{
if (TCUCommuStatus.ChgNum == 2)
VersionSendTimes++;
if(VersionSendTimes > 5000/500)
{
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
if (TCUCommuStatus.ChgNum == 1)
{
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
}
else
{
TCUCommuStatus.ErrData_B.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag_B = 1;
}
TCUCommuStatus.CommStage = HeartStage;
}
else
else
{
TCUCommuStatus.ErrData_B.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag_B = 1;
TCUVersionCheckSent();
}
TCUCommuStatus.CommStage = HeartStage;
}
}
oldStage = TCUCommuStatus.CommStage;
}
void TCUPillarHeartBeat(void)
{
u32 SendTick;
//if (TCUCommuStatus.HeartBeatVaild != CONNECT_NORMAL)
// return;
if (0 == TCUCommuStatus.HeartBeatRecvTime) //初始12s一次
static u32 SendTick = 0;
if ((GetSystemTick() - SendTick) < 1000)
{
if ((GetSystemTick() -TCUCommuStatus.HeartBeatSendTime) > ((u32) TCUCommuParam.HeartTimeout * 1000))
{
TCUCommuStatus.HeartBeatErrCnt++;
if (TCUCommuStatus.HeartBeatErrCnt > TCUCommuParam.HeartErrCntMax)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
}
else
{
TCUHeartBeat_A();
TCUCommuStatus.HeartBeatSendTime = GetSystemTick();
TCUCommuStatus.HeartBeatRecvTime = 0;
}
}
return;
}
else
{ //心跳周期
SendTick = ((u32) TCUCommuParam.HeartPeriod * 1000);
SendTick = GetSystemTick();
if ((GetSystemTick() -TCUCommuStatus.HeartBeatSendTime) > SendTick)
{
TCUHeartBeat_A();
TCUCommuStatus.HeartBeatSendTime = GetSystemTick();
TCUCommuStatus.HeartBeatRecvTime = 0;
}
}
}
TCUHeartBeat_A();
TCUHeartBeat_B();
void TCUPillarHeartBeat_B(void)
{
u32 SendTick;
//if (TCUCommuStatus.HeartBeatVaild != CONNECT_NORMAL)
// return;
TCUCommuStatus.HeartBeatErrCnt++;
/*if (0 == TCUCommuStatus.HeartBeatRecvTime_B) //初始12s一次
if(TCUCommuStatus.HeartBeatErrCnt > 5)
{
if ((GetSystemTick() -TCUCommuStatus.HeartBeatSendTime_B) > ((u32) TCUCommuParam.HeartTimeout * 1000))
{
TCUCommuStatus.HeartBeatErrCnt_B++;
if (TCUCommuStatus.HeartBeatErrCnt_B > TCUCommuParam.HeartErrCntMax)
{
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt_B = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
}
else
{
TCUHeartBeat_B();
TCUCommuStatus.HeartBeatSendTime = GetSystemTick();
TCUCommuStatus.HeartBeatRecvTime = 0;
}
}
}
else */
{ //心跳周期
SendTick = ((u32) TCUCommuParam.HeartPeriod * 1000);
if ((GetSystemTick() -TCUCommuStatus.HeartBeatSendTime_B) > SendTick)
{
TCUHeartBeat_B();
TCUCommuStatus.HeartBeatSendTime_B = GetSystemTick();
TCUCommuStatus.HeartBeatRecvTime_B = 0;
}
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCanInit();
}
}
void CommutionRunStage(void)
{
static EnumTCUCommStage oldStage;
static u32 sendTick = 0;
static u8 sendTimes = 0;
if(oldStage != TCUCommuStatus.CommStage)
{
sendTick = 0;
sendTimes = 0;
}
if ((TCUCommuStatus.CommStage == ChageParamStage))
{
if (GetSystemTick() -TCUCommuStatus.ParamRecvTime <= 2000) //2S参数反馈
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.ParamSentTime == 0)
sendTick = GetSystemTick();
sendTimes++;
if(sendTimes > 2000/500)
{
TCUParamAck();
TCUCommuStatus.ParamSentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.ParamSentTime >= 500)
else
{
TCUParamAck();
TCUCommuStatus.ParamSentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
if ((TCUCommuStatus.CommStage == TimeStage))
{
if (GetSystemTick() -TCUCommuStatus.TimeRecvTime <= 2000) //2S对时
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.TimeSentTime == 0)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUtimeSetAck();
TCUCommuStatus.TimeSentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.TimeSentTime >= 500)
else
{
TCUtimeSetAck();
TCUCommuStatus.TimeSentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
if ((TCUCommuStatus.CommStage == ServiceContralStage))
{
if (GetSystemTick() -TCUCommuStatus.ServiceContralRecvTime <= 2000) //2S
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.ServiceContralSentTime == 0)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
SerConAck();
TCUCommuStatus.ServiceContralSentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.ServiceContralSentTime >= 500)
else
{
SerConAck();
TCUCommuStatus.ServiceContralSentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
if ((TCUCommuStatus.CommStage == ElectLockStage))
{
if (GetSystemTick() -TCUCommuStatus.ElectLockRecvTime <= 2000) //2S
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.ElectLockSentTime == 0)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
ElectControlAck();
TCUCommuStatus.ElectLockSentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.ElectLockSentTime >= 500)
else
{
ElectControlAck();
TCUCommuStatus.ElectLockSentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
if ((TCUCommuStatus.CommStage == PowerControlStage))
{
if (GetSystemTick() -TCUCommuStatus.ElectLockRecvTime <= 2000) //2S
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.PowerControlSentTime == 0)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
PowerControlAck();
TCUCommuStatus.PowerControlSentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.PowerControlSentTime >= 500)
else
{
PowerControlAck();
TCUCommuStatus.PowerControlSentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
if ((TCUCommuStatus.CommStage == ChgInfornQueryStage))
{
if (GetSystemTick() -TCUCommuStatus.ChgInfornQueryRecvTime <= 2000) //2S
if(GetSystemTick() - sendTick >= 500)
{
if (TCUCommuStatus.ChgInfornQuerySentTime == 0)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
ChgInfornQueryAck();
TCUCommuStatus.ChgInfornQuerySentTime = GetSystemTick();
TCUCommuStatus.CommStage = HeartStage;
}
else if (GetSystemTick() -TCUCommuStatus.ChgInfornQuerySentTime >= 500)
else
{
ChgInfornQueryAck();
TCUCommuStatus.ChgInfornQuerySentTime = GetSystemTick();
}
}
else
{
TCUCommuStatus.CommStage = HeartStage;
}
}
oldStage = TCUCommuStatus.CommStage;
}
......@@ -828,8 +726,8 @@ void SendStatus(void)
ChgStutusSendTick = GetSystemTick();
data[0] = 0;
data[1] = ChargeCtrl.CurProcess; //待完善 04/29
TCUSinglePackSendMsg(data, 6, eCmd_startComp, 4,ChargerCont1939Addr);
TCUSinglePackSendMsg(data, 6, eCmd_startComp, 4,ChargerCont1939Addr_B);
TCUSinglePackSendMsg(data, 6, eCmd_status, 4,ChargerCont1939Addr);
TCUSinglePackSendMsg(data, 6, eCmd_status, 4,ChargerCont1939Addr_B);
}
}
......@@ -847,14 +745,13 @@ void TCUWorkProcess(void)
InformationReporting(); //遥信
DCMeasuring_A(); //遥测
DCMeasuring_B(); //遥测
}
void TCULinkProcess(void) //心跳帧处理
{
TCUPillarHeartBeat(); //心跳处理
TCUPillarHeartBeat_B(); //心跳处理
CommutionConfigurationStage(); //配置阶段
CommutionRunStage(); //运行阶段
ConEMSend(); //ab超时发送逻辑
......
......@@ -44,36 +44,20 @@ typedef struct
{
EnumTCUCommStage CommStage;
u8 ChgNum;
u32 VersionRecvTime;
u32 VersionSentTime;
u8 VerChkVaild;
u32 ParamRecvTime;
u32 ParamSentTime;
u8 ParamVaild;
u32 TimeRecvTime;
u32 TimeSentTime;
u32 ServiceContralRecvTime;
u32 ServiceContralSentTime;
u8 ChargingServiceSetValue;//保留下发设置值
u8 ServiceContralVaildValue;//服务控制下发失败原因 0成功
u32 ElectLockRecvTime;
u32 ElectLockSentTime;
u8 ElectLockSetValue;//保留下发设置值
u8 ElectLockVaildValue;//电子锁控制下发失败原因 0成功
u32 PowerControlRecvTime;
u32 PowerControlSentTime;
u8 PowerControltype;
u16 PowerControlParam;
u8 PowerControlVaildValue;//功率调节失败原因
u32 ChgInfornQueryRecvTime;
u32 ChgInfornQuerySentTime;
u8 ConnectFlag;//0 未连接 其他已连接
u8 HeartBeatVaild;//接收心跳有效标志位
u8 HeartBeatErrCnt;
......@@ -81,18 +65,6 @@ typedef struct
u16 HeartBeatNumCnt;
u16 HeartBeatLoseCnt;
u32 HeartBeatSendTime;
u32 HeartBeatSendTime_B;
u32 HeartBeatRecvTime;
u32 HeartBeatRecvTime_B;
u32 DCConInforSendTime;
u32 DCConInforSendTime_B;
u32 DCMeasuSendTime;
u32 DCMeasuSendTime_B;
u32 DCMeasuRecvTime;
u32 DCMeasuRecvTime_B;
u32 DCMeasuErrCnt;
u32 DCMeasuErrCnt_B;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论