Autosar_RTE基础概念整理

Autosar_RTE

1.Runnables:可运行实体,被定义位由相应软件组件给出并且由RTE执行的最小代码片段或者指令片段

1.1.应用层中SW-C的类型
(1)传感器/执行器软件组件
(2)复合软件组件
(3)应用软件组件
(4)校准参数组件

1.2 AUTOSAR 虚拟功能总线VFB接口
RTE:运行时环境,是VFB接口特定于某个ECU的具体实现

  1. IPO模型:输入处理输出
    软件组件:应用SWC组件和传感器执行器组件
    2.1 一个SWC包含以下各项
    端口
    内部的具体实现行为Internal Behavior,描述SWC的具体行为
    RunnableEntities 运行实体实际上就是一个函数,由这个SWC提供
    RTEEvents:可以触发RunnableEntities的运行
    Timing Event:设置Timing Event,Runnable Event会周期的触发执行,Runnable会被映射到Os task,因为Os Task可能有多个Runnables
    OperationInvokedEvent
    DataReceivedEvent
    2.2 创建软件组件
    类型设计和实列化->多重实列化
    软件组件的类型
    原子软件组件
    复和组件

  2. 3.1 通过VFB,RTE支持两种基本的通信方式
    Client-Server:提供函数调用
    Sender_Receiver:提供信息传递,SWC配置相应的端口来提供两种demo
    Intra-Partition 进一步包括认为内和任务间,前者用于映射到同一操作系统任务的组件,而在后者中映射到不同的任务
    分区间通信发生在属于不同分区但位于同一ECU中的组件之间,因此跨域内存隔离边界
    最后ECU间的通信通常发送在不同的ECU间,并且涉及通过车辆总线进行传输,因此本质上是并发且不可靠的
    3.2 SR和CS的接口
    Sender/Receiver introduction:发送者-接收者通信:
    隐式数据读取访问:接收器可以运行访问数据副本,该副本在接收器执行期间将保持不变
    显示数据读取访问:允许可运行的接收器执行启用轮询行为的非阻塞API调用。在这种模式下,接收者需要明确的请求数据才能接收他
    wake up for wait point:与显示访问类似,允许可运行的接收器显示请求数据,但是不是使用非阻塞API调用而是使用阻塞调用,一旦数据可用,调用就会返回
    RTE在新数据到达的时候自动调用接收器可运行实体的可运行实体的激活,然后为了访问新到达的数据,接收者需要使用隐式或者显示数据读取访问
    3.3 SR通信方式
    一对一或者一对多的通信方式
    Explicit方式
    当调用显性发送和接收的API后,数据的接收和发送会立即发生
    RTE直接访问数据
    适用于是实现要求高的

