diff --git a/TSCP/src/MSCP/PFM/PFM_InputOutput.c b/TSCP/src/MSCP/PFM/PFM_InputOutput.c index ab930fa..89f2609 100644 --- a/TSCP/src/MSCP/PFM/PFM_InputOutput.c +++ b/TSCP/src/MSCP/PFM/PFM_InputOutput.c @@ -1925,6 +1925,7 @@ static void s_output_2oo2check(IN CM_UINT8* check_2oo2_Buf, IN CM_UINT32 check_2 { CM_INT32 ret = 0, i = 0; CM_UINT8 buf_peer[500] = {0u}; + CM_UINT32 offset = 0u; /* 用于日志打印时,判断通道*/ /*- 2oo2交换输出校验帧 */ CM_ASSERT(NULL != check_2oo2_Buf, IN_OUT_MODE, DARK_FAULT_CODE_FUN_ORDER_15, TSCP_DARK_ASSERT_1); ret = SFM_2oo2_Exchange_Currency(check_2oo2_Buf, check_2oo2_Len, buf_peer, (CM_UINT32)check_2oo2_Len, ENUM_2oo2_OUTPUT_CHECK); @@ -1940,7 +1941,8 @@ static void s_output_2oo2check(IN CM_UINT8* check_2oo2_Buf, IN CM_UINT32 check_2 { if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][i].b_2oo2_Enable) { - ret = CM_Memcmp(check_2oo2_Buf + 4 + (i - 1) * 8, buf_peer + 4 + (i - 1) * 8, 8); + offset = (CM_UINT32)(i - 1) * 8 + 4u; + ret = CM_Memcmp(&check_2oo2_Buf[offset], &buf_peer[offset], 8); if(ret != 0) { MSCP_LOG_MSG("2oo2 output compare err, INDEX = %d, len = %d\n", i, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); diff --git a/TSCP/src/MSCP/SFM/SFM_2x2.c b/TSCP/src/MSCP/SFM/SFM_2x2.c index d3b5fa8..3c69cf9 100644 --- a/TSCP/src/MSCP/SFM/SFM_2x2.c +++ b/TSCP/src/MSCP/SFM/SFM_2x2.c @@ -4169,8 +4169,8 @@ static void s_2x2_BaseFollow_2oo2Check_Send(void) CM_INT32 ret = 0; /*- 计算本机跟随数据中协议部分的CRC值 */ crc = CM_Crc32(g_TxBaseFollow, g_TxBaseFollow_len - BASE_FOLLOW_ALL_LEN); - CM_LongToChar(g_TxBaseFollow_len, mine_buf); - CM_LongToChar(crc, mine_buf + 4u); + CM_LongToChar(g_TxBaseFollow_len, &mine_buf[0]); + CM_LongToChar(crc, &mine_buf[4]); 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_23, TSCP_DARK_ASSERT_1); @@ -4183,7 +4183,7 @@ static void s_2x2_BaseFollow_2oo2Check_Send(void) /*- 比较成功,填入CRC后发送 */ if(g_TxBaseFollow_len <= (sizeof(g_TxBaseFollow) - 4u)) { - (void)CM_Memcpy(g_TxBaseFollow + g_TxBaseFollow_len, sizeof(g_TxBaseFollow) - g_TxBaseFollow_len - 4u, mine_buf + 4, 4u); + (void)CM_Memcpy(&g_TxBaseFollow[g_TxBaseFollow_len], sizeof(g_TxBaseFollow) - g_TxBaseFollow_len - 4u, &mine_buf[4], 4u); g_TxBaseFollow_len += 4u; if(s_2x2_Ctrl.LocalState == ENUM_2x2_MASTER) { @@ -4199,9 +4199,9 @@ static void s_2x2_AppFollow_SyncCheck(void) { CM_UINT32 mine_crc = 0u, partner_crc1 = 0u, partner_crc2 = 0u; static CM_UINT32 error_tolerate = 1u; - mine_crc = CM_LongFromChar(g_TxAppFollow); - partner_crc1 = CM_LongFromChar(g_RxAppFollowCrc); - partner_crc2 = CM_LongFromChar(g_RxAppFollowCrc + 4u); + mine_crc = CM_LongFromChar(&g_TxAppFollow[0]); + partner_crc1 = CM_LongFromChar(&g_RxAppFollowCrc[0]); + partner_crc2 = CM_LongFromChar(&g_RxAppFollowCrc[4]); /* 主系双CPU的CRC不一致 */ if(partner_crc1 != partner_crc2) @@ -4246,7 +4246,7 @@ static void s_2x2_AppFollow_SyncCheck(void) { /* 比较失败则设置容忍次数大于0(可能本周期备系校验错误降为离线,但下周期主系失效,导致备系进入容忍分支,认为校验成功又升备) */ error_tolerate = ((error_tolerate >= 1u) ? error_tolerate : 1u); - MSCP_LOG_DATALEN(g_TxAppFollow + 8, g_TxAppFollow_len, "PFM_AppFollow_SyncCheck g_TxAppFollow"); + MSCP_LOG_DATALEN(&g_TxAppFollow[8], g_TxAppFollow_len, "PFM_AppFollow_SyncCheck g_TxAppFollow"); } } /** @@ -4258,12 +4258,13 @@ static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLe CM_INT32 ret = -1, ret_p1p2 = -1, ret_m1p1 = -1, ret_m1p2 = -1; /* 记录对系双CRC比较、本机和对系cpu1、本机和对系cpu2比较结果 */ CM_UINT32 singleCheckLen = CheckLen / 2u; /* checkbuf记录了两个CPU的校验信息,长度的一半为单个CPU校验数据长度 */ static CM_UINT32 error_tolerate = 1u; + CM_UINT32 offset = 0u; /* 用于日志打印时,判断通道*/ /*- 入参检查 */ 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_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); + ret_p1p2 = CM_Memcmp((const void*)&s_2x2_Ctrl.RxCheckFrame[0], (const void*)&s_2x2_Ctrl.RxCheckFrame[singleCheckLen], (CM_SIZE_T)singleCheckLen); /* 比较备系本机与主系某一个CPU的CRC,记录结果ret_m1p1 */ ret_m1p1 = CM_Memcmp((const void*)CheckBuf, (const void*)&s_2x2_Ctrl.RxCheckFrame[0], (CM_SIZE_T)singleCheckLen); /* 比较备系本机与主系另一个CPU的CRC,记录结果ret_m1p2 */ @@ -4330,25 +4331,26 @@ static void s_2x2_Output_SyncCheck(IN const CM_UINT8 *CheckBuf, CM_INT32 CheckLe { /* 比较失败则设置容忍次数大于0(可能本周期备系校验错误降为离线,但下周期主系失效,导致备系进入容忍分支,认为校验成功又升备) */ error_tolerate = ((error_tolerate >= 1u) ? error_tolerate : 1u); - /* 打印比较不一致的通道数据 */ - for (i = 1; i <= g_2x2oo2_data_num; i++) - { - if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][i].b_2x2_Enable) - { - ret = CM_Memcmp(CheckBuf + 4 + (i - 1) * 8, s_2x2_Ctrl.RxCheckFrame + 4 + (i - 1) * 8, 8); - if(ret != 0) - { - MSCP_LOG_MSG("2x2 output compare err, INDEX = %d, len = %d\n", i, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); - MSCP_LOG_BIN(g_2x2oo2_tx[g_2x2oo2_base][i].p_buf, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); - } - } - else - { - /*二取标志未使能*/ - } - } if(ENUM_2x2_SLAVE == s_2x2_Ctrl.LocalState) { + /* 打印比较不一致的通道数据 */ + for (i = 1; i <= g_2x2oo2_data_num; i++) + { + if ((CM_UINT32)CM_TRUE == g_2x2oo2_tx[g_2x2oo2_base][i].b_2x2_Enable) + { + offset = (CM_UINT32)(i - 1) * 8 + 4u; + ret = CM_Memcmp(CheckBuf + offset, &s_2x2_Ctrl.RxCheckFrame[offset], 8); + if(ret != 0) + { + MSCP_LOG_MSG("2x2 output compare err, INDEX = %d, len = %d\n", i, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + MSCP_LOG_BIN(g_2x2oo2_tx[g_2x2oo2_base][i].p_buf, (CM_SIZE_T)g_2x2oo2_tx[g_2x2oo2_base][i].buf_len); + } + } + else + { + /*二取标志未使能*/ + } + } CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_25, TSCP_DARK_ASSERT_3); } }