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

1元 10元 50元





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



文章 咨询 工具 课程  
会员   
   
基于SysML和EA进行系统设计与建模
7月16-17日 深圳+线上
UAF架构体系与实践
7月23-24日 北京+线上
Spec Driven Development 工程化实践
7月28-29日 北京+线上
     
   
 订阅
AUTOSAR RTE多核通信:从“函数调用”到“跨核数据搬运”的真相
 
作者:CC持续攀登
 
  4   次浏览      1 次
 2026-7-7
 
编辑推荐:
本文系统介绍了AUTOSAR RTE多核通信:从“函数调用”到“跨核数据搬运”的真相。希望对你的学习有帮助。
本文来自于微信公众号老司机的智驾工程笔记,由火龙果软件Alice编辑,推荐。

前言

在很多AUTOSAR项目里,RTE经常被简化理解成一句话:

“SWC之间的函数接口生成器”

但一旦进入多核(Multi-Core)系统,这句话就不够用了。

因为RTE在多核场景下,已经不只是“函数调用层”,而是变成了:

跨核通信基础设施 + 数据一致性管理器 + 调度边界打通器

单核RTE vs 多核RTE,本质差异是什么?

单核RTE:只是“函数调用封装”

在单核系统里:

  • SWC_A → RTE_Write()
  • SWC_B → RTE_Read()

本质是:

  • 函数调用 + 内存访问

没有跨核问题,没有缓存一致性问题。

多核RTE:一切都变了

进入多核后:

  • SWC_A 在 Core0
  • SWC_B 在 Core1

问题变成:

  • 函数调用不存在了
  • 只能做跨核数据交换

此时RTE必须解决:

  • 数据如何跨核传输?
  • 谁来同步?
  • cache一致性怎么办?
  • 什么时候触发通知?

多核RTE的三种通信模式

① Shared Memory(共享内存)

这是最常见方式。

核心思想:

  • 两个核通过共享RAM交换数据

典型结构:

  • Core0写 Buffer
  • Core1读 Buffer
  • 中间靠RTE维护一致性

优点:

  • 无需复杂中断
  • 适合高频信号

缺点:

  • Cache一致性问题
  • 需要锁/原子操作
  • 容易数据竞争

② Inter-Core Communication(核间中断)

某些平台(如TriCore/ARM GIC)支持:

  • IPI(Inter Processor Interrupt)

流程:

    1. Core0写数据
    2. 触发IPI
    3. Core1被唤醒
    4. RTE读取数据

特点:

  • 更可靠,但延迟更高

③ Message Queue / Mailbox(消息队列)

在一些复杂MCU中:

  • 每核一个Mailbox
  • RTE负责封装/解封装
  • 支持优先级队列

特点:

  • 更安全
  • 可扩展
  • 适合复杂服务通信

RTE在多核中的真实职责(不是“转发函数”)

很多人低估了RTE在多核中的作用,它其实做了四件关键事情:

① 数据搬运(Data Marshalling)

RTE负责:

  • 拷贝数据结构
  • 序列化/反序列化(必要时)
  • 对齐处理

例如:

Rte_Write_Speed(value);

在多核中可能变成:

  • 写共享buffer
  • 更新sequence counter
  • 触发cache flush

② 同步控制(Synchronization)

要解决:

  • 并发写冲突
  • 读写竞争
  • 顺序一致性

常见机制:

  • Spinlock
  • Atomic flag
  • Disable Interrupt(局部)

③ 通知机制(Notification)

当Core0写完数据后:

  • 通知Core1
  • 或触发Runnable
  • 或唤醒Task

否则Core1只能“轮询死等”。

④ Cache一致性管理(最容易出问题)

这是多核RTE最“隐形但致命”的问题。

问题本质:

  • Core0写了数据,但Core1看不到

原因:

  • CPU cache未同步
  • 写入仍在store buffer
  • 没有cache flush/invalidate

RTE必须配合:

  • Cache clean
  • Cache invalidate
  • Memory barrier

Runnable在多核下是怎么跑的?

单核:

Runnable = 函数 + 调度

多核:

Runnable = 函数 + 核绑定 + 调度策略

① 核绑定(Core Affinity)

SWC通常被绑定到:

  • Core0(控制类)
  • Core1(通信类)
  • Core2(诊断/后台)

② RTE生成的“隐藏逻辑”

你看到的是:

Rte_Call_Service();

实际可能是:

  • 判断当前核
  • 判断目标SWC在哪个核
  • 选择本地调用 or 跨核通信

多核RTE通信的典型链路

我们把整个流程串起来:

场景:Core0 SWC → Core1 SWC

Step 1:SWC0调用RTE

Rte_Write_Speed(value);

Step 2:RTE判断目标核

  • 如果同核 → 直接函数调用
  • 不同核 → 进入跨核路径

Step 3:写共享内存

  • 写buffer
  • 更新index
  • 设置flag

Step 4:触发通知机制

  • IPI or Event
  • 唤醒Core1 Task

Step 5:Core1执行Runnable

  • Rte_Read_Speed()
  • 读取buffer
  • 处理数据

工程中最常见的3个坑

坑1:数据“偶现不一致”

表现:

  • 车速偶尔跳变
  • 信号偶发旧值

原因:

  • cache一致性 + 没有memory barrier

坑2:跨核延迟不可控

表现:

  • 控制抖动
  • 通信延迟变化大

原因:

  • IPI风暴
  • 调度优先级冲突

坑3:死锁(Spinlock设计错误)

表现:

  • ECU卡死
  • 某核100%占用

原因:

  • 锁嵌套
  • 锁顺序不一致

为什么RTE多核这么难?

一句话总结:

单核RTE解决“调用问题”,多核RTE解决“分布式一致性问题”

难点来自四个维度:

  • 时间(调度)
  • 空间(跨核)
  • 数据(缓存)
  • 控制(通知)

可以这样理解:

  • 单核RTE = 函数桥梁
  • 多核RTE = 分布式通信中枢

一句话总结:

在多核AUTOSAR系统里,RTE不再是“调用层”,而是“跨核实时通信操作系统的影子内核”。

 

   
4   次浏览       1 次
相关文章

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

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

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

最新活动计划
UAF架构体系与实践 7-23[北京]
SysML和EA系统设计与建模 7-16[深圳]
Spec 驱动开发(SDD)实战 7-28[北京]
AI辅助软件测试方法与实践 7-31[在线]
AI智能体开发技术实践 8-6[上海]
基于UML和EA系统分析设计 8-20[上海]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...