欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Autosar RTE设计

Autosar RTE设计

2025/6/18 22:01:30 来源:https://blog.csdn.net/qiu421/article/details/137006459  浏览:    关键词:Autosar RTE设计

所处架构位置

后面专门出一篇讲架构的,这里先看RTE所在位置,它相当于是中间层,链接APP和BSW。

SWC通过task mapping到ECU里面。

functionality提供通讯服务。

这里我们看到RTE提供的通讯:SWC和SWC之间,SWC和BSW之间。

RTE生成依据

需要将下图两个runnable,AP_Init和AP_Dim映射到OS Task里面,依靠RTE来配置触发event运行,AP_Init是start触发,AP_Dim是read触发。

RTE里面有个执行表格来task调度,也要配置OS,包括task/event/alarm。

所以RTE完全是根据SWC和BSW生成的,如果有改变,RTE就需要重新生成。

譬如在这里,RTE根据各个模块生成的接口如下图,port其实是RTE提供的。

RTE触发runnable方式

有下列几种方式:

Init只会在开始的时候触发一次

TimingEvent定时触发

DataReceivedEvent(S/R)接收到数据触发

DataReceiveErrorEvent(S/R)接收到数据错误触发,譬如信号丢失

DataSendCompletedEvent(S/R)数据发送完成触发

OperationInvokedEvent(C/S)操作触发

AsynchronousServerCallRetÃrnsEvent(C/S)异步回调返回触发

ModeSwitchEvent和ModeSwitchAckEvent在ECU模式管理模块里面用到,跳转模式的时候触发。

ExternalTriggerOccurredEvent在另一个SWC的runnable里面触发,没有数据传输

InternalTriggerOccurredEvent在同一个SWC的runnable里面触发,没有数据传输

BackgroundEvent优先级很低的触发

对应的就是达芬奇的develop里面的配置

RTE接口

生成SR接口和SC接口,通过BSW的COM模块实现不同ECU之间的内部通讯。

其他特征:

确保数据一致性,支持复杂数据类型,一种类型实例化多个对象。

举一个实际例子,RTE触发了ECU1里面的runnable,调用Rte_Write_<Port>_<Data>()接口传到BSW层的COM模块,COM层调用Com_Sendsignal()发送数据到总线上。这时候ECU2接收到数据,COM层调用Com_ReceiveSignal()传给上面,RTE接收到数据后调用runnable2里面的Rte_Read_<Port>_<Data>()接口来把数据接收上来。

Sender/Receiver传输

Direct模式

操作都是最后的一个数据,使用RTE提供的buffer,支持1对多的传输,操作接口也是一样的。

缺点就是确定不了是谁的数据,这时候就带出了Buffered模式。

Buffered模式

该模式虽然也是操作最后一个数据,但是它在写入的时候指定了由谁来读取,转移到全局buffer里面,保证中间传输过程当中不会被修改,读写两方是确定的。它处理的接口会多一个I

Queue模式

使用队列的方式来处理数据传输,从指定的接收队列里面读取,队列深度要自己配置。有polling和waiting两种方式,waiting有超时处理。返回值是队列状态,满、空、正常。

错误/无效数据元素处理

只适用于SR传输,SC是没有的。而且只能用在不使用队列的模式,也就是Direct模式或者Buffered模式。

设置无效值的接口为Rte_Invalidate_<p>_<d>()

通过判断std_ReturnType类型返回结果是否为RTE_E_INVALID

Direct模式下接口为Rte_Read_<p>_<d>()

Buffered模式下接口为Rte_Istatus_<re>_<p>_<d>()

使用的触发模式为DataReceiveErrorEvent

Client/Server传输

只能1一对一或者多对一,Client需要Server做一些事情,就会调用Server接口去操作,做完之后把结果返回给Client。可以同步或者异步调用。

接口格式如下

同步传输

Client发起调用后一直等待Server完成。

譬如RTE提供给Client调用的接口为

Std ReturnType Rte_Call_<Port>_GetTime(uint32 *hour,uint32 *minute,uint32*second)

Server的runnable为Std ReturnType GetTime(uint32 *hour,uint32 *minute, uint32*second)

异步传输

Client是不阻塞的,有polling和waiting两种模式,waiting的话就会有超时处理。

RTE提供的接口为

Std ReturnType Rte_Result_<p>_<o>([IN/OUT | OUT<param 1>]..[IN/OUT IOUT’<param n>])

这时候就是使用AsynchronousServerCallRetÃrnsEvent(C/S)异步回调返回触发方式。

RTE保护数据一致性机制

这里只是了解一下,一般不需要我们配置。为了解决高优先级任务和低优先级任务共用一个资源被篡改的问题,RTE使用了两种解决方案。

EAs

全名Exclusive Areas,有个一专属区域,在enter和exit之间增加保护处理,譬如中断锁、资源分配之类的。需要的话在Configurator里面配置。

Rte_Enter_<name>();
/*protected statements*/
Rte_Exit_<name>();

IRVs

全名Inter-runnable variables,增加内部变量,通过调用接口来改变变量的值。需要的话在develop里面配置。

Rte_IrvWrite_<re>_<name>
Rte_IrvRead_<re>_<name>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词