Autosar RTE S/R接口implicit与Explicit的实现与区别

news2024/11/26 20:34:27

文章目录

    • 前言
    • 接口的代码
      • implicit
        • IRead
        • IWrite
      • Explicit
        • Read
        • Write
    • 区别与使用场景
    • 总结

前言

Autosar官方文档阅读起来比较费劲,一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别

接口的代码

implicit

IRead

隐式的接口代码最显著的特征是使用IRead.

在Autosar标准中有介绍Rte_IRead函数

函数原型:

<return> Rte_[Byps_]IRead_<re>_<p>_<o>([IN Rte_Instance <instance>],
[OUT uint8* metaDataPtr] )

Rte_Instance应该是Rte的实例,一般都只有一个,所有基本不会生成。可选的OUT参数metaDataPtr包含指向要从COM或LdCom转发的元数据字节数组

Rte_IRead返回值提供对可变数据协议类型。Rte_IRead的返回类型取决于ImplementationDataType
的VariableDataPrototype,并且可以是一个值或指向可以访问该值的位置的指针。
返回值一般都不使用宏定义直接传值

<re>表示Runnable的名称,<p>表示端口的名称,<o>表示data element的名称,[Byps_]是可选的中缀,当启用用于bypass支持的组件时会生成。

数据值总是可以读取的。提供所需的一致性API提供对数据元素副本的访问。
这保证了它在可运行实体的实际执行过程中永远不会改变。
SW-C的隐式数据读取访问应始终返回定义的数据。

以上是标准中的解释,通俗来说,就是隐式访问时需要将需要访问的数据拷贝到另一个副本中,保证读取时数据不会变化,以保证同一次读取接口的数据都是一致的

例如,使用该接口的Runnable是Runnable_10ms,Port名称为Port_Test,Data element名称为Data_Test则该接口生成的定义为:

 #  define Rte_IRead_Runnable_10ms_Port_Test_Data_Test()  (Test_Data)

此处只是示例,Test_Data是一个全局变量。正常生成的代码中还会加入Task,Runnable,Port等的定义

假设该接口是从CAN上获取的,则实际读取的代码实现:

      /* read implicit data */
      {
        uint8 local_Test_Data;
        (void)Com_ReceiveSignal(ComConf_ComSignal_Test_Data_Message_Rx, &local_Test_Data); 
        *((&Test_Data)) = local_Test_Data;
      }
      /* call runnable */
      Runnable_10ms(); 
     

可以看到,Rte_IRead函数读取的值是在runnable调用之前赋值的。

IWrite

隐式的接口代码最显著的特征是使用IWrite.

在Autosar标准中有介绍Rte_IWrite函数

函数原型:

void Rte_[Byps_]IWrite_<re>_<p>_<o>(
[IN Rte_Instance <instance>],
IN <data>,
[IN Std_TransformerForward forwardedStatus],
[IN uint8* metaDataPtr])

Rte_Instance和IWrite中一样

<re>表示Runnable的名称,<p>表示端口的名称,<o>表示data element的名称,[Byps_]是可选的中缀,当启用用于bypass支持的组件时会生成。

输入参数 data,可以为变量值,也可以为地址,为地址时必须要保证指针在该API函数调用返回前有效

可选IN参数forwardedStatus包含变压器应在变压器链内部重建的状态。请参见ASWS TransformerGeneral[26]

可选的IN参数metaDataPtr包含指向要转发到COM或LdCom的元数据字节数组。参见[SWS_Rte_03620]。

Rte_IWrite API函数保证具有恒定的执行时间,即调用API是在同一个函数内,保证每一次发送的数据都是一致的

例如,使用该接口的Runnable是Runnable_10ms,Port名称为Port_Test,Data element名称为Data_Test则该接口生成的定义为:

Rte_IWrite_Runnable_10ms_Port_Test_Data_Test(data)  \ 
  ( \
    Test_IWrite_Data = (data) \
  )

此处赋值的也是全局变量。

发送的函数

  Rte_IWrite_Runnable_10ms_Port_Test_Data_Test
    (loacal_Send_Data);

是一个临时变量,且是在同一函数内发送出去的,获取该临时变量值也是在同一函数内。

一般在生成的代码中,Write设置implicit属性后,除了IWrite函数,还会生成一个IWriteRef函数。该函数和IWrite的区别是不传递参数,而是直接宏定义获取变量地址,例如上述例子对应的IWriteRef函数为:

#  define Rte_IWriteRef_Runnable_10ms_Port_Test_Data_Test() \
  ( \
    &Test_IWrite_Data \
  )

一般都不会使用该函数

Explicit

Read

显式的接口代码最显著的特征是使用Read.

在Autosar标准中有介绍Rte_Read函数

函数原型:

Std_ReturnType
Rte_[Byps_]Read_<p>_<o>(
[IN Rte_Instance <instance>],
OUT <data>,
[OUT Std_TransformerError transformerError],
[OUT uint8* metaDataPtr])

此处很明显的差异,Read函数中没有Runnable的定义,也就是说,Read函数和Runnable无关
调用接口读取时,是直接读取的参数值,没有经过中间变量,这样可以保证数据的实时性

