【RTE里Rte_DRead函数和Rte_Read函数在代码里的区别】

本文详细比较了RTE应用层中Rte_DRead和Rte_Read函数在读取CAN信号时的区别,前者按信号读取,后者按PDU读取,解析了它们在Rte_ModuleName.h、Rte.c和Rte_Type.h中的实现和数据类型差异。
摘要由CSDN通过智能技术生成

前言

使用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为基础单位读取。

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值