Merge branch 'test/9.9外网接收时间测试' into dev/9.9

This commit is contained in:
lh
2026-06-11 15:45:42 +08:00
4 changed files with 58 additions and 5 deletions
+52 -1
View File
@@ -36,6 +36,7 @@
#include "MSCP_APP_Interface.h" #include "MSCP_APP_Interface.h"
#include "PFM_RemoteUpdate.h" #include "PFM_RemoteUpdate.h"
#include "MSCP_Define.h" #include "MSCP_Define.h"
#include "CFM_Raw.h"
#include <stdarg.h> #include <stdarg.h>
#define CFM_2oo2_MSG_NUM_MAX (200u) #define CFM_2oo2_MSG_NUM_MAX (200u)
@@ -58,6 +59,18 @@
/*日志攒包发送 攒包大小*/ /*日志攒包发送 攒包大小*/
#define LOG_MAX (5120u) #define LOG_MAX (5120u)
/* 心跳在周期结束前30ms执行发送 */
#define CFM_HEART_WAITE (30u)
/* 心跳发送线程控制结构体 */
typedef struct
{
CM_SEM_T m_Start; /* 心跳线程开始信号量 */
CM_SEM_T m_Stop; /* 心跳线程结束信号量 */
} STRU_CFM_HEART_CTRL_T;
static STRU_CFM_HEART_CTRL_T s_CFM_HeartCtrl;
/** 接收线程控制 */ /** 接收线程控制 */
typedef struct typedef struct
{ {
@@ -351,6 +364,8 @@ static CM_THREAD_FUNC_T t_TimeThread_Area(IN CM_Thread_Arg_Struct_T* arg);
static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg); static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg);
static CM_THREAD_FUNC_T t_ClearArpThread(void); static CM_THREAD_FUNC_T t_ClearArpThread(void);
/* 单独的心跳发送线程 */
static CM_THREAD_FUNC_T t_OutNetHeartSendThread(IN CM_Thread_Arg_Struct_T* arg);
/* 2取使用socket的初始化*/ /* 2取使用socket的初始化*/
@@ -2664,7 +2679,14 @@ static void s_NetInit_Outnet(void)
} }
rtCheck = CM_Thread_Create((CM_THREAD_T*) NULL, (CM_THREAD_FUNC_T) t_ClearArpThread,"Clear_Arp", 0, CM_TASK_PRIORITY_94, NULL); rtCheck = CM_Thread_Create((CM_THREAD_T*) NULL, (CM_THREAD_FUNC_T) t_ClearArpThread,"Clear_Arp", 0, CM_TASK_PRIORITY_94, NULL);
CM_RE_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_13); CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_13);
rt = CM_Sem_Init(&s_CFM_HeartCtrl.m_Start);
CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_14);
rt = CM_Sem_Init(&s_CFM_HeartCtrl.m_Stop);
CM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_15);
rtCheck = CM_Thread_Create((CM_THREAD_T*) NULL, (CM_THREAD_FUNC_T) t_OutNetHeartSendThread,"heart_send", 0, CM_TASK_PRIORITY_82, (CM_Thread_Arg_Struct_T*)&s_CFM_HeartCtrl);
CM_ASSERT(CM_TRUE == rtCheck, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_4, TSCP_DARK_ASSERT_16);
CM_Sleep(100u);/* 延时等待线程启动 */ CM_Sleep(100u);/* 延时等待线程启动 */
} }
@@ -4767,7 +4789,36 @@ void CFM_AssertRecved(void)
assertMsgNum = CM_MQ_Get_Msg_Num(&s_CFM_Rx2oo2_Assert.MsgQ); assertMsgNum = CM_MQ_Get_Msg_Num(&s_CFM_Rx2oo2_Assert.MsgQ);
CM_ASSERT((0u == assertMsgNum),NET_MODE,DARK_FAULT_CODE_FUN_ORDER_41,TSCP_DARK_ASSERT_1); CM_ASSERT((0u == assertMsgNum),NET_MODE,DARK_FAULT_CODE_FUN_ORDER_41,TSCP_DARK_ASSERT_1);
} }
/**
* @brief 发送心跳线程的启动信号量,需要在平台周期开始时发送
*/
void CFM_Heart_Thread_PostStart(void)
{
(void)CM_Sem_Post(s_CFM_HeartCtrl.m_Start);
}
/* 单独的心跳发送线程 */
static CM_THREAD_FUNC_T t_OutNetHeartSendThread(IN CM_Thread_Arg_Struct_T* arg)
{
STRU_CFM_HEART_CTRL_T *pCtrl = (STRU_CFM_HEART_CTRL_T*)arg;
CM_UINT32 cyc_time = g_PFM_Cfg.CYC_TIME;
ENUM_2x2_STATE_T state_2x2 = ENUM_2x2_SHUTDOWN;
#if QNX
void* pmask = NULL;
/*- 本线程锁定在 A53 core 1 */
pmask = (void*)(0x01u|0x02u);
(void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask);
#endif
while(1)
{
CM_Sem_Wait(pCtrl->m_Start);
state_2x2 = SFM_2x2_GetLocal2x2State();
CM_Sleep(cyc_time - CFM_HEART_WAITE);
/*- 发送主线程热备状态的外网心跳*/
(void)CFM_TxOutnetHeart(state_2x2);
}
return NULL;
}
/* /*
MAC层:14字节 MAC层:14字节
dst MAC [6] src MAC [6] type [2] dst MAC [6] src MAC [6] type [2]
+4
View File
@@ -759,6 +759,10 @@ extern "C"
* @brief 判断收到宕机后的2取,立即执行宕机操作 * @brief 判断收到宕机后的2取,立即执行宕机操作
*/ */
void CFM_AssertRecved(void); void CFM_AssertRecved(void);
/**
* @brief 发送心跳线程的启动信号量,需要在平台周期开始时发送
*/
void CFM_Heart_Thread_PostStart(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+2
View File
@@ -478,6 +478,8 @@ static CM_THREAD_FUNC_T MSCP_CycBase(void)
/*TODO 发送2x状态起始信号量*/ /*TODO 发送2x状态起始信号量*/
SFM_2x2_Thread_PostStart(); SFM_2x2_Thread_PostStart();
SFM_AREA_Thread_PostStart(); SFM_AREA_Thread_PostStart();
/* 发送心跳线程起始信号量 */
CFM_Heart_Thread_PostStart();
PFM_CFC_Check(24); PFM_CFC_Check(24);
/*- @alias 2oo2周期校时 */ /*- @alias 2oo2周期校时 */
if (0x55u == g_PFM_Cfg.M_2oo2_Enable) if (0x55u == g_PFM_Cfg.M_2oo2_Enable)
-4
View File
@@ -465,7 +465,6 @@ void PFM_BufSwich(void)
s_OutnetHeart_Mine_AppReadIndex = 0; s_OutnetHeart_Mine_AppReadIndex = 0;
s_OutnetHeart_Peer_AppReadIndex = 0; s_OutnetHeart_Peer_AppReadIndex = 0;
} }
/** /**
* @brief 输入微周期处理 * @brief 输入微周期处理
* @details * @details
@@ -481,7 +480,6 @@ void PFM_InputProc(void)
/*- 变量初始化 */ /*- 变量初始化 */
CM_INT32 i = 0; CM_INT32 i = 0;
ENUM_2x2_STATE_T p_state_2x2 = ENUM_2x2_SHUTDOWN; /* 对系热备状态 */ ENUM_2x2_STATE_T p_state_2x2 = ENUM_2x2_SHUTDOWN; /* 对系热备状态 */
ENUM_2x2_STATE_T localstate = SFM_2x2_GetLocal2x2State(); /* 本机2x2状态 */
/************************平台数据接收*************************/ /************************平台数据接收*************************/
/*- 外网安全数据接收 */ /*- 外网安全数据接收 */
@@ -517,8 +515,6 @@ void PFM_InputProc(void)
} }
PFM_CFC_Check(30); PFM_CFC_Check(30);
/*- 发送主线程热备状态的外网心跳*/
(void)CFM_TxOutnetHeart(localstate);
PFM_CFC_Check(31); /*预留*/ PFM_CFC_Check(31); /*预留*/
/*************************本地输入数据2oo2交换和比较*************************/ /*************************本地输入数据2oo2交换和比较*************************/
MSCP_LOG_MSG("timecurr 1 Input Recv = %lld us\n", NOW_USED_TIME); MSCP_LOG_MSG("timecurr 1 Input Recv = %lld us\n", NOW_USED_TIME);