This commit is contained in:
sunbeam 2024-03-18 15:19:44 +08:00
parent e3a1f21c5a
commit e3abe9e2f8
9 changed files with 4362 additions and 223 deletions

4105
ECU_APP/OutPut/ECU_APP.S19 Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,14 @@
QualityReport
2024年3月18日 10:48:12
2024年3月18日 15:07:46
------ Start build(ECU_APP, DefaultBuild) ------
------ Build ended(Error:0, Warning:0)(ECU_APP, DefaultBuild) ------
--- SHA1 hash value of output files ---
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\DefaultBuild\ECU_APP.abs: 1364fe9f30dd88b29302dffa4ac466ed522286e5
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\DefaultBuild\ECU_APP.mot: 53be40da0c32e3c1fac40260cb2b7b6207510fb7
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\output\ECU_APP.S19: afdbd4fc6aa5a1753d5fa06de6727b0247d22ab2
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\DefaultBuild\ECU_APP.abs: 70d5881846f9d71244fd72a9362e9cf0501f6302
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\DefaultBuild\ECU_APP.mot: ed69b2f26b6e932f737116f24e29a48e04668356
E:\workspace\CFMOTO\CFMOTOR\ECU_APP\output\ECU_APP.S19: b18178cb3879494d60417c4e92ef5bd0b44446d2
--- System Information ---
@ -36,13 +36,13 @@ E:\workspace\CFMOTO\CFMOTOR\ECU_APP\output\ECU_APP.S19: afdbd4fc6aa5a1753d5fa06d
C:\Program Files (x86)\Renesas Electronics\CS+\CC
*Memory Usage
*Private Working Set
210 MB
206 MB
*Number of GDI Objects
2157
*Number of USER Objects
1213
1107
*Opened Files
5 editors, 5 files, 49 KB
5 editors, 5 files, 50 KB
--- Build Tool Plug-in Information ---
RH850 Build tool CC-RH Plug-in

View File

