AUTOSAR-Implicit Communication Mode

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默认的处理方式,不一定适合所有的应用场景,特别是对实时性要求极其苛刻的应用场景,使用拷贝值需要充分考量。

AUTOSAR-Implicit Communication Mode

 

上一篇:net开源GIS组件NetTopologySuite,计算闭合线到点距离


下一篇:联邦学习——论文研究(FedBoost: Communication-Efficient Algorithms for Federated Learning)