首页 > 其他分享 >【RTE里Rte_DRead函数和Rte_Read函数在代码里的区别】

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

时间:2024-03-26 13:31:30浏览次数:18  
标签:Rte RTE isSignalA 函数 PDU15 IM 020ms

前言

使用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

相关文章

  • 【C语言】Infiniband驱动__mlx4_init_one函数
    一、注释Linux内核驱动程序中的部分,属于Mellanox网卡驱动mlx4的初始化过程。//Mellanox以太网驱动主程序代码staticint__mlx4_init_one(structpci_dev*pdev,intpci_dev_data,structmlx4_priv*priv){interr;//错误码变量intnvfs[ML......
  • 函数是什么?C++函数详解!
    1、函数的声明和定义在复杂的程序中,如果全部的代码都写在main函数中,main函数体将非常庞大臃肿。把任务分工到其它的函数中,main函数只负责程序的核心流程,具体的任务由其它函数完成。这种思想就是模块化编程。声明和定义函数的语法:返回值的数据类型函数名(参数一的数据类型......
  • 【常见错误】org.springframework.web.multipart.MultipartException request is not
    检查请求类型和内容类型MultipartException 错误通常发生在请求类型不是 multipart/form-data 或者内容类型不是预期的类型时。因此,要解决这个错误,需要确保请求的类型和内容类型正确。以下是一些检查步骤:检查请求类型确保发送到服务器的请求的HTTP方法为 POST,并且Cont......
  • Pandas基础之drop函数的使用
    drop方法的用法:drop(labels,axis=0,level=None,inplace=False)        -- axis为0时表示删除行,axis为1时表示删除列参数说明:labels:显示要删除的行或列的标签名axis:axis=0时按行删除,axis=1时按列删除level:代表标签所在的索引级别,一般不使用inplace:值为......
  • C++ std::reverse函数
    函数原型,定义std::reverse定义于头文件 <algorithm>1(1)2template<classBidirIt>3voidreverse(BidirItfirst,BidirItlast);(C++20前)45template<classBidirIt>6constexprvoidreverse(BidirItfirst,BidirItlast);(C++20起)......
  • Springboot项目的main函数入口,如何像jar包一样接受参数
    一般来说,springboot项目是提供服务的,但是也可以用到导出jar来启动,那么如何介绍参数呢:packagecom.example.TestDemo;importcom.example.jmeter.bean.TestCaseResult;importcom.example.jmeter.controller.JmeterController;importlombok.extern.slf4j.Slf4j;importorg.......
  • pytorch中的张量函数
    troch.cat()&torch.stack().cat和.stack的区别在于cat会增加现有维度的值,可以理解为续接,stack会新加增加一个维度,可以理解为叠加x1=torch.tensor([[11,21,31],[21,31,41]],dtype=torch.int)x2=torch.tensor([[12,22,32],[22,32,42]])inputs=[x1,x2]R0......
  • SQL-部分函数替代
    SQL-优化部分函数替代方案:LIKE替换1.MSSQL替代函数MSSQL语法selectCHARINDEX(‘Zhang’,‘Devil_Zhang’)运行结果:72.MySQL替代函数MySQL语法selectinstr('Devil_Zhang','Zhang')运行结果:73.Oracle替代函数SELECT INSTR('012134','0121')FROMDUAL;运行......
  • 还写那么多函数?js简单封装,拿去用吧
    ;(function($){ varwprtTheme={ //Maininitfunction init:function(){ this.config(); this.events(); }, //Definevarsforcaching config:function(){ ......
  • Go的可变参数函数
    可变函数是指可以接收可变数量的参数的函数。在Golang中,可以传递与函数签名中引用的类型相同的不同数量的参数。在声明可变函数时,最后一个参数的类型前会有一个省略号"...",这表明该函数可以用任意数量的该类型参数来调用,可以是0个、1个或者多个。这种类型的函数在不知道传递给......