目录
0-前言
在完成导入SDB(DBC或Arxml格式)后,在Developer的Data Mapping里面会显示所有的信号,通过Direction可以分为Rx和Tx,Rx代表ECU从总线收到的信号,Tx代表ECU发送到总线的信号。

1-创建Rx信号的Port口映射

选中所有的Rx信号,ctrl+shift可以实现批量选择,然后右键点击Create Port(s) from Signal(s)

在弹出来的属性框按上图配置,其中Port Creation选择Tc_Com_Rx这个SWC

完成配置后点击Next

然后为了区分,加上BSW_Rx_作为前缀,最后点击Finish
2-创建Tx信号的Port口映射

选中所有的Tx信号,然后右键点击Create Port(s) from Signal(s)

在弹出来的属性框按上图配置,其中Port Creation选择Tc_Com_Tx这个SWC,然后点击Next

然后为了区分,加上BSW_Tx_作为前缀,最后点击Finish
3-添加Runnable接口的访问权限

在Tc_Com_Rx_10ms的Runnabel的Access Points属性中,选择Read的接口

可以看到我们在Step1创建的BSW_Rx_的Port口映射,全选添加进来


同理把所有的Tx信号的Port的访问权限关联到Tc_Com_Tx_10ms中
4-代码实例
4.1 Rx信号的代码实现
在Rte_Tc_Com_Rx.h中会生成所有Rx信号的BSW_Rx_的接口
# define Rte_Read_BSW_Rx_ACU_AirBagFailSt_BSW_Rx_ACU_AirBagFailSt Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_AirBagFailSt_BSW_Rx_ACU_AirBagFailSt
# define Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_AirBagFailSt_BSW_Rx_ACU_AirBagFailSt(data) (Com_ReceiveSignal(ComConf_ComSignal_ACU_AirBagFailSt_oACU_oAlita_Chassis_CAN_Matrix_S05_V20_fd8ace97_Rx, (data))) /* PRQA S 3453 */ /* MD_MSR_FctLikeMacro */
# define Rte_Read_BSW_Rx_ACU_CrashOutputSt_BSW_Rx_ACU_CrashOutputSt Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_CrashOutputSt_BSW_Rx_ACU_CrashOutputSt
# define Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_CrashOutputSt_BSW_Rx_ACU_CrashOutputSt(data) (Com_ReceiveSignal(ComConf_ComSignal_ACU_CrashOutputSt_oACU_oAlita_Chassis_CAN_Matrix_S05_V20_f40decd6_Rx, (data))) /* PRQA S 3453 */ /* MD_MSR_FctLikeMacro */
# define Rte_Read_BSW_Rx_ACU_DrvSeatBeltRSt_BSW_Rx_ACU_DrvSeatBeltRSt Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_DrvSeatBeltRSt_BSW_Rx_ACU_DrvSeatBeltRSt
# define Rte_Read_Tc_Com_Rx_BSW_Rx_ACU_DrvSeatBeltRSt_BSW_Rx_ACU_DrvSeatBeltRSt(data) (Com_ReceiveSignal(ComConf_ComSignal_ACU_DrvSeatBeltRSt_oACU_oAlita_Chassis_CAN_Matrix_S05_V20_52e2fb98_Rx, (data))) /* PRQA S 3453 */ /* MD_MSR_FctLikeMacro */
其中关键的API接口是Com_ReceiveSignal
/**********************************************************************************************************************
Com_ReceiveSignal
**********************************************************************************************************************/
/*! Internal comment removed.
*
*
*
*
*
**********************************************************************************************************************/
FUNC(uint8, COM_CODE) Com_ReceiveSignal(Com_SignalIdType SignalId, P2VAR(void, AUTOMATIC, COM_APPL_VAR) SignalDataPtr)
{
/* ----- Local Variables ---------------------------------------------- */
uint8 errorId = COM_E_NO_ERROR; /* PRQA S 2981 */ /* MD_MSR_RetVal */
uint8 retVal = COM_SERVICE_NOT_AVAILABLE; /* PRQA S 2981 */ /* MD_MSR_RetVal */
/* ----- Development Error Checks ------------------------------------- */
/* #10 Check if component is initialized */
if(!Com_IsInitialized())
{
errorId = COM_E_UNINIT;
}
# if (COM_DEV_ERROR_DETECT == STD_ON) /* COV_COM_VAR_ELISA_STD_ON_TX */
/* #20 Check plausibility of input parameters */
# if (COM_RXACCESSINFO == STD_ON)
else if(SignalId >= Com_GetSizeOfRxAccessInfo())
{
errorId = COM_E_PARAM;
}
# if (COM_INVALIDHNDOFRXACCESSINFO == STD_ON)
else if(Com_IsInvalidHndOfRxAccessInfo(SignalId))
{
errorId = COM_E_PARAM;
}
# endif
# endif
else if(SignalDataPtr == NULL_PTR)
{
errorId = COM_E_PARAM_POINTER;
}
# endif
else
{
# if (COM_RXACCESSINFO == STD_ON)
/* ----- Implementation ----------------------------------------------- */
# if ((COM_BUFFERUSEDOFRXACCESSINFO == STD_ON) || (COM_RXSIGBUFFERARRAYBASEDBUFFERUSEDOFRXACCESSINFO == STD_ON))
/* #30 Copy the stored ComSignal value to the passed SignalDataPtr */
Com_ReceiveSignal_GetRxSigBuffer(SignalId, SignalDataPtr); /* SBSW_COM_PTR_API */
# endif
/* #40 If the related ComIPduGroup is active, E_OK will be returned otherwise COM_SERVICE_NOT_AVAILABLE will be returned */
if(Com_IsRxPduGrpActive(Com_GetRxPduInfoIdxOfRxAccessInfo(SignalId)))
{
retVal = E_OK;
}
else
{
retVal = COM_SERVICE_NOT_AVAILABLE;
}
# else
errorId = COM_E_PARAM;
# endif
}
/* ----- Development Error Report --------------------------------------- */
# if (COM_DEV_ERROR_REPORT == STD_ON)
if(errorId != COM_E_NO_ERROR) /* PRQA S 2991, 2995 */ /* MD_Com_2991, MD_Com_2995 */ /* COV_COM_ONLY_DET_FUNCTIONALITY_PRESENT */
{
Com_LMgt_CallDetErrorContinue(COMServiceId_ReceiveSignal, errorId);
}
# endif
COM_DUMMY_STATEMENT(errorId); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
COM_DUMMY_STATEMENT(SignalId); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
COM_DUMMY_STATEMENT(SignalDataPtr); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
return retVal;
} /* PRQA S 6080 */ /* MD_MSR_STMIF */
4.2 Tx信号的代码实现
在Rte_Tc_Com_Tx.h中会生成所有Tx信号的BSW_Tx_的接口
/**********************************************************************************************************************
* API prototypes
*********************************************************************************************************************/
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_ACMode_Set_BSW_Tx_IVI_ACMode_Set(BSW_Tx_IVI_ACMode_Set data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_AC_SW_Req_BSW_Tx_IVI_AC_SW_Req(BSW_Tx_IVI_AC_SW_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_AUTO_SW_Req_BSW_Tx_IVI_AUTO_SW_Req(BSW_Tx_IVI_AUTO_SW_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_AVHOnOffSet_BSW_Tx_IVI_AVHOnOffSet(BSW_Tx_IVI_AVHOnOffSet data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Air_Vol_Set_BSW_Tx_IVI_Air_Vol_Set(BSW_Tx_IVI_Air_Vol_Set data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_BTHFP_AutoAirVOL_SW_BSW_Tx_IVI_BTHFP_AutoAirVOL_SW(BSW_Tx_IVI_BTHFP_AutoAirVOL_SW data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_BT_Phone_Sts_BSW_Tx_IVI_BT_Phone_Sts(BSW_Tx_IVI_BT_Phone_Sts data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_CSTOnOffSet_BSW_Tx_IVI_CSTOnOffSet(BSW_Tx_IVI_CSTOnOffSet data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_CrawlingModeReq_BSW_Tx_IVI_CrawlingModeReq(BSW_Tx_IVI_CrawlingModeReq data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Cur_FlashSts_C_BSW_Tx_IVI_Cur_FlashSts_C(BSW_Tx_IVI_Cur_FlashSts_C data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_DrvModset_Req_BSW_Tx_IVI_DrvModset_Req(BSW_Tx_IVI_DrvModset_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_ECCIntExtCirc_Req_BSW_Tx_IVI_ECCIntExtCirc_Req(BSW_Tx_IVI_ECCIntExtCirc_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_EPS_Modset_Req_BSW_Tx_IVI_EPS_Modset_Req(BSW_Tx_IVI_EPS_Modset_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_ESPOffSw_BSW_Tx_IVI_ESPOffSw(BSW_Tx_IVI_ESPOffSw data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Energy_RE_Set_BSW_Tx_IVI_Energy_RE_Set(BSW_Tx_IVI_Energy_RE_Set data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_FastCoolingReq_BSW_Tx_IVI_FastCoolingReq(BSW_Tx_IVI_FastCoolingReq data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_FrntDefrst_SW_Req_BSW_Tx_IVI_FrntDefrst_SW_Req(BSW_Tx_IVI_FrntDefrst_SW_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_HDCOnOffSet_BSW_Tx_IVI_HDCOnOffSet(BSW_Tx_IVI_HDCOnOffSet data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_IntelligenTaerationReq_BSW_Tx_IVI_IntelligenTaerationReq(BSW_Tx_IVI_IntelligenTaerationReq data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_ItpmsReset_Set_BSW_Tx_IVI_ItpmsReset_Set(BSW_Tx_IVI_ItpmsReset_Set data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_OTAMODE_C_BSW_Tx_IVI_OTAMODE_C(BSW_Tx_IVI_OTAMODE_C data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_OTA_ReqKL15PowerOn_C_BSW_Tx_IVI_OTA_ReqKL15PowerOn_C(BSW_Tx_IVI_OTA_ReqKL15PowerOn_C data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Power_SW_Req_BSW_Tx_IVI_Power_SW_Req(BSW_Tx_IVI_Power_SW_Req data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_SetACTemp_BSW_Tx_IVI_SetACTemp(BSW_Tx_IVI_SetACTemp data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Day_BSW_Tx_IVI_Time_Day(BSW_Tx_IVI_Time_Day data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Hour_BSW_Tx_IVI_Time_Hour(BSW_Tx_IVI_Time_Hour data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Min_BSW_Tx_IVI_Time_Min(BSW_Tx_IVI_Time_Min data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Month_BSW_Tx_IVI_Time_Month(BSW_Tx_IVI_Time_Month data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Sec_BSW_Tx_IVI_Time_Sec(BSW_Tx_IVI_Time_Sec data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Year_BSW_Tx_IVI_Time_Year(BSW_Tx_IVI_Time_Year data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_hvacFrModeReq_BSW_Tx_IVI_hvacFrModeReq(BSW_Tx_IVI_hvacFrModeReq data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_NMUd_IVI_16bit_BSW_Tx_NMUd_IVI_16bit(BSW_Tx_NMUd_IVI_16bit data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_NMUd_IVI_32bit_BSW_Tx_NMUd_IVI_32bit(BSW_Tx_NMUd_IVI_32bit data); /* PRQA S 0786, 3449, 0624 */ /* MD_Rte_0786, MD_Rte_3449, MD_Rte_0624 */
在Rte_SystemApplication_OsCore0.C中会生成相关的函数定义,关键的API是Com_SendSignal
FUNC(Std_ReturnType, RTE_CODE) Rte_Write_Tc_Com_Tx_BSW_Tx_IVI_Time_Min_BSW_Tx_IVI_Time_Min(BSW_Tx_IVI_Time_Min data) /* PRQA S 1505, 2982 */ /* MD_MSR_Rule8.7, MD_Rte_2982 */
{
Std_ReturnType ret = RTE_E_OK; /* PRQA S 2981 */ /* MD_MSR_RetVal */
ret |= Com_SendSignal(ComConf_ComSignal_IVI_Time_Min_oIVI_Time_oAlita_Chassis_CAN_Matrix_S05_V20_d9636382_Tx, (&data)); /* PRQA S 0315, 1340, 2986 */ /* MD_Rte_0315, MD_Rte_1340, MD_MSR_RetVal */
return ret;
} /* PRQA S 6010, 6030, 6050 */ /* MD_MSR_STPTH, MD_MSR_STCYC, MD_MSR_STCAL */
Com_SendSignal的定义如下:
/**********************************************************************************************************************
Com_SendSignal
**********************************************************************************************************************/
/*! Internal comment removed.
*
*
*
*
**********************************************************************************************************************/
FUNC(uint8, COM_CODE) Com_SendSignal(Com_SignalIdType SignalId, P2CONST(void, AUTOMATIC, COM_APPL_DATA) SignalDataPtr)
{
/* ----- Local Variables ---------------------------------------------- */
uint8 errorId = COM_E_NO_ERROR; /* PRQA S 2981 */ /* MD_MSR_RetVal */
uint8 retVal = COM_SERVICE_NOT_AVAILABLE; /* PRQA S 2981 */ /* MD_MSR_RetVal */
/* ----- Development Error Checks ------------------------------------- */
/* #10 Check if component is initialized */
if(!Com_IsInitialized())
{
errorId = COM_E_UNINIT;
}
#if (COM_DEV_ERROR_DETECT == STD_ON) /* COV_COM_VAR_ELISA_STD_ON_TX */
/* #20 Check plausibility of input parameters */
# if (COM_TXSIGINFO == STD_ON)
else if(SignalId >= Com_GetSizeOfTxSigInfo())
{
errorId = COM_E_PARAM;
}
# if (COM_INVALIDHNDOFTXSIGINFO == STD_ON)
else if(Com_IsInvalidHndOfTxSigInfo(SignalId))
{
errorId = COM_E_PARAM;
}
# endif
# endif
else if(SignalDataPtr == NULL_PTR) /* COV_COM_UINT8_DYN_APPLTYPE */
{
errorId = COM_E_PARAM_POINTER;
}
#endif
else
{
/* ----- Implementation ----------------------------------------------- */
#if (COM_TXSIGINFO == STD_ON)
SchM_Enter_Com_COM_EXCLUSIVE_AREA_TX();
/* #30 Process the passed Tx ComSignal */
retVal = Com_SendSignal_Processing(SignalId, SignalDataPtr, 0); /* SBSW_COM_FCTCALL_WITH_P2CONST */
SchM_Exit_Com_COM_EXCLUSIVE_AREA_TX();
#else
errorId = COM_E_PARAM;
#endif
}
/* ----- Development Error Report --------------------------------------- */
#if (COM_DEV_ERROR_REPORT == STD_ON)
if(errorId != COM_E_NO_ERROR) /* PRQA S 2991, 2995 */ /* MD_Com_2991, MD_Com_2995 */ /* COV_COM_ONLY_DET_FUNCTIONALITY_PRESENT */
{
Com_LMgt_CallDetErrorContinue(COMServiceId_SendSignal, errorId);
}
#endif
COM_DUMMY_STATEMENT(errorId); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
COM_DUMMY_STATEMENT(SignalId); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
COM_DUMMY_STATEMENT(SignalDataPtr); /* PRQA S 1338, 2983, 3112 */ /* MD_MSR_DummyStmt */ /* lint -e{438} */
return retVal;
} /* PRQA S 6080 */ /* MD_MSR_STMIF */
6074

被折叠的 条评论
为什么被折叠?