<think>嗯,用户的问题聚焦在AUTOSARRTE的代码函数构成上。从ta的表述“可能是为了学习其架构或进行相关开发”来看,用户应该是个汽车电子领域的开发者或学习者,需要深入理解RTE的实现机制。这类技术问题通常出现在两种场景:要么是新人要系统性学习AUTOSAR架构,要么是老手在做具体开发时遇到了底层实现问题。用户引用了四份资料,但其中三份(RTE概述、事件机制、IRV)都是概念性描述,只有引用[3]涉及工具链配置参数。这说明用户可能已经掌握了基础概念,现在需要向下钻取实现层面的知识。尤其值得注意的是ta特意强调“代码函数构成”,这比单纯问“RTE如何工作”要更技术向。整理下用户可能的深层需求:1架构层面:想知道RTE如何组织各种通信函数、管理实体和接口2开发实操:可能需要手写RTE适配层或调试生成的RTE代码3性能优化:从引用[3]提到的优化模式看,ta可能关心代码生成策略用户没有明确说明开发场景,但提到“函数构成”通常会关联到内存分配和调度开销。可以补充些冷知识:RTE函数调用在单核ECU上通常5-15个时钟周期,多核会翻倍。这点虽然用户没问,但对性能敏感的开发很重要。在回答策略上要避免两个坑:第一不能简单堆砌函数名(比如只列Rte_Write_PortName这种模板),必须说明设计逻辑第二要注意AUTOSAR版本差异(用户没提版本,按惯例默认4.x)从技术储备看需要覆盖:核心函数类别(通信、调度、管理)隐藏机制(如Rte_InternalBuffer是工具生成的临时内存池)多核通信特有的路由函数优化模式的影响(速度优先时函数会内联汇编)用户引用的IRV概念是个关键切入点,可以借此展开静态数据管理函数群。另外ta上次没问但可能需要的知识点:RTE函数命名规范(venderID位置)、错误回调函数扩展方式。这些都应该在回答里埋好线索。最后用IRV当案例说明函数级交互很合适——既呼应了用户引用的[4],又能展示数据流如何穿透多个函数。不过要控制深度,避免把简单问题复杂化。</think> 以下是针对AUTOSAR RTE代码函数构成的详细解析,结合其架构设计和运行时机制分层说明: --- ### **一、RTE代码核心构成模块** RTE的代码由工具链(如Vector/ETAS/EB)基于ARXML配置自动生成,主要包含以下函数类型: #### **1. 通信接口函数** - **端口读写操作** - `Rte_Write_<Port>_<DataElement>`:写入端口数据 *例:发送信号到其他SWC* - `Rte_Read_<Port>_<DataElement>`:读取端口数据 *例:从传感器接口获取值 [^1]* - **触发事件函数** - `Rte_Send_<Port>_<Event>`:触发发送端事件 - `Rte_Receive_<Port>_<Event>`:处理接收端事件 [^2] #### **2. 运行实体(Runnable)调度函数** - **实体映射函数** - `Rte_Start_<RunnableName>`:初始化时运行 - `Rte_Stop_<RunnableName>`:终止时执行 - **事件触发入口** - `Rte_Trigger_<RunnableName>`:时间/数据事件触发时由RTE调用 [^4] #### **3. 数据管理函数** - **跨Runnable变量(IRV)操作** - `Rte_IrvWrite_<Runnable>_<Variable>`:写入IRV - `Rte_IrvRead_<Runnable>_<Variable>`:读取IRV *注:用于SWC内部多任务间数据共享 [^4]* - **缓冲区管理** - `Rte_Buffer_<DataElement>`:管理队列式数据(如FIFO) #### **4. 系统级服务** - **多核通信路由**(如涉及多ECU) - `Rte_IocSend_<Port>`:跨核数据发送 - `Rte_IocReceive_<Port>`:跨核数据接收 [^3] - **错误处理回调** - `Rte_ErrorHook()`:超时/传输失败时调用 --- ### **二、函数实现机制** #### ▶ **代码生成逻辑** ```c /* 示例:自动生成的RTE通信函数 */ Status_t Rte_Write_PortA_SignalX(uint8 value) { if (Rte_InternalBuffer.PortA.SignalX != value) { Rte_InternalBuffer.PortA.SignalX = value; // 写缓冲区 Rte_Flag_Set(TRIGGER_RunnableB); // 设置接收方激活标志 } return RTE_E_OK; } ``` - **优化模式影响**: - `RteOptimizationMode=SPEED` → 函数内联减少调用开销 - `RteOptimizationMode=SIZE` → 复用通用函数模板 [^3] #### ▶ **与OS的交互** ```mermaid graph LR OS_Task --> Rte_Scheduler Rte_Scheduler --> |事件触发| Rte_Trigger_RunnableX Rte_Trigger_RunnableX --> SWC_RunnableX ``` - RTE通过`Rte_Scheduler()`映射Runnable到OS任务 - 事件激活时,OS调用调度器执行目标实体 [^2] --- ### **三、典型代码流程示例** **场景:周期运行实体读取传感器数据** ```c /* 由RTE自动生成的调用链 */ void Rte_Trigger_Runnable_10ms() { // 1. 读取端口数据 Rte_Read_SensorPort_Temperature(&temp); // 2. 处理IRV(跨任务数据) Rte_IrvWrite_PrevTemp(prev_temp); // 3. 调用SWC内部逻辑 SWC_ProcessData(temp); // 4. 发送结果到执行器 Rte_Write_ActuatorPort_Command(output); } ``` --- ### **四、开发注意事项** 1. **无直接OS访问** SWC只能通过RTE函数交互,禁止直接调用OS API [^2] 2. **并发安全** - IRV操作需考虑数据一致性(通常依赖RTE临界区保护) 3. **配置依赖** 函数接口由ARXML中端口/事件定义决定,修改需重新生成代码 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sumerking

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

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

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

打赏作者

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

抵扣说明:

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

余额充值