睿擎平台AMP共享内存:Linux 与 RT-Thread 高速数据交换

来源:RT-Thread操作系统 RTOS 13 次阅读
摘要:在 AMP(Asymmetric Multi-Processing,非对称多处理)混合部署架构中,Linux 和 RT-Thread 运行在同一颗芯片的两个不同核心上,如何高效地在两个系统之间传递大数据,是一个核心问题。 上一篇文章介绍了 DSMC 总线方案,适合与 FPGA 等外部设备高速通信。今天我们聚焦另一个场景——睿擎平台 AMP 共享内存(SHM)通信,介绍 RC3562 平台如何利用芯

在 AMP(Asymmetric Multi-Processing,非对称多处理)混合部署架构中,Linux 和 RT-Thread 运行在同一颗芯片的两个不同核心上,如何高效地在两个系统之间传递大数据,是一个核心问题。

上一篇文章介绍了 DSMC 总线方案,适合与 FPGA 等外部设备高速通信。今天我们聚焦另一个场景——睿擎平台 AMP 共享内存(SHM)通信,介绍 RC3562 平台如何利用芯片内置的共享内存机制,实现 Linux 与 RT-Thread 之间的高速数据交换,并提供完整示例代码和实测数据。

一、为什么需要共享内存通信?

在 AMP 混合部署中,Linux 和 RT-Thread 各司其职:

  • Linux负责复杂的人机交互、网络通信、文件系统等

  • RT-Thread负责实时控制、电机驱动、传感器采集等

两者之间需要频繁交换数据:

传统方案(如 RPMSG)基于消息队列,适合小数据量、事件驱动的通信场景。但当需要传递大数组、实时流数据时,消息队列的多次拷贝会带来显著延迟和 CPU 开销。

共享内存(SHM)的核心思想是:划定一块物理内存,两个核心都能直接访问,数据无需拷贝,延迟可降至微秒级,是 AMP 双系统大数据量通信的终极方案。

二、共享内存原理

2.1 芯片级共享内存架构

睿擎平台的 RK3562 和 RK3506 芯片在内部 SRAM 区域预留了一块共享内存区域,两个核心都可以直接访问。共享内存区域布局:

关键参数:

●地址:两块核心映射到同一物理地址 0xc000000,无需额外地址转换

●大小:2MB(0x200000),适合中等体量的数据交换

●通知机制:通过 Mailbox 硬件发送中断,告知对方数据已就绪

● 缓存同步:Linux 使用 msync,RT-Thread 使用 AMP_SHM_IOCTL_FLUSH_CACHE / AMP_SHM_IOCTL_INVALID_CACHE

三、Linux 侧示例代码

Linux 侧应用程序通过标准 POSIX 接口访问共享内存设备 /dev/amp_shm,核心操作为:open → ioctl → mmap → 读写数据 → msync → munmap。

#include<stdio.h>

编译方式(使用 SDK 构建系统):

# 使用 SDK 提供的 cmake 配置交叉编译

四、RT-Thread 侧示例代码

RT-Thread 侧通过设备框架(RT-Device)访问共享内存,设备名为 amp-shm。MSH 命令 amp_shm_test 提供与 Linux 侧对应的所有操作。

#include<rtthread.h>

五、API 对比:Linux vs RT-Thread

六、运行测试

6.1 中断通知测试

Linux 发通知,RT-Thread 等待:

# RT-Thread 串口终端 - 阻塞等待 Linux 发来的中断

RT-Thread 发通知,Linux 等待:

# Linux 串口终端 - 阻塞等待 RT-Thread 发来的中断

6.2 数据读写测试

Linux 写数据,RT-Thread 读取:

# Linux 侧 - 向共享内存偏移 0 处写入 "hello"

RT-Thread 写数据,Linux 读取:

# RT-Thread 侧 - 向共享内存偏移 0 处写入 "world"

七、应用场景

7.1 工业机器人控制

Linux 侧做运动学规划和视觉处理,通过共享内存将目标轨迹高速下发到 RT-Thread;RT-Thread 侧控制电机,通过共享内存回传编码器位置数据。

7.2 高速传感器采集

RT-Thread 侧以 100kHz 采样率采集多路传感器数据,通过共享内存以 10+ MB/s 的速度传输到 Linux 侧做存储和分析。

八、总结

本文基于实际 SDK 源码,完整介绍了睿擎平台 AMP 共享内存通信机制:

✅ 理解共享内存在 AMP 架构中的定位和优势(2MB SRAM,Mailbox 中断通知)

✅ 掌握 Linux 侧 POSIX 接口(open/mmap/msync)使用方法

✅ 掌握 RT-Thread 侧设备框架接口(rt_device_* + IOCTL)使用方法

✅ 理解缓存同步机制(FLUSH_CACHE / INVALID_CACHE)

共享内存是睿擎平台 AMP 双系统通信的性能天花板,适合对实时性和带宽有极致要求的工业场景。结合 DSMC(外部设备高速通信)和 RPMSG(控制命令传输),睿擎平台提供了完整的 AMP 通信解决方案,开发者可以根据场景灵活选择。

相关文档:

●睿擎平台开发文档

●RuiChing Studio 下载

示例工程:

●Linux 侧:shm_demo/amp_shm_device_app.c

●RT-Thread 侧:

08_misc_amp_factory_default/applications/amp_shm_device_app.c

相关推荐
评论区

登录后即可参与讨论

立即登录