前言
使用RTE时,常会使用到Rte_DRead和Rte_Read函数,今天以代码视角看看二者的区别。
应用层
在应用层调用Rte_DRead接口函数读取CAN 信号值。
read_isSignalA = Rte_DRead_Isignal_isSignalA_Isignal_isSignalA();
在应用层调用Rte_Read接口函数读取CAN 信号值。
Rte_Read_ISigGrp_igAAA_020ms_PDU15_ISigGrp_igAAA_020ms_PDU15(&read_AAA_020ms_PDU15);
区别:Rte_DRead接口函数读取单个CAN信号。Rte_DRead接口函数按PDU整体读取信号。
RTE
Rte_ModuleName.h
Rte_DRead函数是在Rte_ModuleName.h做函数宏替换
// Rte_ModuleName.h
#if defined(RTE_PRV_ALL_API) || defined(RTE_RUNNABLEAPI_RE_Input)
#define Rte_DRead_Isignal_isSignalA_Isignal_isSignalA() (Rte_DRead_Input_Isignal_isSignalA_Isignal_isSignalA())
#endif
Rte_Read函数是在Rte_ModuleName.h做函数宏替换
// Rte_ModuleName.h
#if defined(RTE_PRV_ALL_API) || defined(RTE_RUNNABLEAPI_RE_Input)
#define Rte_Read_ISigGrp_igAAA_020ms_PDU15_ISigGrp_igAAA_020ms_PDU15( data ) (Rte_Read_Input_ISigGrp_igAAA_020ms_PDU15_ISigGrp_igAAA_020ms_PDU15(data))
#endif
区别:基本一致。
Rte.c
Rte_DRead被替换函数是在Rte.c中定义和实现。
注释1部分,定义了Rte全局变量Rte_Rx_000094_Isignal_isSignalA供Rte_DRead函数使用。
注释2部分,在Rte_DRead函数使用了此Rte全局变量。
// Rte.c
// 1.
#define RTE_START_SEC_VAR_CLEARED_BOOLEAN
#include "Rte_MemMap.h"
VAR(IM_isSignalA, RTE_DATA) Rte_Rx_000094_Isignal_isSignalA;
#define RTE_STOP_SEC_VAR_CLEARED_BOOLEAN
#include "Rte_MemMap.h"
// 2.
FUNC(IM_isSignalA, RTE_CODE)
Rte_DRead_Input_Isignal_isSignalA_Isignal_isSignalA(void) /* 2 */
{
VAR(IM_isSignalA, AUTOMATIC) rtn;
/* Threadsafe: optimized to interrupt blocking */
Rte_SuspendOSInterrupts();
rtn = Rte_Rx_000094_Isignal_isSignalA;
Rte_Upd_flatInstance_Input_Isignal_isSignalA_Isignal_isSignalA = FALSE;
Rte_ResumeOSInterrupts();
return rtn;
}
Rte_Read被替换函数是在Rte.c中定义和实现。
注释1部分,定义了Rte全局变量Rte_Rx_000105_ISigGrp_igAAA_020ms_PDU15供Rte_Read函数使用。
注释2部分,在Rte_Read函数使用了此Rte全局变量。
// Rte.c
// 1.
#define RTE_START_SEC_VAR_CLEARED_16
#include "Rte_MemMap.h"
VAR(IM_igAAA_020ms_PDU15, RTE_DATA) Rte_Rx_000105_ISigGrp_igAAA_020ms_PDU15;
#define RTE_STOP_SEC_VAR_CLEARED_16
#include "Rte_MemMap.h"
// 2.
FUNC(Std_ReturnType, RTE_CODE)
Rte_Read_Input_ISigGrp_igAAA_020ms_PDU15_ISigGrp_igAAA_020ms_PDU15(P2VAR(IM_igAAA_020ms_PDU15, AUTOMATIC, RTE_APPL_DATA) data) /* 2 */
{
VAR(Std_ReturnType, AUTOMATIC) rtn;
/* Threadsafe: optimized to interrupt blocking */
Rte_SuspendOSInterrupts();
(*(data)) = Rte_Rx_000105_ISigGrp_igAAA_020ms_PDU15;
Rte_Upd_flatInstance_Input_ISigGrp_igAAA_020ms_PDU15_ISigGrp_igAAA_020ms_PDU15 = FALSE;
Rte_ResumeOSInterrupts();
rtn = ((VAR(Std_ReturnType, AUTOMATIC))RTE_E_OK);
return rtn;
}
区别:基本一致。
Rte_Type.h
最终查找到Rte_DRead函数Rte全局变量的函数类型是在Rte_Type.h定义。
// Rte_Type.h
typedef boolean IM_isSignalA;
最终查找到Rte_Read函数Rte全局变量的函数类型是在Rte_Type.h定义。
// Rte_Type.h
typedef struct {
IM_isAAA_020ms_PDU15_Reserve01 IM_isAAA_020ms_PDU15_Reserve01;
IM_isAAA_020ms_PDU15_CRC IM_isAAA_020ms_PDU15_CRC;
IM_isAAA_020ms_PDU15_RC IM_isAAA_020ms_PDU15_RC;
IM_isSignal1 IM_isSignal1;
IM_isSignal2 IM_isSignal2;
IM_isSignal3 IM_isSignal3;
IM_isSignal4 IM_isSignal4;
IM_isSignal5 IM_isSignal5;
IM_isSignal6 IM_isSignal6;
IM_isSignal7 IM_isSignal7;
} IM_igAAA_020ms_PDU15;
区别:Rte_DRead函数对应的Rte全局变量为基础的数据类型。Rte_Read函数对应的Rte全局变量为结构体类型。
总结
Rte_DRead函数和Rte_Read函数读取的主要区别还是读取的单位量,Rte_DRead函数以信号为基础单位读取,Rte_Read函数以PDU为基础单位读取。
标签:Rte,RTE,isSignalA,函数,PDU15,IM,020ms From: https://blog.csdn.net/OnlyMars/article/details/137032186