chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

睿擎平臺AMP共享內存:Linux 與 RT-Thread 高速數據交換

RT-Thread官方賬號 ? 2026-04-22 18:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在 AMP(Asymmetric Multi-Processing,非對稱多處理)混合部署架構中,LinuxRT-Thread 運行在同一顆芯片的兩個不同核心上,如何高效地在兩個系統(tǒng)之間傳遞大數據,是一個核心問題。


上一篇文章介紹了 DSMC 總線方案,適合與 FPGA 等外部設備高速通信今天我們聚焦另一個場景——睿擎平臺 AMP 共享內存(SHM)通信,介紹 RC3562 平臺如何利用芯片內置的共享內存機制,實現 Linux 與 RT-Thread 之間的高速數據交換,并提供完整示例代碼和實測數據。



一、為什么需要共享內存通信?

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

Linux負責復雜的人機交互、網絡通信、文件系統(tǒng)等

RT-Thread負責實時控制、電機驅動、傳感器采集等


兩者之間需要頻繁交換數據:

46160288-3e33-11f1-ab55-92fbcf53809c.png


傳統(tǒng)方案(如 RPMSG)基于消息隊列,適合小數據量、事件驅動的通信場景。但當需要傳遞大數組、實時流數據時,消息隊列的多次拷貝會帶來顯著延遲和 CPU 開銷。


共享內存(SHM)的核心思想是:劃定一塊物理內存,兩個核心都能直接訪問,數據無需拷貝,延遲可降至微秒級,是 AMP 雙系統(tǒng)大數據量通信的終極方案。


二、共享內存原理


2.1 芯片級共享內存架構

睿擎平臺的 RK3562 和 RK3506 芯片在內部 SRAM 區(qū)域預留了一塊共享內存區(qū)域,兩個核心都可以直接訪問。共享內存區(qū)域布局:

4664e2c2-3e33-11f1-ab55-92fbcf53809c.png

關鍵參數:

地址:兩塊核心映射到同一物理地址 0xc000000,無需額外地址轉換

大小:2MB(0x200000),適合中等體量的數據交換

通知機制:通過 Mailbox 硬件發(fā)送中斷,告知對方數據已就緒

緩存同步: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#include#include#include#include#include#include#include#include#defineAMP_SHM_IOCTL_BASE 'A'#defineAMP_SHM_IOCTL_KICK _IO(AMP_SHM_IOCTL_BASE, 1)#defineAMP_SHM_IOCTL_GET_SIZE _IOR(AMP_SHM_IOCTL_BASE, 2, size_t)intmain(intargc,char**argv){ constchar*dev_name = argv[1]; intfd =open(dev_name, O_RDWR); if(fd

編譯方式(使用 SDK 構建系統(tǒng)):

# 使用 SDK 提供的 cmake 配置交叉編譯cd/path/to/shm_demomkdirbuild &&cdbuildcmake .. -DTOOLCHAIN_ROOT=/path/to/toolchainmake# 產出:amp_shm_device_app(部署到開發(fā)板 Linux 文件系統(tǒng))

四、RT-Thread 側示例代碼

RT-Thread 側通過設備框架(RT-Device)訪問共享內存,設備名為 amp-shm。MSH 命令 amp_shm_test 提供與 Linux 側對應的所有操作。