@ -18,27 +18,27 @@
| 2015-9-1 V1.0 LZY
*****************************************************************************/
/*
TP层理论上 500us APP层其他进程的进行
CAN中断太过频繁会造成时间片的偏移 STmin定为5ms
TP层理论上 500us APP层其他进程的进行
CAN中断太过频繁会造成时间片的偏移 STmin定为5ms
(1000 ms)
() ()
(1000 ms)
(1000 ms)
() ()
(1000 ms)
TP层开始接收新的一帧
TP层开始接收新的一帧
TP层发送报文TP层认为已经响应当前报文( 7878 1S3时间的响应时间 5S)
TP层发送报文TP层认为已经响应当前报文( 7878 1S3时间的响应时间 5S)
S3 ACTIVE INACTIVE
S3 ACTIVE INACTIVE
1S
TP层占用10% APP层占用90% 900ms APP层必须将反馈发送至 TP层 DL = 0
APP层超时TP层将中止该帧报文的响应流程
1S
TP层占用10% APP层占用90% 900ms APP层必须将反馈发送至 TP层 DL = 0
APP层超时TP层将中止该帧报文的响应流程
78 1S3时间的响应时间 5S
78 1S3时间的响应时间 5S
*/
@ -63,18 +63,18 @@ APP
#define DAMING_FALSE DCM_FALSE
#define DAMING_ACTIVE DCM_ACTIVE
#define DAMING_INACTIVE DCM_INACTIVE
static uint8 SaCanTp_u_RxSFBuffer[8]; /*单帧buffer*/
static uint8 SaCanTp_u_RxSFBuffer[8]; /*单帧buffer*/
static TeCanTp_e_TpSts SeCanTp_e_TpSts;/*TP层工作状态*/
static TeCanTp_e_TpSts SeCanTp_e_TpSts;/*TP层工作状态*/
static uint8 SeCanTp_u_BS;
static uint8 SeCanTp_u_STmin;
static uint8 SaCanTp_u_RxMFBuffer[CANTP_MFLEN_MAX];/*多帧接收buffer*/
static uint8 SaCanTp_u_RxMFBuffer[CANTP_MFLEN_MAX];/*多帧接收buffer*/
static uint16 SeCanTp_u_RxLen;
static TeCanTp_e_AddrMethod SeCanTp_e_AddrMethod;/*寻址方式*/
static TeCanTp_e_AddrMethod SeCanTp_e_AddrMethod;/*寻址方式*/
static uint16 SeCanTp_u_RxMFDataCnt;
static uint8 SeCanTp_u_LastSN;
@ -82,7 +82,7 @@ static uint8 SeCanTp_u_LastSN;
static uint16 SeCanTp_u_Timer;
static TeCanTp_e_MFTimerSwitch SeCanTp_e_TimerSwitch;
static TeCanTp_e_TxSts SeCanTp_e_TxSts;/*发送状态*/
static TeCanTp_e_TxSts SeCanTp_e_TxSts;/*发送状态*/
static uint8 SaCanTp_u_TxDataBuffer[CANTP_MFLEN_MAX];
static uint8 SaCanTp_u_TxBuffer[8];
@ -94,7 +94,7 @@ static TeCanTp_e_MFTxSts SeCanTp_e_MFTxSts;
static uint8 SeCanTp_u_MFTxSN;
static uint8 SeCanTp_u_MFTxSpacing;
static uint16 SeCanTp_w_RespTimer; /*反馈计时器*/
static uint16 SeCanTp_w_RespTimer; /*反馈计时器*/
static uint8 SeCanTp_u_RespFlag;
/******************************************************************************
* Description: : Static Function Prototype Declaration
@ -105,19 +105,19 @@ static uint8 SeCanTp_u_RespFlag;
*****************************************************************************/
/******************************************************************************
* :
* :
* : TeCanTp_e_AddrMethod* LeCanTp_p_AddrMethod , Addressing Method
* : TeCanTp_e_AddrMethod* LeCanTp_p_AddrMethod , Addressing Method
uint16* LeCanTp_p_DL , Data Length
uint8* LeCanTp_p_DataAddr array of data pointer
* :
* :
* : get frame data
* : get frame data
* :
* :
* :
* :
*****************************************************************************/
TeCanTp_e_RxBufferSts GetCanTp_e_RxBufferSts(uint8* LeCanTp_p_AddrMethod , uint16* LeCanTp_p_DL , uint8** LeCanTp_p_DataAddr)
{
@ -147,17 +147,17 @@ TeCanTp_e_RxBufferSts GetCanTp_e_RxBufferSts(uint8* LeCanTp_p_AddrMethod , uint1
}
/******************************************************************************
* :
* :
* :
* :
* :
* :
* : CanIf调用 TP数据函数
* : CanIf调用 TP数据函数
* :
* :
* :
* :
*****************************************************************************/
void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
@ -175,15 +175,15 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
{
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*反馈阶段 发送多帧数据*/
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*反馈阶段 发送多帧数据*/
{
if(LeCanTp_u_FrameInfo == 3)/*FC*/
{
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS判断 正常*/
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS判断 正常*/
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_CFGaving;
@ -205,24 +205,24 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_u_STmin = 0;
}
SeCanTp_u_MFTxSpacing = 0;/*开始最小间隔计时*/
SeCanTp_u_MFTxSpacing = 0;/*开始最小间隔计时*/
SeCanTp_u_Timer = 0;
}
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS判断 等待*/
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS判断 等待*/
{
/*等待 清空计时器 再等一个 bs*/
/*等待 清空计时器 再等一个 bs*/
SeCanTp_u_Timer = 0;
}
else
{
/*过载丢帧*/
/*过载丢帧*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
}
}
}
else{/*丢帧*/}
else{/*丢帧*/}
}
else
{
@ -231,7 +231,7 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if((SeCanTp_u_RxLen < 8) && (SeCanTp_u_RxLen > 0))
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
@ -243,15 +243,15 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_w_RespTimer = 1000U;
}
else
{/*丢帧*/}
{/*丢帧*/}
}
else if(LeCanTp_u_FrameInfo == 1)/*FF*/
{
SeCanTp_u_RxLen =(uint16)(((uint16)(LeCanTp_e_CanSduPtr[0] & 0x0f) << 8) + (uint16)LeCanTp_e_CanSduPtr[1]);
if(SeCanTp_u_RxLen > CANTP_MFLEN_MAX) // add for 15765-2-6.5.2.2
{
/*丢帧*/
/*直接回复过载流控帧*/
/*丢帧*/
/*直接回复过载流控帧*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 2;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
@ -267,10 +267,10 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
{
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;
/*获得多帧长度*/
/*获得多帧长度*/
SeCanTp_u_RxMFDataCnt = 0;
/*获得前6个数据*/
/*获得前6个数据*/
for(LeCanTp_u_DataIndex = 2;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
@ -278,7 +278,7 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
SeCanTp_u_LastSN = 1;
/*直接回复流控帧*/
/*直接回复流控帧*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 0;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
@ -290,28 +290,28 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*等待接收后续帧*/
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*等待接收后续帧*/
SeCanTp_e_TimerSwitch = CeCanTp_e_Cr;
SeCanTp_u_Timer = 0;
}
else
{/*丢帧*/}
{/*丢帧*/}
}
else if(LeCanTp_u_FrameInfo == 2)/*CF*/
{
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)
{
/*检验SN*/
/*检验SN*/
SeCanTp_u_Timer = 0;
if((LeCanTp_e_CanSduPtr[0]&0x0F) == (SeCanTp_u_LastSN & 0x0F))
{
/*获得数据*/
/*获得数据*/
SeCanTp_u_LastSN++;
if((LeCanTp_e_CanDlc < 8)&&(LeCanTp_e_CanDlc >0)&&(SeCanTp_u_RxMFDataCnt < (SeCanTp_u_RxLen - LeCanTp_e_CanDlc)))
{
SeCanTp_e_TpSts = CeCanTp_e_Idel; // 错误的DLC
SeCanTp_e_TpSts = CeCanTp_e_Idel; // 错误的DLC
}
else
{
@ -324,7 +324,7 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
else
{
/*数据接收完毕*/
/*数据接收完毕*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
@ -334,7 +334,7 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
if(SeCanTp_u_RxMFDataCnt == SeCanTp_u_RxLen)
{
/*数据接收完毕*/
/*数据接收完毕*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
@ -347,18 +347,18 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
else
{
/*SN错误 丢帧*/
/*SN错误 丢帧*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
}
else
{
/*当前不是 多帧接受后续帧阶段 丢帧*/
/*当前不是 多帧接受后续帧阶段 丢帧*/
}
}
else
{
/*不接受 流控帧 与 其他状态帧*/
/*不接受 流控帧 与 其他状态帧*/
}
}
}
@ -369,17 +369,17 @@ void RxIndicationCanTP_AddrPhy_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
/******************************************************************************
* :
* :
* :
* :
* :
* :
* : CanIf调用 TP数据函数
* : CanIf调用 TP数据函数
* :
* :
* :
* :
*****************************************************************************/
#if (CANTP_ADDRFUNC_MF_FORBID == DAMING_TRUE)
void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
@ -397,15 +397,15 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
{
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*反馈阶段 发送多帧数据*/
if((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting))/*反馈阶段 发送多帧数据*/
{
if(LeCanTp_u_FrameInfo == 3)/*FC*/
{
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS判断 正常*/
if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x00)/*FS判断 正常*/
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_CFGaving;
@ -427,16 +427,16 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_u_STmin = 0;
}
SeCanTp_u_MFTxSpacing = 0;/*开始最小间隔计时*/
SeCanTp_u_MFTxSpacing = 0;/*开始最小间隔计时*/
}
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS判断 等待*/
else if((LeCanTp_e_CanSduPtr[0]&0x0F) == 0x01)/*FS判断 等待*/
{
/*等待 清空计时器 再等一个 bs*/
/*等待 清空计时器 再等一个 bs*/
SeCanTp_u_Timer = 0;
}
else
{
/*过载丢帧*/
/*过载丢帧*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
@ -451,7 +451,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if((SeCanTp_u_RxLen < 8) && (SeCanTp_u_RxLen > 0))
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
@ -463,7 +463,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_w_RespTimer = 1000U;
}
else
{/*丢帧*/}
{/*丢帧*/}
}
else if(LeCanTp_u_FrameInfo == 1)/*FF*/
@ -474,11 +474,11 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
{
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
/*获得多帧长度*/
/*获得多帧长度*/
//SeCanTp_u_RxLen =(uint16)(((uint16)(LeCanTp_e_CanSduPtr[0] & 0x0f) << 8) + (uint16)LeCanTp_e_CanSduPtr[1]);
SeCanTp_u_RxMFDataCnt = 0;
/*获得前6个数据*/
/*获得前6个数据*/
for(LeCanTp_u_DataIndex = 2;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
{
SaCanTp_u_RxMFBuffer[SeCanTp_u_RxMFDataCnt] = LeCanTp_e_CanSduPtr[LeCanTp_u_DataIndex];
@ -486,29 +486,29 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
SeCanTp_u_LastSN = 1;
/*直接回复流控帧*/
/*直接回复流控帧*/
SaCanTp_u_TxBuffer[0] = 0x30;
SaCanTp_u_TxBuffer[1] = 0;
SaCanTp_u_TxBuffer[2] = CANTP_RX_STMIN;
TransmitCanIf_Buffer(CANTP_RESP_CANID,8,SaCanTp_u_TxBuffer);
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*等待接收后续帧*/
SeCanTp_e_TpSts = CeCanTp_e_MF_CFTakein;/*等待接收后续帧*/
SeCanTp_e_TimerSwitch = CeCanTp_e_Cr;
SeCanTp_u_Timer = 0;
}
else
{/*丢帧*/}
{/*丢帧*/}
}
else if(LeCanTp_u_FrameInfo == 2)/*CF*/
{
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)
{
/*检验SN*/
/*检验SN*/
if((LeCanTp_e_CanSduPtr[0]&0x0F) == ((SeCanTp_u_LastSN+1)&0x0F))
{
/*获得数据*/
/*获得数据*/
SeCanTp_u_LastSN++;
for(LeCanTp_u_DataIndex = 1;LeCanTp_u_DataIndex < 8;LeCanTp_u_DataIndex++)
@ -520,7 +520,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
else
{
/*数据接收完毕*/
/*数据接收完毕*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
@ -530,7 +530,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
if(SeCanTp_u_RxMFDataCnt == SeCanTp_u_RxLen)
{
/*数据接收完毕*/
/*数据接收完毕*/
SeCanTp_e_TpSts = CeCanTp_e_MF_Get;
SeCanTp_u_RespFlag = DAMING_TRUE;
@ -541,18 +541,18 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
}
else
{
/*SN错误 丢帧*/
/*SN错误 丢帧*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
}
else
{
/*当前不是 多帧接受后续帧阶段 丢帧*/
/*当前不是 多帧接受后续帧阶段 丢帧*/
}
}
else
{
/*不接受 流控帧 与 其他状态帧*/
/*不接受 流控帧 与 其他状态帧*/
}
}
}
@ -575,11 +575,11 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
{
LeCanTp_u_FrameInfo = LeCanTp_e_CanSduPtr[0] >> 4;
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
if((SeCanTp_e_TpSts == CeCanTp_e_SF_Get)/*已接收到单帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_MF_Get)/*已接收到多帧*/
||(SeCanTp_e_TpSts == CeCanTp_e_Answer))/*当前正在响应*/
{
/*丢帧*/
/*丢帧*/
}
else
{
@ -588,7 +588,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_u_RxLen = LeCanTp_e_CanSduPtr[0]&0x0f;
if(SeCanTp_u_RxLen < 8)
{
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_TpSts = CeCanTp_e_SF_Get;/*单帧接收*/
SeCanTp_e_AddrMethod = CeCanTp_e_Functional;
for(LeCanTp_u_DataIndex = 0;LeCanTp_u_DataIndex < SeCanTp_u_RxLen;LeCanTp_u_DataIndex++)
@ -600,7 +600,7 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
SeCanTp_w_RespTimer = 1000U;
}
else
{/*丢帧*/}
{/*丢帧*/}
}
}
}
@ -610,24 +610,24 @@ void RxIndicationCanTP_AddrFunc_Message(CanIf_HwHandleType LeCanTp_e_Hrh,
#endif
/******************************************************************************
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
*****************************************************************************/
TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p_DataAddr[])
{
TeCanTp_e_TxResult LeCanTp_e_TxResult;
uint16 LeCanTp_s_Index;
/*只有在反馈阶段 可以发送数据*/
/*只有在反馈阶段 可以发送数据*/
if ((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_TxSts == CeCanTp_e_Tx_Idle))
{
SeCanTp_u_RespFlag = DAMING_FALSE;
@ -635,12 +635,12 @@ TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p
if(LeCanTp_p_DL == 0)
{
/*该报文无反馈*/
/*该报文无反馈*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
else if(LeCanTp_p_DL < 8)
{
/*单帧 直接发送*/
/*单帧 直接发送*/
SaCanTp_u_TxBuffer[0] = (uint8)LeCanTp_p_DL;
for(LeCanTp_s_Index = 1; LeCanTp_s_Index < 8; LeCanTp_s_Index++)
@ -659,10 +659,10 @@ TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p
}
else
{
/*多帧报文*/
/*多帧报文*/
SeCanTp_e_TxSts = CeCanTp_e_Tx_Busy;
/*数据提取*/
/*数据提取*/
for(LeCanTp_s_Index = 0; LeCanTp_s_Index < LeCanTp_p_DL; LeCanTp_s_Index++)
{
SaCanTp_u_TxDataBuffer[LeCanTp_s_Index] = LeCanTp_p_DataAddr[LeCanTp_s_Index];
@ -671,7 +671,7 @@ TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p
SeCanTp_u_TxLen = LeCanTp_p_DL;
/*发送首帧*/
/*发送首帧*/
SaCanTp_u_TxBuffer[0] = 0x10 + (uint8)(LeCanTp_p_DL >> 8);
SaCanTp_u_TxBuffer[1] = (uint8)(LeCanTp_p_DL & 0x00ff);
@ -700,29 +700,29 @@ TeCanTp_e_TxResult SetCanTp_TxBuffer(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p
}
/******************************************************************************
* :
* :
* :
* :
* :
* :
* : 78
* : 78
* :
* :
* :
* :
*****************************************************************************/
TeCanTp_e_TxResult SetCanTp_Tx_78Neg(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p_DataAddr[])
{
TeCanTp_e_TxResult LeCanTp_e_TxResult;
uint8 LeCanTp_u_Index;
/*只有在反馈阶段 可以发送数据*/
/*只有在反馈阶段 可以发送数据*/
if ((SeCanTp_e_TpSts == CeCanTp_e_Answer) && (SeCanTp_e_TxSts == CeCanTp_e_Tx_Idle))
{
if(LeCanTp_p_DL < 8)
{
/*单帧 直接发送*/
/*单帧 直接发送*/
SaCanTp_u_TxBuffer[0] = (uint8)LeCanTp_p_DL;
for(LeCanTp_u_Index = 1; LeCanTp_u_Index < 8; LeCanTp_u_Index++)
@ -756,17 +756,17 @@ TeCanTp_e_TxResult SetCanTp_Tx_78Neg(uint16 LeCanTp_p_DL , const uint8 LeCanTp_p
/******************************************************************************
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
*****************************************************************************/
void InitCanTp_Parameter(void)
{
@ -774,20 +774,20 @@ void InitCanTp_Parameter(void)
for(LeCanTp_u_InitIndex = 0; LeCanTp_u_InitIndex<8 ; LeCanTp_u_InitIndex++)
{
SaCanTp_u_RxSFBuffer[LeCanTp_u_InitIndex] = 0;/*单帧buffer*/
SaCanTp_u_RxSFBuffer[LeCanTp_u_InitIndex] = 0;/*单帧buffer*/
SaCanTp_u_TxBuffer[LeCanTp_u_InitIndex] = 0;
SaCanTp_u_TxDataBuffer[LeCanTp_u_InitIndex] = 0;
SaCanTp_u_RxMFBuffer[LeCanTp_u_InitIndex] = 0;/*多帧接收buffer*/
SaCanTp_u_RxMFBuffer[LeCanTp_u_InitIndex] = 0;/*多帧接收buffer*/
}
SeCanTp_e_TpSts = CeCanTp_e_Idel;/*TP层工作状态*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;/*TP层工作状态*/
SeCanTp_u_BS = 0;
SeCanTp_u_STmin = 10;
SeCanTp_u_RxLen = 0;
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;/*寻址方式*/
SeCanTp_e_AddrMethod = CeCanTp_e_Physical;/*寻址方式*/
SeCanTp_u_RxMFDataCnt = 0;
SeCanTp_u_LastSN = 0;
@ -795,7 +795,7 @@ void InitCanTp_Parameter(void)
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = 0;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;/*发送状态*/
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;/*发送状态*/
SeCanTp_u_TxLen = 0;
@ -805,7 +805,7 @@ void InitCanTp_Parameter(void)
SeCanTp_u_MFTxSN = 0;
SeCanTp_u_MFTxSpacing = 0;
SeCanTp_w_RespTimer = 1000U; /*反馈计时器*/
SeCanTp_w_RespTimer = 1000U; /*反馈计时器*/
SeCanTp_u_RespFlag = DAMING_FALSE;
}
@ -813,29 +813,29 @@ void InitCanTp_Parameter(void)
/******************************************************************************
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
* :
*****************************************************************************/
void MngCanTp_MainFunction(void)
{
uint8 LeCanTp_u_Index;
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)/*超时*/
if(SeCanTp_e_TpSts == CeCanTp_e_MF_CFTakein)/*超时*/
{
if(SeCanTp_e_TimerSwitch == CeCanTp_e_Cr)
{
if(SeCanTp_u_Timer > CANTP_CR_TIMEOUT)
{
/*超时*/
/*超时*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
}
else
@ -854,11 +854,11 @@ void MngCanTp_MainFunction(void)
}
if(SeCanTp_u_RespFlag == DAMING_TRUE)/*APP反馈超时*/
if(SeCanTp_u_RespFlag == DAMING_TRUE)/*APP反馈超时*/
{
if(SeCanTp_w_RespTimer > CANTP_APP_RESP_78NEG)
{
/*超时*/
/*超时*/
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_u_RespFlag = DAMING_FALSE;
@ -877,13 +877,13 @@ void MngCanTp_MainFunction(void)
if(SeCanTp_e_TpSts == CeCanTp_e_Answer)
{
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting)/*FC等待超时*/
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_FCWaiting)/*FC等待超时*/
{
if(SeCanTp_e_TimerSwitch == CeCanTp_e_Bs)
{
if(SeCanTp_u_Timer > CANTP_BS_TIMEOUT)
{
/*超时*/
/*超时*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_Idel;
SeCanTp_e_TpSts = CeCanTp_e_Idel;
SeCanTp_e_TxSts = CeCanTp_e_Tx_Idle;
@ -902,7 +902,7 @@ void MngCanTp_MainFunction(void)
else
{}
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_CFGaving)/*发送*/
if(SeCanTp_e_MFTxSts == CeCanTp_e_TX_CFGaving)/*发送*/
{
/*CF*/
SeCanTp_u_MFTxSpacing++;
@ -911,7 +911,7 @@ void MngCanTp_MainFunction(void)
{
if(SeCanTp_u_MFTxSpacing > SeCanTp_u_STmin)
{
SeCanTp_u_MFTxSpacing = 0;//修复stmin少1ms
SeCanTp_u_MFTxSpacing = 0;//修复stmin少1ms
if(SeCanTp_u_TxMFIndex < (SeCanTp_u_TxLen-7))
{
SaCanTp_u_TxBuffer[0] = 0x20 + SeCanTp_u_MFTxSN;
@ -927,7 +927,7 @@ void MngCanTp_MainFunction(void)
if(SeCanTp_u_BS == 1u)
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*等流控帧*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*等流控帧*/
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
}
@ -938,7 +938,7 @@ void MngCanTp_MainFunction(void)
}
else
{
/*最后一帧*/
/*最后一帧*/
uint8 LeCanTp_u_Cnt = SeCanTp_u_TxLen - SeCanTp_u_TxMFIndex;
SaCanTp_u_TxBuffer[0] = 0x20 + SeCanTp_u_MFTxSN;
@ -966,7 +966,7 @@ void MngCanTp_MainFunction(void)
}
else
{
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*等流控帧*/
SeCanTp_e_MFTxSts = CeCanTp_e_TX_FCWaiting;/*等流控帧*/
SeCanTp_u_Timer = 0;
SeCanTp_e_TimerSwitch = CeCanTp_e_Bs;
}
@ -983,18 +983,18 @@ void MngCanTp_MainFunction(void)
}
/******************************************************************************
* :
* :
* :
* :
* :
* :
* : S3
S3 DAMING_ACTIVE DAMING_INACTIVE
* : S3
S3 DAMING_ACTIVE DAMING_INACTIVE
* :
* :
* :
* :
*****************************************************************************/
uint8 GetCanTp_u_S3Sts(void)
{

View File

@ -12,7 +12,9 @@
//#include "eel.h"
//#include "r_fdl_types.h"
#include "Dcm_extern.h"
static uint8 ModeOverVoltCnt,ModeUderVoltCnt;
static uint8 PowerOverVoltCnt,PowerUderVoltCnt;
extern uint16_t ECM_lost_count,GBC_lost_count;
const TsDcm_h_DtcGroupType CaDcm_u_DtcTable[DCM_SUPDTC_COUNT]={
{ 0,0x91,0x17,0x16},//系统供电电压过低
{ 1,0x91,0x17,0x17},//系统供电电压过高
@ -89,8 +91,9 @@ void DtcStutasInit(void)
void DtcInit(void)
{
tDiagStart = 1500;
ECM_lost_count = 500;
GBC_lost_count = 500;
tDiagStartVolt = 500;
DtcStutasInit();
}
@ -189,7 +192,7 @@ static void WriteDtcSnapshot(uint8 DtcIndex)
DF_Write(&temp,GetIndexNumber(DtcIndex+8),2);
}
}
extern uint16_t ECM_lost_count,GBC_lost_count;
void CommunicationLostDetected(void)
{
if (ECM_lost_count > 0)
@ -208,13 +211,29 @@ void ClearDtcStutas(uint8 DtcIndex)
// DtcStutas[DtcIndex].DtcStutas &= ~(TestNotCompletedThisOperationCycle | TestFailed); //2017/7/2 11:52:29 del
DtcStutas[DtcIndex].DtcStutas &= ~TestFailed; //2017/7/2 11:52:56 spark add
}
extern uint8_t testdata[8];
uint16_t busoffreccnt = 0;
static void CanDTC_LostCommDetected(void)
{
/*
testdata[4] = ChkNetDiagCondition();
testdata[5] = GetVoltage(KL30_VOLTAGE) > 160;
testdata[6] = GetVoltage(KL30_VOLTAGE) < 90;
testdata[7] = GetCanBusOffErr();
*/
if (busoffreccnt > 0)
{
busoffreccnt--;
return;
}
if(ChkNetDiagCondition() == 0) return;
if(GetVoltage(KL30_VOLTAGE) > 160)return;
if(GetVoltage(KL30_VOLTAGE) < 90)return;
if (0 != GetCanBusOffErr())return;
if (PowerOverVoltCnt > 0)return;
if (PowerUderVoltCnt > 0)return;
//if(GetVoltage(KL30_VOLTAGE) > 160)return;
//if(GetVoltage(KL30_VOLTAGE) < 90)return;
//if (0 != GetCanBusOffErr())return;
CommunicationLostDetected();
if (ECM_lost_count == 0)
@ -278,7 +297,7 @@ static void CanDTC_AcBusOffDetected(void)
/**************************************************************************************/
static void PowerVoltageChk(void)
{
static uint8 PowerOverVoltCnt,PowerUderVoltCnt;
if(GetVoltage(KL30_VOLTAGE) > 160)
{
if(PowerOverVoltCnt < 50) /* 50*40ms = 2s */
@ -310,7 +329,7 @@ static void PowerVoltageChk(void)
{
if(PowerUderVoltCnt > 0){
PowerUderVoltCnt--;
if(PowerUderVoltCnt>13){ /* 13*40ms = 1.48s */
if(PowerUderVoltCnt>13){ /* 13*40ms = 520ms */
PowerUderVoltCnt = 12;
}
}
@ -379,7 +398,7 @@ static void TempMotorFeedbackChk(void)
/**************************************************************************************/
static void ModeMotorFeedbackChk(void)
{
static uint8 ModeOverVoltCnt,ModeUderVoltCnt;
if(GetVoltage(MODE_MOTOR) >= 49)
{
if(ModeOverVoltCnt < 50) /* 50*40ms = 2s */

View File

@ -2128,7 +2128,7 @@ TeDcm_h_ResultType MngDcm_TransmitExitService(void)
SeDcm_u_RidFF01Sts = CeDcm_e_RidStop;
RidFF02RunSts = Rid_Idle;
//DtcInit();
DtcInit();
}
/******************************************************************************

View File

@ -86,7 +86,7 @@ unsigned char GetVoltage(unsigned char ch)
switch (ch)
{
case KL30_VOLTAGE:
case 0:
if (SupplyVoltage > 0xff)
{
return 0xff;
@ -206,7 +206,27 @@ void WriteIoParameter(unsigned char p,unsigned char data)
/************************************************************************************/
unsigned char GetIgnVoltStatus(void)
{
if (SupplyVoltage > 160 || SupplyVoltage < 90)
static uint8 ignstateh = 0,ignstatel=0;
if (SupplyVoltage > 160)
{
ignstateh = 1;
}
else if (SupplyVoltage < 150)
{
ignstateh = 0;
}
if (SupplyVoltage < 90)
{
ignstatel = 1;
}
else if (SupplyVoltage > 100)
{
ignstatel = 0;
}
if (ignstatel == 1 || ignstateh == 1)
{
return 1;
}

View File

@ -16,13 +16,6 @@
#define IO_K30 7
#define EVA_SENSOR 0
#define OUTSIDE_SENSOR 1
#define INSIDE_SENSOR 2
#define KL30_VOLTAGE 3
#define TEMP_MOTOR 4
#define MODE_MOTOR 5
#define REC_MOTOR 6
@ -57,10 +50,10 @@ extern IO_parameter_t io_parameter[8];
/************************/
// DCM <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
/************************/
//占쏙옙矩沼걜J?
//<EFBFBD><EFBFBD>ϻỰģ<EFBFBD>?
//#define DCM_DEFAULT_SESSION 0x01 /*Ĭ<><C4AC>ģʽ*/
//#define DCM_PROGRAMME_SESSION 0x02 /*占쏙옙占식J?*/
//#define DCM_PROGRAMME_SESSION 0x02 /*<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>?*/
//#define DCM_EXTEND_SESSION 0x04 /*<2A><>չģʽ*/
extern uint8 MngDcm_GetDiagnosticSession(void);
@ -79,11 +72,11 @@ extern uint8 GetNetworkMsgSts(void);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? ch : /
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? ch : /
// 0: KL30<33><30>ѹ /
// 1: 占쏙옙軻逃占쏙옙占승똑듸옙占쌘듸옙占쏙옙占쏙옙占쏙옙占싼? /
// 1: <EFBFBD><EFBFBD>ʻԱ<EFBFBD><EFBFBD><EFBFBD>¶ȵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? /
// 2: <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ /
// 3: 琦占쏙옙占쏙옙占신듸옙占쌘듸옙占쏙옙占쏙옙占쏙옙占싼? /
// 3: ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? /
// 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ /
// /
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> /
@ -93,41 +86,41 @@ extern uint8 GetNetworkMsgSts(void);
extern unsigned char GetVoltage(unsigned char ch);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? motor : /
// 1: 占쏙옙軻逃占쏙옙占승똑듸옙占쌘듸옙占? /
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? motor : /
// 1: <EFBFBD><EFBFBD>ʻԱ<EFBFBD><EFBFBD><EFBFBD>¶ȵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>? /
// 2: <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /
// 3: 琦占쏙옙占쏙옙占신듸옙占쌘듸옙占? /
// 3: ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>? /
// /
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> /
// 0: 占쏙옙占쏙옙占쏙옙占? 1占쏙옙占쏙옙占쏙옙占쌓? /
// 0: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? /
// /
************************************************************************************/
extern unsigned char GetMotorLockStatus(unsigned char motor);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? p : /
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? p : /
// 0: TEMP <09><>ʻԱ<CABB><D4B1><EFBFBD>¶ȷ<C2B6><C8B7><EFBFBD>λ<EFBFBD><CEBB> /
// 1: REC <09><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ /
// 2: FAN 占식뤄옙占쏙옙占싸? /
// 2: FAN <EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? /
// 3: MODE ģʽ<C4A3><CABD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> /
// 4: DEFROST <09><>˪<EFBFBD><CBAA><EFBFBD><EFBFBD> /
// 5: REARDEF 占쏙옙占싯?占쏙옙占쏙옙 /
// 5: REARDEF <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD> /
// 6: AC A/C<><43><EFBFBD><EFBFBD><E4B0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /
// 7: K30 ECU Supplier voltage /
// /
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> /
// 0: 占쏙옙壇占쏙옙data,占쏙옙占쏙옙占?22占쏙옙2F占쏙옙占쏙옙 /
// 0: <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>data,<2C><><EFBFBD><EFBFBD><EFBFBD>?22<32><32>2F<32><46><EFBFBD><EFBFBD> /
************************************************************************************/
extern unsigned char GetIoParameter(unsigned char p);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? p : /
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? p : /
// 0: TEMP <09><>ʻԱ<CABB><D4B1><EFBFBD>¶ȷ<C2B6><C8B7><EFBFBD>λ<EFBFBD><CEBB> /
// 1: REC <09><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ /
// 2: FAN 占식뤄옙占쏙옙占싸? /
// 2: FAN <EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? /
// 3: MODE ģʽ<C4A3><CABD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> /
// 4: DEFROST <09><>Ч /
// 5: REARDEF 占쏙옙占싯?占쏙옙占쏙옙 /
// 5: REARDEF <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD> /
// 6: AC <09><>Ч /
// 7: K30 <09><>Ч /
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> /
@ -136,7 +129,7 @@ extern unsigned char GetIoParameter(unsigned char p);
extern void WriteIoParameter(unsigned char p,unsigned char data);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? p : /
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? p : /
// /
// /
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> /
@ -146,9 +139,9 @@ extern void WriteIoParameter(unsigned char p,unsigned char data);
extern unsigned char GetIgnVoltStatus(void);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? ID : CAN ID //
// 占쏙옙占쏙옙占쏙옙占? Dlc : CAN 占쏙옙占쏙옙占쏙옙占쌥놂옙占쏙옙 //
// 占쏙옙占쏙옙占쏙옙占? *Data : 寧占쏙옙 CAN 占쏙옙占쏙옙占쏙옙占쌥삼옙占쏙옙占쏙옙占쏙옙寧占쏙옙 //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? ID : CAN ID //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? Dlc : CAN <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? *Data : ָ<><D6B8> CAN <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
// 0<><30> <20><><EFBFBD>ͳɹ<CDB3> <20><>0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7> //
@ -156,19 +149,19 @@ extern unsigned char GetIgnVoltStatus(void);
extern unsigned char TransmitCAN_Message(unsigned int ID,unsigned char Dlc,unsigned char *Data);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? write_buf : 寧占쏙옙 占쏙옙狼畇占쏙옙占쏙옙占쌥삼옙占쏙옙占쏙옙占식듸옙囹 //
// 占쏙옙占쏙옙占쏙옙占? data_num : 占쏙옙占쌥댐옙占쏙옙 //
// 占쏙옙占쏙옙占쏙옙占? len : 畇占쏙옙占쏙옙占쌥놂옙占쏙옙 //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? write_buf : ָ<><D6B8> <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? data_num : <09><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? len : д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
// 0占쏙옙 畇占쏙옙<EC8F99>占? 占쏙옙0 占쏙옙畇占쏙옙呵占쏙옙 //
// 0<EFBFBD><EFBFBD> д<><D0B4>ɹ<EFBFBD>? <20><>0 <20><>д<EFBFBD><D0B4>ʧ<EFBFBD><CAA7> //
************************************************************************************/
extern unsigned char DF_Write(unsigned char* write_buf,unsigned char data_num,unsigned char len);
/************************************************************************************
// 占쏙옙占쏙옙占쏙옙占? read_buf : 寧占쏙옙占싫∽옙占쏙옙莩占쏙옙占식삼옙占쏙옙占쏙옙占식듸옙囹 //
// 占쏙옙占쏙옙占쏙옙占? data_num : 占쏙옙占쌥댐옙占쏙옙 //
// 占쏙옙占쏙옙占쏙옙占? len : 占쏙옙혤占쏙옙占쌥놂옙占쏙옙 //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? read_buf : ָ<><D6B8><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? data_num : <09><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? len : <09><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
// 0<><30> <20><>ȡ<EFBFBD>ɹ<EFBFBD> <20><>0 <20><><EFBFBD><EFBFBD>ȡʧ<C8A1><CAA7> //
@ -184,7 +177,7 @@ extern uint32 GetTimerCnt(void);
/************************************************************************************
// <20><>ȡdata Flash<73><68><EFBFBD>ݴ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
// 占쏙옙占쏙옙占쏙옙占? code : //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? code : //
// 0 : <20><>ȡAPP<50>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
// 1 : <20><>ȡ2E<32><45><EFBFBD><EFBFBD>0xF110<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
// 2 : <20><>ȡ2E<32><45><EFBFBD><EFBFBD>0xF190<39><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
@ -216,7 +209,7 @@ extern unsigned char GetIndexNumber(unsigned char code);
/************************************************************************************
// <20><>ȡACӲ<43><D3B2><EFBFBD>汾 //
// 占쏙옙占쏙옙占쏙옙占? hdv : //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? hdv : //
// ָ<><D6B8><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
@ -227,7 +220,7 @@ extern void GetHardwareVersion(unsigned char* hdv);
/************************************************************************************
// <20><>ȡAC<41><43><EFBFBD><EFBFBD><EFBFBD>汾 //
// 占쏙옙占쏙옙占쏙옙占? swv : //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? swv : //
// ָ<><D6B8><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
@ -239,7 +232,7 @@ extern void GetSoftwareVersion(unsigned char* swv);
/************************************************************************************
// <20><>ȡAC<41><43>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>汾 //
// 占쏙옙占쏙옙占쏙옙占? swv : //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? swv : //
// ָ<><D6B8><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> //
@ -253,7 +246,7 @@ extern void GetSupplierSoftwareVersion(unsigned char* supswv);
/************************************************************************************
// <20><>ȡAC<41><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //
// 占쏙옙占쏙옙占쏙옙占? *date : //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? *date : //
// data[0] = YEAR //
// data[1] = MONTH //
// data[0] = DAY //
@ -266,7 +259,7 @@ extern void GetManufacturingDate(unsigned char* date);
/************************************************************************************
// <20><>ȡCan<61><6E><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>״̬ //
// 占쏙옙占쏙옙占쏙옙占? 占쏙옙 //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20><> //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> Can<61><6E><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>״̬ //
// //
@ -275,20 +268,20 @@ extern void GetManufacturingDate(unsigned char* date);
extern unsigned char GetCanBusOffErr(void);
/************************************************************************************
// 占쏙옙혤占쏙옙袈占심뱄옙占쏙옙甄占쏙옙占? //
// 占쏙옙占쏙옙占쏙옙占? //
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʷ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>? //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? //
// //
// 占쏙옙占쏙옙令占쏙옙 占쏙옙袈占심뱄옙占쏙옙甄占쏙옙占? //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <20><>ʷ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>̴<EFBFBD><CCB4><EFBFBD>? //
// //
// //
************************************************************************************/
extern unsigned char GetProgrammingCounter(void);
/************************************************************************************
// 占쏙옙혤占쏙옙袈占쏙옙甄占쏙옙占? //
// 占쏙옙占쏙옙占쏙옙占? //
// <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD>? //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? //
// //
// 占쏙옙占쏙옙令占쏙옙 占쏙옙袈占쏙옙甄占쏙옙占? //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <20><>ʷ<EFBFBD><CAB7>̴<EFBFBD><CCB4><EFBFBD>? //
// //
// //
************************************************************************************/
@ -296,7 +289,7 @@ extern unsigned char GetProgrammingAttempCounter(void);
/************************************************************************************
// <20><><EFBFBD>DTC<54><43><EFBFBD><EFBFBD> //
// 占쏙옙占쏙옙占쏙옙占? //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> ״̬ //
// //
@ -308,7 +301,7 @@ extern unsigned char Clear_DTC_Data(void);
/************************************************************************************
// <20><>ȡBCM<43>ڵ㶪ʧ״̬ //
// 占쏙옙占쏙옙占쏙옙占? 占쏙옙 //
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20><> //
// //
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5> BCM<43>ڵ㶪ʧ״̬ //
// //

View File

@ -530,7 +530,7 @@ uint8_t checkExitBusOff(void)
#define FAST_BUSOFF_THRESHOULD 49 // 50MS
#define SLOW_BUSOFF_THRESHOULD 199 // 200MS
extern uint16_t busoffreccnt;
void BusOff_Recovery(void);
#define BUSOFF_INIT 0
#define BUSOFF_IDLE 1
@ -552,6 +552,7 @@ void BusOff_Detect(void)
case BUSOFF_IDLE:
if (checkBusOff())
{
busoffreccnt = 1500;
BusOff_flag = 1;
netState = BUSOFF_WAIT;
if (ucBusOffModeState < 5)
@ -613,7 +614,7 @@ void IGN_Voltage_Detect(void)
{
uint32_t adval;
adval = getAdval(ADCH_IGN);
SupplyVoltage = (adval*57*5)>>10 + 7;
SupplyVoltage = ((adval*57*5)>>10) + 7;
if (adval <= 305 )
{
IGN_Voltage_error_count++;

View File

@ -69,22 +69,23 @@ void CAN_TX_MESSAGE_INIT(void)
TxCanMessage.LBL = 0; /* Label Data */
TxCanMessage.TS = 0; /* Timestamp Data */
Can_Msg_Change_Bcm();
GBC_lost_count = 1000;
ECM_lost_count = 1000;
//GBC_lost_count = 1000;
//ECM_lost_count = 1000;
}
//extern uint8_t flagOverCurrentKB,flagOverCurrentZY;
uint8_t txbuf1[8],txbuf2[8],txbuf3[8];
extern uint16_t SupplyVoltage;
uint8_t testdata[8] = {0};
void TxTestMsg(void)
{
uint8_t testdata[8] = {0};
//uint8_t testdata[8] = {0};
if ((App28sTxRxStatus & DCM28S_MASK_TX_DISABLE) == 0)
{
return;
}
testdata[0] = SupplyVoltage>>8;
testdata[1] = SupplyVoltage;
testdata[1] = SupplyVoltage;//SupplyVoltage;
testdata[2] = ECM_lost_count>0?1:0;
testdata[3] = GBC_lost_count>0?1:0;
TransmitCAN_Message(0x333,8,testdata);