此处Out <data>传回接收到的数据,通过指针进行传递。指针必须保持有效,直到API调用返回
返回值RTE_E_OK表示接收成功,RTE_E_INVALID表示数据无效,其他的可以参考规范,在传递数据时一般不会考虑返回值,在传递总线信号时,调用Com_ReceiveSignal可以参考返回值

其他的参数和上面的类似。一般也用不到。

例如,使用Port名称为Port_Test,Data element名称为Data_Test则该接口生成的定义为:

 #  define Rte_Read_Port_Test_Data_Test( data )  ((*(data)) = Rte_Rx_Test_Data)

读取代码:

  (void)Rte_Read_Port_Test_Data_Test(&Test_Read_Data);

调用时传递变量地址,提供给指针赋值。

Write

显式的接口代码最显著的特征是使用Write.

在Autosar标准中有介绍Rte_Write函数

函数原型:

Std_ReturnType
Rte_[Byps_]Write_<p>_<o>([IN Rte_Instance <instance>],
IN <data>,
[IN Std_TransformerForward forwardedStatus],
[IN uint8* metaDataPtr],
[OUT Std_TransformerError transformerError])

Write函数和Read函数一样,也没有Runnable的定义。通过传递IN <data> 来写入数据。

传递的类型可以是变量也可以是指针
例如,使用Port名称为Port_Test,Data element名称为Data_Test则该接口生成的定义为:

 #  define Rte_Write_Port_Test_Data_Test( data )  (Rte_Test_Write_Data = data)

写入代码:

    Rte_Write_Port_Test_Data_Test(Test_data);

此处传递的参数是值,如果是传递的数组的话,需要传递地址。

区别与使用场景

总结一下两种方式的差别:

1.定义名称不同,implicit方式API函数中会带I,且会加入Runnable的名称

2.implicit方式不直接操作数据,在进入runnable之前RTE为数据建立副本,在runnable运行结束之后RTE把副本数据拷贝到实际数据地址。而Explicit方式直接访问数据地址

使用场景:

implicit方式适用于有一致性要求的数据组,Explicit方式适用于实时性要求高的数据

总结

RTE作为SWC和BSW的交互接口,内容还是非常多的。有时间再慢慢总结用过的API。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~ 你的鼓励是对小弟的最大支持~~~ 建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM + MySQL + Vue2.x + ElementU 图书管理系统(期末作业)

图书管理系统 项目介绍 &#x1f525; SSM MySQL Vue2.x ElementUI &#x1f525; 本项目使用 Idea 开发工具采用当前最火的Java Web前端框架开发&#xff0c;在保证质量的同时界面美观&#xff0c;交互友好&#xff0c;实在是期末大作业的首选项目。 软件架构 使用软…

HashMap源码详解

文章目录 简单介绍提出问题流程说明及验证put元素的流程怎样找到要存储的下标位置的?什么时候会扩容? 加载因子、阈值这些有什么含义?怎样扩容的?扩容的流程.链表可以转成红黑树, 那会从红黑树转成链表吗?什么时候会从链表转成红黑树 小总结 简单介绍 HashMap是Java中最最…

Metal入门学习:绘制纹理图片