#include#include#defineAMP_SHM_IOCTL_GET_INFO 0x40#defineAMP_SHM_IOCTL_KICK 0x41#defineAMP_SHM_IOCTL_WAIT 0x42#defineAMP_SHM_IOCTL_MAP 0x43#defineAMP_SHM_IOCTL_UNMAP 0x44#defineAMP_SHM_IOCTL_FLUSH_CACHE 0x45#defineAMP_SHM_IOCTL_INVALID_CACHE 0x46structamp_shm_args{ void*vaddr; rt_uint32_tsize; rt_uint32_tcache_offset; rt_uint32_tcache_len;};staticintamp_shm_test(intargc,char**argv){ rt_device_tdev =rt_device_find(argv[1]); structamp_shm_argsargs = {0}; rt_device_open(dev,0); /* ========== 發(fā)送通知(RT-Thread → Linux)========== */ if(!strcmp(argv[2],"send_notify")) { rt_device_control(dev, AMP_SHM_IOCTL_KICK, RT_NULL); } /* ========== 等待通知(RT-Thread 阻塞等待 Linux 發(fā)來的中斷)========== */ if(!strcmp(argv[2],"wait_notify")) { rt_device_control(dev, AMP_SHM_IOCTL_WAIT, RT_NULL); } /* ========== 寫入數據(RT-Thread → Linux)========== */ if(!strcmp(argv[2],"write") && argc ==5) { rt_device_control(dev, AMP_SHM_IOCTL_GET_INFO, &args); rt_device_control(dev, AMP_SHM_IOCTL_MAP, &args); rt_uint8_t*vaddr = (rt_uint8_t*)args.vaddr; rt_memcpy(vaddr +atol(argv[3]), argv[4],rt_strlen(argv[4])); /* 刷新緩存,確保數據寫回物理內存 */ args.cache_offset =atol(argv[3]); args.cache_len =rt_strlen(argv[4]); rt_device_control(dev, AMP_SHM_IOCTL_FLUSH_CACHE, &args); rt_device_control(dev, AMP_SHM_IOCTL_UNMAP, &args); } /* ========== 讀取數據(RT-Thread ← Linux)========== */ if(!strcmp(argv[2],"read") && argc ==5) { rt_device_control(dev, AMP_SHM_IOCTL_GET_INFO, &args); rt_device_control(dev, AMP_SHM_IOCTL_MAP, &args); rt_uint8_t*vaddr = (rt_uint8_t*)args.vaddr; rt_uint32_toffset =atol(argv[3]); rt_uint32_tlen =atol(argv[4]); /* 使 CPU 緩存失效,從物理內存讀取最新數據 */ args.cache_offset = offset; args.cache_len = len; rt_device_control(dev, AMP_SHM_IOCTL_INVALID_CACHE, &args); for(inti =0; i < len; i++) {? ? ? ? ? ? rt_kprintf("[%2d] = %02x\n", i, *(vaddr + offset + i));? ? ? ? }? ? ? ? rt_device_control(dev, AMP_SHM_IOCTL_UNMAP, &args);? ? }?? ? return?0;}?MSH_CMD_EXPORT(amp_shm_test, amp shm test);

五、API 對比:Linux vs RT-Thread

472a7140-3e33-11f1-ab55-92fbcf53809c.png


六、運行測試

6.1 中斷通知測試

Linux 發(fā)通知,RT-Thread 等待

# RT-Thread 串口終端 - 阻塞等待 Linux 發(fā)來的中斷msh/>amp_shm_test amp-shm wait_notify# Linux 串口終端 - 發(fā)送通知到 RT-Threadroot@rc3562:/# amp_shm_device_app /dev/amp_shm send_notifysend a notify.

RT-Thread 發(fā)通知,Linux 等待

# Linux 串口終端 - 阻塞等待 RT-Thread 發(fā)來的中斷root@rc3562:/# amp_shm_device_app /dev/amp_shm wait_notify# RT-Thread 串口終端 - 發(fā)送通知到 Linuxmsh />amp_shm_test amp-shm send_notify


6.2 數據讀寫測試

Linux 寫數據,RT-Thread 讀取

# Linux 側 - 向共享內存偏移 0 處寫入 "hello"root@rc3562:/# amp_shm_device_app /dev/amp_shmwrite0"hello"# RT-Thread 側 - 從共享內存偏移 0 處讀取 16 字節(jié)msh />amp_shm_test amp-shmread016[0] =68(h)[1] =65(e)[2] = 6c (l)[3] = 6c (l)[4] = 6f (o)...(后續(xù)字節(jié)為0x00)

RT-Thread 寫數據,Linux 讀取

