ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AUTOSAR-Implicit Communication Mode

2021-09-03 16:58:04  阅读:619  来源: 互联网

标签:Box RTE AUTOSAR Buffer Communication 隐式 Rte Implicit


RTE支持两种通信模式给Sender-Receiver接口,如下

  • Explicit-明确的,直接的。软件组件采用明确的RTE API实现数据元素的接收和发送 ;

  • Implicit-含蓄,隐含的。RTE在调用可运行实体(Runnable)之前自动读取一组指定的数据元素,并在可运行实体终止后自动写入(不同)数据元素集。由于可运行程序不会主动启动数据的接收或传输,因此在这里使用术语“隐式”。

Implicit Communication Mode

    “隐式”的通信模式包含两个方便的内容,即“隐式”读和“隐式”。

  • Implicit Read

   “隐式”读的关键在于可运行实体对数据的读不是直接采用RTE API去获取原始数据,而是可运行实体在启动之前RTE完成这个数据获取的过程,通常是拷贝一份原始数据供后续可运行实体使用。一种常见的场景如下,

    Step1:在刚进入Task,尚未调用runnable的期间,进行Implicit Read的准备过程,这个过程将RTE的全局变量Rte_Rx_xxx拷贝到某一任务关联的Buffer中。考虑到数据一致性的问题,这一拷贝过程还需要利用OS的resource进行保护,防止被其他任务打断。多核的场景更为复杂,需要引入Spinlock进行保护。

   Step2:随后的可运行实体通过Rte_IRead_xx访问当前任务关联的Buffer,完成对数据元素的访问过程

TASK(AppTask_10ms){   /* Box: Implicit Buffer Fill begin */   /* draSimple */   Rte_GetResource();   /* Box: DRAinit_rbuf0 begin */   /* (Data item RPort_E2E_Can_Input.DE_Signal_Rx_CRC) */   /* There were connected senders. */   /* Some intra-app connection was found. */   Rte_ImplicitBufs.isa_1._AppTask_10ms.rbuf0.value = Rte_Rx_000003;   /* Box: DRAinit_rbuf0 end */   Rte_ReleaseResource();   /* Box: Implicit Buffer Fill end */   /* Box: Implicit Buffer Initialization begin */   /* Box: Implicit Buffer Initialization end */   {      /* Box: CPT_E2E_InterSWC_1 begin */      E2E_InterSWC_1_REProc();       /* Box: CPT_E2E_InterSWC_1 end */   }...}

    约束:Implicit Read的过程不能使用在带队列(queue)的通信场景中,数据访问的方式为DataReadAccess。

  • Implicit Write

    隐式”写的过程与隐式”读是一个对称的过程,的关键在于可运行实体对数据的写不是直接采用RTE API去变更原始数据,而是可运行实体在结束运行之后由RTE完成这个数据更新的过程。一种常见的场景如下,

    Step1:可运行实体通过Rte_IWrite_xx访问当前任务关联的Buffer,完成对数据元素的更新过程,如果有多次更新以最后一次更新为准(last-is-best);

    Step2:在runnable运行结束之后,Task结束之前,进行Implicit Write的善后工作,这个过程将某一任务关联的Buffer拷贝到RTE的全局变量Rte_Rx_xxx中,甚至需要触发Com层相关的信号发送。考虑到数据一致性的问题,这一拷贝过程还需要利用OS的resource进行保护,防止被其他任务打断。多核的场景更为复杂,需要引入Spinlock进行保护。

   {      /* Box: XX_RUNNABLE begin */      E2E_RUNNABLE();      /* Box: XX_RUNNABLE end */   }   /* Box: Implicit Buffer Flush begin */   /* Box: WriteBack sbuf3 begin */   Rte_ImplWrite_E2E_SWC_PPort_XX..XX(Rte_ImplicitBufs.isa_1._AppTask_10ms.sbuf3.value);   /* Box: WriteBack sbuf3 end */

小结

    使用Implicit的好处是使用者不需要刻意的考虑数据一致性的问题,交由RTE帮忙完成,但是RTE默认的处理方式,不一定适合所有的应用场景,特别是对实时性要求极其苛刻的应用场景,使用拷贝值需要充分考量。

图片

 

标签:Box,RTE,AUTOSAR,Buffer,Communication,隐式,Rte,Implicit
来源: https://blog.csdn.net/m0_50230964/article/details/117511824

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有