一、编程指南PDF下载链接(中英文档&#xff09; 1、Metal编程指南PDF链接 https://github.com/dennie-lee/ios_tech_record/raw/main/Metal学习PDF/Metal 编程指南.pdf 2、Metal着色语言(Metal Shader Language:简称MSL)编程指南PDF链接 https://github.com/dennie-lee/ios_te…

Linux服务器丨重测序数据分析常用软件安装指南

重测序分析软件安装指南 重测序&#xff08;resequencing&#xff09;是指对已知基因组进行高通量测序&#xff0c;以检测个体或种群的遗传变异&#xff0c;从而研究基因组的结构和功能。与全基因组测序不同&#xff0c;重测序通常只对一部分基因组进行测序&#xff0c;例如外显…

【2023 雷泽杯 · Misc】我是签到题

一道图片隐写题 目录 一、题目 二、思路 1.010editor查看源码 2.检索头部关键字段 3.图片隐写——高度隐写 一、题目 看不到这个图片对吧&#xff0c;这就是题目原本的样子。 二、思路 1.010editor查看源码 很明显的rar特征&#xff0c;尝试将后缀改成rar后打开。 发…

《Java就业班体系结构.pdf》:从入门到精通,掌握Java开发的终极指南,成为熟练高级开发者!

Java开发的终极指南 第1阶段&#xff1a;JAVA开篇第2阶段&#xff1a;JAVA语言语法第3阶段&#xff1a;集成开发工具的使用第4阶段&#xff1a;面向对象第5阶段&#xff1a;JavaSE进阶学习第6阶段&#xff1a;数据库JDBC第7阶段&#xff1a;前端精讲第8阶段&#xff1a;JavaEE第…

RocketMQ的学习历程(4)----消息处理 (2)

1.消费者的两种消费模式 顺序消费模式&#xff08;Sequential Consumer Mode&#xff09;&#xff1a; 在顺序消费模式下&#xff0c;消息队列中的消息按照发送的顺序被消费者顺序消费。每个消息队列只会被一个消费者线程消费&#xff0c;确保消息的顺序性。这种模式适用于需要…

【Hadoop】三、数据仓库基础与Apache Hive入门

文章目录 三、数据仓库基础与Apache Hive入门1、数据仓库基本概念1.1、数据仓库概念1.2、场景案例&#xff1a;数据仓库为何而来1.3、数据仓库主要特征1.4、数据仓库主流开发语言--SQL 2、Apache Hive入门2.1、Apache Hive概述2.2、场景设计&#xff1a;如何模拟实现Hive功能2.…

深度学习用于医学预后-第二课第四周16-17节-比较两个患者的风险

我们怎样比较两个患者的风险&#xff1f; 让我们谈谈如何比较两名患者的风险。假设我们有两个病人&#xff0c;一个50岁&#xff0c;血压162&#xff0c;另一个61岁&#xff0c;血压140。 我们可以使用生存树首先找出他们所属的组。所以我们看到第一个病人的年龄小于60&#…

【CSS 选择器应用在QSS】第二天

CSS 选择器应用在QSS 【1】元素选择器&#xff08;元素通用性&#xff09;【2】id 选择器&#xff08;唯一性&#xff09;【2.1】CSS【2.2】QSS 【3】类选择器【3.1】CSS【3.2】QSS 【4】类选择器&#xff08;只针对指定元素&#xff09;【4.1】CSS【4.2】QSS 【5】通用选择器【…

iptables 防火墙二

目录 SNAT 原理与应用SNAT原理&#xff1a;修改数据包的源地址。 SNAT 实验DNAT原理与应用DNAT原理&#xff1a;修改数据包的目的地址。DNAT转换前提条件&#xff1a; DNAT 示例 SNAT 原理与应用 SNAT 应用环境&#xff1a;局域网主机共享单个公网IP地址接入Internet&#xff…

MyBatis技术练习

一、模仿教程练习增删改查&#xff0c;自己完成一个新表相关操作 1、配置fkxml文件 我们这里的增删改查sql语句必须对应我们自己创建的表 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.…

实测有效:由于找不到MSVCP140.dll,无法继续执行代码

从解决实际问题的角度上&#xff0c;推荐两种实测有效的方法。 先来说一下msvcp140.dll是什么&#xff1f; msvcp140.dll 是 Microsoft Visual C Redistributable for Visual Studio 2015 库文件的一部分。这个文件是一些需要 Visual Studio 2015 支持的程序所必需的。 如果…

(C语言版)力扣(LeetCode)题库1-5题解析

力扣&#xff08;LeetCode&#xff09;题库1-5题解析 1.两数之和题目解析 2.两数相加题目解法 3.无重复字符的最长字串题目解法 4. 寻找两个正序数组的中位数题目解法 5. 最长回文子串题目解法 结语 1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff…

Java基础--->并发部分(3)【JUC、AQS】

文章目录 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;AQS实现原理AQS操作重点方法 Java并发容器JUC&#xff08;java.util.concurrent&#xff09;ConcurrentHashMapCopyOnWriteArrayList AQS&#xff08;AbstractQueuedSynchronizer&#xff09; AbstractQueuedSy…

如何从其他ETL工具迁移到ETLCloud上?

ETL数据集成工具主要用于将来自不同数据源的数据整合到一个单一的、一致的数据存储库或将数据分发到不同的数据源中&#xff0c;同时也可以把数仓中的数据通过ETL反向输出给业务系统使用。它可以帮助企业解决数据共享问题&#xff0c;同时有效地管理和利用海量数据&#xff0c;…

DAY 61 MySQL高级SQL语句

高级SQL语句&#xff08;进阶查询&#xff09; 先准备2个表 一个location表 use market;create table location(Region char(20),Store_Name char(20));insert into location values(East,Boston);insert into location values(East,New York);insert into location values(W…

python数据可视化显示(附代码)

Python是一种非常流行的编程语言&#xff0c;具有广泛的应用领域&#xff0c;包括数据可视化。在数据可视化中&#xff0c;Python提供了多种工具来帮助用户创建各种类型的图表、图形和可视化效果。本文将介绍Python数据可视化的基本概念、工具和技术&#xff0c;并提供代码示例…

CustomTkinter:【二】颜色和主题、外观模式、缩放、包装

GitHub地址: https://github.com/TomSchimansky/CustomTkinter 官网&#xff1a; https://customtkinter.tomschimansky.com/ 官方教程文档&#xff1a;https://customtkinter.tomschimansky.com/documentation/ 目录 1、颜色和主题2 、外观模式3 、缩放4、包装 1、颜色和主题 …

2023/5/21周报

目录 摘要 论文阅读 1、标题和现存问题 2、各个结构 3、基于GNN-LSTM-CNN 网络轨迹预测模型 4、实验准备 5、实验结果 深度学习 1、费舍尔判别 2、步骤具体化 3、GCN 总结 摘要 本周在论文阅读上&#xff0c;阅读了一篇基于GNN-LSTM-CNN网络的6G车辆轨迹预测算法的…