# RT-Thread 側 - 向共享內存偏移 0 處寫入 "world"msh />amp_shm_test amp-shm write0"world"# Linux 側 - 從共享內存偏移 0 處讀取 16 字節(jié)root@rc3562:/# amp_shm_device_app /dev/amp_shm read 0 16[00] =77(w)[01] =6f(o)[02] =72(r)[03] =6c (l)[04] =64(d)[05] =00(.)…

七、應用場景

7.1 工業(yè)機器人控制

473ce398-3e33-11f1-ab55-92fbcf53809c.png


Linux 側做運動學規(guī)劃和視覺處理,通過共享內存將目標軌跡高速下發(fā)到 RT-Thread;RT-Thread 側控制電機,通過共享內存回傳編碼器位置數據。


7.2 高速傳感器采集

474e3ab2-3e33-11f1-ab55-92fbcf53809c.png


RT-Thread 側以 100kHz 采樣率采集多路傳感器數據,通過共享內存以 10+ MB/s 的速度傳輸到 Linux 側做存儲和分析。


八、總結

本文基于實際 SDK 源碼,完整介紹了睿擎平臺 AMP 共享內存通信機制:

理解共享內存在 AMP 架構中的定位和優(yōu)勢(2MB SRAM,Mailbox 中斷通知)

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

掌握 RT-Thread 側設備框架接口(rt_device_* + IOCTL)使用方法

理解緩存同步機制(FLUSH_CACHE / INVALID_CACHE)


共享內存是睿擎平臺 AMP 雙系統(tǒng)通信的性能天花板,適合對實時性和帶寬有極致要求的工業(yè)場景。結合 DSMC(外部設備高速通信)和 RPMSG(控制命令傳輸),睿擎平臺提供了完整的 AMP 通信解決方案,開發(fā)者可以根據場景靈活選擇。


相關文檔:

●睿擎平臺開發(fā)文檔

●RuiChing Studio 下載

示例工程:

●Linux 側:shm_demo/amp_shm_device_app.c

●RT-Thread 側:

08_misc_amp_factory_default/applications/amp_shm_device_app.c


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    88

    文章

    11814

    瀏覽量

    219527
  • 內存
    +關注

    關注

    9

    文章

    3234

    瀏覽量

    76503
  • 數據交換
    +關注

    關注

    0

    文章

    109

    瀏覽量

    18449
  • Amp
    Amp
    +關注

    關注

    0

    文章

    102

    瀏覽量

    48644
  • RT-Thread
    +關注

    關注

    32

    文章

    1638

    瀏覽量

    45202
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在windows和linux平臺使用RT-Thread QEMU BSP,并運行RT-ThreadGUI示例

    開發(fā)板的情況下體驗RT-ThreadRT-Thread使用QEMU模擬了ARM vexpress A9開發(fā)板,并提供了相關的板級支持包(BSP)。本文主要介紹在windows平臺linux
    的頭像 發(fā)表于 02-08 08:50 ?1.6w次閱讀
    如何在windows和<b class='flag-5'>linux</b><b class='flag-5'>平臺</b>使用<b class='flag-5'>RT-Thread</b> QEMU BSP,并運行<b class='flag-5'>RT</b>-ThreadGUI示例

    JH-7110現已支持AMP雙系統(tǒng)(Linux + RT-Thread

    的RPMsg代碼,能夠按照協(xié)議和Linux收發(fā)數據。核間的IPI中斷和共享內存配合能實現異構核間的數據傳輸。
    發(fā)表于 01-27 15:11

    請問rt-thread怎么設置共享內存?

    rt-thread怎么設置共享內存 ?通過內存管理的相關函數嗎?怎么讀寫共享內存?
    發(fā)表于 05-05 10:19

    RT-Thread全球技術大會:RT-Thread Smart更好的兼容Linux生態(tài)

    RT-Thread全球技術大會:RT-Thread Smart更好的兼容Linux生態(tài) ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:31 ?3188次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b> Smart更好的兼容<b class='flag-5'>Linux</b>生態(tài)

    RT-Thread學習筆記】用memwatch排除內存泄露

    RT-Thread學習筆記】使用memwatch排除內存泄露
    的頭像 發(fā)表于 07-30 14:01 ?3826次閱讀
    【<b class='flag-5'>RT-Thread</b>學習筆記】用memwatch排除<b class='flag-5'>內存</b>泄露

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_內存管理

    RT-Thread文檔_內存管理
    發(fā)表于 02-22 18:30 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>內存</b>管理

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?3405次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

    中新社:RT-Thread攜“平臺”亮相工博會 | 媒體視角

    4月23日,成都國際工業(yè)博覽會拉開帷幕。中國新聞網專訪RT-Thread賽德,以“國產操作系統(tǒng)再亮劍,平臺開啟工業(yè)新時代”為題,報道了
    的頭像 發(fā)表于 04-24 11:16 ?1637次閱讀
    中新社:<b class='flag-5'>RT-Thread</b>攜“<b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b>”亮相工博會 | 媒體視角

    像STM32一樣輕松玩轉 MPU!RT-Thread 平臺 Workshop 上海站開啟硬核實戰(zhàn)!下一城?你定!

    為什么參加1零門檻體驗:我們致力于讓MPU開發(fā)如MCU般簡單易上手。2一站式掌握:從概念演示到動手實踐再到項目構思,全流程深度體驗。3業(yè)界領先技術:了解RT-Thread平臺如何革
    的頭像 發(fā)表于 08-18 17:05 ?1627次閱讀
    像STM32一樣輕松玩轉 MPU!<b class='flag-5'>RT-Thread</b> <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b> Workshop 上海站開啟硬核實戰(zhàn)!下一城?你定!

    直播預告 | 平臺AMP混合部署實戰(zhàn):如何讓LinuxRT-Thread高效協(xié)同工作

    在工業(yè)控制器、機器人或高端設備開發(fā)中,你是否正被這樣的問題困擾:實時任務(如電機控制、數據采集)需要RT-Thread的微秒級響應,但上層應用(如UI、AI算法、網絡服務)又離不開Linux的豐富
    的頭像 發(fā)表于 01-23 11:06 ?701次閱讀
    直播預告 | <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b><b class='flag-5'>AMP</b>混合部署實戰(zhàn):如何讓<b class='flag-5'>Linux</b>和<b class='flag-5'>RT-Thread</b>高效協(xié)同工作

    直播 | 平臺AMP混合部署實戰(zhàn):如何讓LinuxRT-Thread高效協(xié)同工作

    在工業(yè)控制器、機器人或高端設備開發(fā)中,你是否正被這樣的問題困擾:實時任務(如電機控制、數據采集)需要RT-Thread的微秒級響應,但上層應用(如UI、AI算法、網絡服務)又離不開Linux的豐富
    的頭像 發(fā)表于 01-27 19:41 ?634次閱讀
    直播 | <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b><b class='flag-5'>AMP</b>混合部署實戰(zhàn):如何讓<b class='flag-5'>Linux</b>和<b class='flag-5'>RT-Thread</b>高效協(xié)同工作

    直播預告 | 平臺AMP混合部署:你的Qt界面如何“指揮”底層電機?

    很多工程師在做HMI+實時控制類產品時,會遇到兩個棘手問題:●Qt界面寫好了,怎么和底層實時任務通信?●AMP混合部署架構下,LinuxRT-Thread之間的數據交換代碼該怎么寫?
    的頭像 發(fā)表于 02-27 18:18 ?359次閱讀
    直播預告 | <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b><b class='flag-5'>AMP</b>混合部署:你的Qt界面如何“指揮”底層電機?

    直播 | 平臺AMP混合部署:你的Qt界面如何“指揮”底層電機?

    很多工程師在做HMI+實時控制類產品時,會遇到兩個棘手問題:●Qt界面寫好了,怎么和底層實時任務通信?●AMP混合部署架構下,LinuxRT-Thread之間的數據交換代碼該怎么寫?
    的頭像 發(fā)表于 03-03 19:33 ?576次閱讀
    直播 | <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺</b><b class='flag-5'>AMP</b>混合部署:你的Qt界面如何“指揮”底層電機?