修改暗文码,2x输出校验帧拼接双CPU的CRC的2取操作修改从函数PFM_OutputProc修改到s_2x2OutputCheckFrame_Pack

This commit is contained in:
lh
2026-05-27 17:48:46 +08:00
parent 520c991568
commit 099fa5a712
2 changed files with 15 additions and 12 deletions
+5 -2
View File
@@ -718,8 +718,6 @@ void PFM_OutputProc(void)
if (0x55u == g_PFM_Cfg.M_2x2_Enable)
{
/*- 输出阶段2x2处理 */
ret = SFM_2oo2_Exchange_Currency(check_2x2_Buf, check_2x2_Len, &check_2x2_Buf[check_2x2_Len], sizeof(check_2x2_Buf) - check_2x2_Len, ENUM_2oo2_OUTPUT_EX);
check_2x2_Len += ret;
SFM_2x2_OutputProc(check_2x2_Buf, check_2x2_Len);
}
else
@@ -1021,6 +1019,7 @@ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSi
CM_UINT32 len = 0u; /* 输出跟随报文长度 */
CM_UINT32 crc = 0u; /* 输出跟随报文CRC */
CM_UINT32 sysCyc = SFM_2x2_GetSysCount(); /* 系统周期号 */
CM_UINT32 peerLen = 0u; /* 邻机输出校验报文长度 */
/*- 入参检查*/
CM_ASSERT(((4 + (g_2x2oo2_data_num * 8)) <= (CM_INT32)BufSize) && (NULL != buf), IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_1);
@@ -1045,6 +1044,10 @@ static CM_INT32 s_2x2OutputCheckFrame_Pack(OUT CM_UINT8 *buf, IN CM_UINT32 BufSi
/*二取标志未使能*/
}
}
peerLen = SFM_2oo2_Exchange_Currency(buf, i, &buf[i], BufSize - i, ENUM_2oo2_OUTPUT_EX);
CM_ASSERT(peerLen == i, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_16, TSCP_DARK_ASSERT_17);
i += peerLen;
/*- 返回输出校验报文长度 */
return i;
+10 -10
View File
@@ -4173,12 +4173,12 @@ static void s_2x2_BaseFollow_2oo2Check_Send(void)
CM_LongToChar(crc, mine_buf + 4u);
ret = SFM_2oo2_Exchange_Currency(mine_buf, 8u, peer_buf, 8u, ENUM_2oo2_INPUT_EX);
/*- 计算对机跟随数据的CRC值 */
CM_RE_ASSERT(ret == 8, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_1);
CM_RE_ASSERT(ret == 8, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_1);
/*- 比较本机和对机跟随数据的CRC值 */
if(0 != CM_Memcmp(mine_buf, peer_buf, (CM_SIZE_T)8u))
{
MSCP_LOG_DATALEN(g_TxBaseFollow, g_TxBaseFollow_len, "PFM_InputProc g_TxBaseFollow_len");
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_19, TSCP_DARK_ASSERT_2);
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_2);
}
/*- 比较成功,填入CRC后发送 */
if(g_TxBaseFollow_len <= (sizeof(g_TxBaseFollow) - 4u))
@@ -4225,7 +4225,7 @@ static void s_2x2_AppFollow_SyncCheck(void)
{
MSCP_LOG_MSG("APPFOLLOW CRC cmp is fail 1\n");
s_2x2_Ctrl.AppFollowCmpFlag = 1u;
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1);
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_24, TSCP_DARK_ASSERT_1);
}
}
/* 主系双CPU的CRC一致 但与备系本机不一致 比较失败*/
@@ -4259,9 +4259,9 @@ static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLe
CM_UINT32 singleCheckLen = CheckLen / 2u; /* checkbuf记录了两个CPU的校验信息,长度的一半为单个CPU校验数据长度 */
static CM_UINT32 error_tolerate = 1u;
/*- 入参检查 */
CM_ASSERT(NULL != CheckBuf, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1);
CM_ASSERT(NULL != CheckBuf, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_1);
/* 接收的校验数据长度校验 */
CM_RE_ASSERT(CheckLen == s_2x2_Ctrl.RxCheckLen, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_2);
CM_RE_ASSERT(CheckLen == s_2x2_Ctrl.RxCheckLen, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_2);
/* 比较接收的主系校验帧中,主系的两个CPU的CRC,记录结果ret_p1p2 */
ret_p1p2 = CM_Memcmp((const void*)s_2x2_Ctrl.RxCheckFrame, (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen);
/* 比较备系本机与主系某一个CPU的CRC,记录结果ret_m1p1 */
@@ -4349,7 +4349,7 @@ static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLe
}
if(ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState)
{
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_3);
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_3);
}
}
}
@@ -4381,22 +4381,22 @@ static void s_2x2_BaseFollow_Sync(void)
offset = 0u;
len_prtcl = CM_LongFromChar((void*)&g_RxBaseFollow[offset]);
offset += 4u;
CM_RE_ASSERT(len_prtcl <= ((CM_UINT32)g_RxBaseFollow_len - 4u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_1);
CM_RE_ASSERT(len_prtcl <= ((CM_UINT32)g_RxBaseFollow_len - 4u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_1);
SFM_SetPrtclFollowData((void*)&g_RxBaseFollow[offset]);
offset += len_prtcl;
/*- sfp协议数据跟随*/
len_sfprtcl = CM_LongFromChar((void*)&g_RxBaseFollow[offset]);
offset += 4u;
CM_RE_ASSERT(len_prtcl + len_sfprtcl <= ((CM_UINT32)g_RxBaseFollow_len - 8u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_2);
CM_RE_ASSERT(len_prtcl + len_sfprtcl <= ((CM_UINT32)g_RxBaseFollow_len - 8u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_2);
SFM_SetSfpPrtclFollowData(len_sfprtcl, (void*)&g_RxBaseFollow[offset]);
offset += len_sfprtcl;
/*- 平台数据跟随*/
len_pfm = CM_LongFromChar((void*)&g_RxBaseFollow[offset]);
offset += 4u;
CM_RE_ASSERT(len_pfm == ((CM_UINT32)g_RxBaseFollow_len - len_prtcl - len_sfprtcl - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_3);
CM_RE_ASSERT(len_pfm == BASE_FOLLOW_DATA_LEN, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_22, TSCP_DARK_ASSERT_4);
CM_RE_ASSERT(len_pfm == ((CM_UINT32)g_RxBaseFollow_len - len_prtcl - len_sfprtcl - 12u), SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_3);
CM_RE_ASSERT(len_pfm == BASE_FOLLOW_DATA_LEN, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_26, TSCP_DARK_ASSERT_4);
}
/*此处使用临时周期号接收,在周期末同步*/
offset = (CM_UINT32)g_RxBaseFollow_len - BASE_FOLLOW_ALL_LEN;