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>

### 关于RTE工程的介绍 RTE(Runtime Environment)是一种用于嵌入式开发环境中的工具,主要用于简化项目配置和管理的过程。通过RTE,开发者可以更方便地选择所需的硬件抽象层(HAL)、中间件以及操作系统支持等功能模块[^1]。 #### RTE的主要功能 - **自动化路径与库文件处理** 使用RTE创建工程项目时,它可以自动识别并设置必要的头文件包含路径和库文件链接选项。这些操作基于用户在RTE配置界面中选定的具体设备型号及其对应的外设驱动程序完成[^1]。 - **自动生成配置文件** 当用户选择了特定的目标芯片及所需外设之后,RTE能够生成一系列配置文件来描述当前项目的依赖关系。这不仅减少了手动编写繁琐配置的工作量,还降低了因人为错误而导致编译失败的风险[^1]。 - **处理器符号与宏定义的支持** 配置完成后,RTE还会依据所选目标平台的特点提供适合该架构下的预定义宏以及其他相关参数设定。这对于实现跨平台兼容性尤为重要[^1]。 --- ### AUTOSAR框架下RTE的应用实例 在一个典型的AUTOSAR环境中,RTE扮演着连接基础软件(BSW)同应用层(Application Layer)之间桥梁的角色。其具体表现形式之一就是ISOLAR这类专用工具所提供的工程配置服务[^2]: - 如果初次尝试构建未成功,则可通过查阅`RteErr`日志定位问题所在位置,并按照提示调整相应`.arxml`文档内容直至满足所有约束条件为止[^2]。 --- ### 基于Keil MDK-RTE搭建RT-Thread系统的实践指南 对于希望快速入门RTOS开发的新手而言,借助MDK自带的RTE机制无疑是最佳起点之一。以下是几个关键环节概述[^3]: 1. **初始化序列优化** 在某些场景下可能需要提前执行一些底层资源准备动作(比如串口),此时可采用专门设计好的API函数如 `INIT_BOARD_EXPORT(fn)` 来达成目的;否则可能会遇到系统挂起等问题。 2. **扩展命令解释器特性** 若要增强交互体验——例如启用历史命令检索能力,则只需简单修改全局开关变量即可(`FINSH_USING_HISTORY`)。这一改动通常体现在核心配置头文件当中(`rtconfig.h`)[^3]。 3. **验证成果展示** 成功加载固件镜像至目标板卡后,观察终端输出是否呈现预期标志图案作为判断标准之一。“Enjoy your RT-Thread!”标志着整个流程顺利完成. ```c // 示例代码片段:初始化串口以便调试信息输出 #include <rtthread.h> void board_init(void){ /* Add user initialization code here */ } INIT_BOARD_EXPORT(board_init); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值