您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
[AutoSAR]RTE运行逻辑、通信逻辑与接口实现
 
 
   次浏览      
 2024-5-8
 
编辑推荐:
本文主要介绍了RTE运行逻辑、通信逻辑与接口实现相关内容。希望对你的学习有帮助。
本文来自于CSDN,由火龙果软件Linda编辑,推荐。

1、RTE 介绍

1)RTE是AutoSAR虚拟功能总线(Virtual Function Bus,VFB)的接口的实现,它为应用程序软件组件之间的通信提供了基本的服务,同时也便于访问包含OS的基本软件组件

2)提供基础的通信服务,支持AutoSAR的软件组件间、基础软件间、软件组件与基础软件之间的通信

3)从逻辑上RTE可以分为两部分:

软件组件间的通信

软件组件的调度

2、具体实现

1)RTE 事件触发Runnable

AutoSAR SWC不能直接访问OS,在AutoSAR应用程序中没有TASK的概念,取而代之的是被RTE所管理的构件运行体,即Runnable。但实际code中还是沿用了task形式,具体可以查看rte.c

定时器event:设定一个个周期定时器,如1ms,2ms,10ms,20ms登,时间到了触发。

FUNC(Std_ReturnType, RTE_CODE) Rte_Start(void)
{
	... ...
	/* activate the tasks */
  (void)ActivateTask(App_Task); 
  (void)ActivateTask(Task10ms); 
  (void)ActivateTask(Task1ms); 
  (void)ActivateTask(Task20ms);
  ... ...
  //设置定时alarm,1ms, 2ms, 10ms ... ...
  (void)SetRelAlarm(Rte_Al_TE_Task1ms_0_1ms,
RTE_MSEC_SystemTimer(0) + (TickType)1,
RTE_MSEC_SystemTimer(1)); (void)SetRelAlarm(Rte_Al_TE_Task2ms_0_2ms,
RTE_MSEC_SystemTimer(0) + (TickType)1,
RTE_MSEC_SystemTimer(2)); (void)SetRelAlarm(Rte_Al_TE_App_AppRunnable,
RTE_MSEC_SystemTimer(0) + (TickType)1,
RTE_MSEC_SystemTimer(10)); ... ... } //RTE controlled tasks //App_Task TASK(App_Task) { EventMaskType ev; for(;;) { (void)WaitEvent(Rte_Ev_Run_DemoApp
_DemoRunnable); (void)GetEvent(App_Task, &ev); (void)ClearEvent(ev & (Rte_Ev
_Run_DemoApp_DemoRunnable)); if ((ev & Rte_Ev_Run_DemoApp_DemoRunnable)
!= (EventMaskType)0) { /* call runnable */ AppRunnable(); } } } TASK(Task10ms) { EventMaskType ev; for(;;) { (void)WaitEvent(Rte_Ev_Cyclic_Task10ms_0_10ms); (void)GetEvent(Task10ms, &ev); (void)ClearEvent(ev & (Rte_Ev_Cyclic
_Task10ms_0_10ms)); if ((ev & Rte_Ev_Cyclic_Task10ms_0_10ms)
!= (EventMaskType)0) { //10ms swc runnable AppSiganlRunnable(); AppConfigRunnable(); AppInputRunnable(); ... ... } }

SWCs with runnables

2)通讯

可以通过RTE接口实现SWC和SWC或者SWC和BSW直接的通讯

具体如下两种接口方式:

2.1 Sender-Receiver(S/R方式)

1、S/R方式支持1:n(即一个发送方,多个接收方),n:1(即多个发送方,一个接收方)通信

2、直接调用,实际就是相当于RTE定义了一个全局变量,swc读写此变量

3、实际流程图

4、Sender/Receiver 通信 -> 不使用队列(直接访问)

RTE直接访问数据地址

1:n通信

初始值即为默认值

适用于实时性要求高的数据

接口图

5、Sender/Receiver 通信 -> 不使用队列(缓存访问)

在进入runnable之前RTE为数据建立副本

在runnable运行结束之后RTE把副本数据拷贝到实际数据地址

在runnable运行过程中只操作副本,实际数据不会改变

适用于有一致性要求的数据组

接口图

6、Sender/Receiver 通信 -> 使用队列

“查询接收” 或 “等待接收”

RTE从队列中读取数据

等待接收” 有超时处理

2.2 Client-Server(C/S方式)

1)Client调用Server端操作

2)Server端SWC中的操作一般是runnables

3)通讯方式支持同步/异步调用

同步通信

1、等待Server 端响应(Client在等待过程中停止)

2、接口

Server runnable:void GetXXXSts(XXX);

RTE Client API:Std_ReturnType Rte_Call__GetXXXSts(XXX)

异步通信

1、Client不会停止运行 (不等待结果)

2、Client 通过Rte_Result… 获得Server端响应:Polling或waiting、超时处理

3、RTE Client API:

Std_ReturnType Rte_Result_PXXX_OXXX ([IN/OUT | OUT <param_1>],…[IN/OUT | OUT <param_n>])

4、RTE可以通过接收到响应来激活Client端的runnable

SWC内部通信

同一个SWC内的、存在运行在不同Task上的runnable之间的通信,如何保证数据的一致性?(不同SWC之间的通信,无论是ECU内部还是ECU之间,都不会遇到这个问题,因为RTE会负责保证数据一致性)

解决办法:

1)专用区域(Exclusive Areas )

Entire block or RTE protected

Rte_Enter_name()

Rte_Exit_name()

2)内部变量(Inter-runnable variables)

Only variable protected

Rte_IrvWrite__

ECU和ECU之间通讯

跨ECU的数据传输,在runnable中使用Rte_Write__()这样的函数后,会需要走runnable (ECU1) ->RTE (ECU1) ->BSW (ECU1) ->外部总线->BSW (ECU2) ->RTE (ECU2) ->runnable (ECU2)

COM传输的接口函数:

生成阶段

 
   
次浏览       
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
C++高级编程 12-25 [线上]
白盒测试技术与工具实践 12-24[线上]
LLM大模型应用与项目构建 12-26[特惠]
需求分析最佳实践与沙盘演练 1-6[线上]
SysML建模专家 1-16[北京]
UAF架构体系与实践 1-22[北京]
 
 
最新文章
中央计算的软件定义汽车架构设计方案解析
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
智能汽车车用基础软件的内核和中间件
最新课程
Auto SAR原理与实践
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发(域控模式)
人工智能助力汽车行业升级
基于UML和EA进行系统分析设计
SysML和EA进行系统设计建模
更多...   
成功案例
奇瑞商用车 购买建模工具EA完全版
航空发动机研究院 购买建模工具EA完全版
联创汽车 购买建模工具EA完全版
江淮汽车 购买建模工具EA
更多...