哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

睿擎平臺(tái)AMP共享內(nèi)存:Linux 與 RT-Thread 高速數(shù)據(jù)交換

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

掃碼添加小助手

加入工程師交流群

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


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



一、為什么需要共享內(nèi)存通信?

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

Linux負(fù)責(zé)復(fù)雜的人機(jī)交互、網(wǎng)絡(luò)通信、文件系統(tǒng)等

RT-Thread負(fù)責(zé)實(shí)時(shí)控制、電機(jī)驅(qū)動(dòng)、傳感器采集等


兩者之間需要頻繁交換數(shù)據(jù):

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


傳統(tǒng)方案(如 RPMSG)基于消息隊(duì)列,適合小數(shù)據(jù)量、事件驅(qū)動(dòng)的通信場(chǎng)景。但當(dāng)需要傳遞大數(shù)組、實(shí)時(shí)流數(shù)據(jù)時(shí),消息隊(duì)列的多次拷貝會(huì)帶來(lái)顯著延遲和 CPU 開(kāi)銷(xiāo)。


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


二、共享內(nèi)存原理


2.1 芯片級(jí)共享內(nèi)存架構(gòu)

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

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

關(guān)鍵參數(shù):

地址:兩塊核心映射到同一物理地址 0xc000000,無(wú)需額外地址轉(zhuǎn)換

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

通知機(jī)制:通過(guò) Mailbox 硬件發(fā)送中斷,告知對(duì)方數(shù)據(jù)已就緒

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


三、Linux 側(cè)示例代碼

Linux 側(cè)應(yīng)用程序通過(guò)標(biāo)準(zhǔn) POSIX 接口訪問(wèn)共享內(nèi)存設(shè)備 /dev/amp_shm,核心操作為:open → ioctl → mmap → 讀寫(xiě)數(shù)據(jù) → 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 構(gòu)建系統(tǒng)):

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

四、RT-Thread 側(cè)示例代碼

RT-Thread 側(cè)通過(guò)設(shè)備框架(RT-Device)訪問(wèn)共享內(nèi)存,設(shè)備名為 amp-shm。MSH 命令 amp_shm_test 提供與 Linux 側(cè)對(duì)應(yīng)的所有操作。

#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ā)來(lái)的中斷)========== */ if(!strcmp(argv[2],"wait_notify")) { rt_device_control(dev, AMP_SHM_IOCTL_WAIT, RT_NULL); } /* ========== 寫(xiě)入數(shù)據(jù)(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])); /* 刷新緩存,確保數(shù)據(jù)寫(xiě)回物理內(nèi)存 */ 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); } /* ========== 讀取數(shù)據(jù)(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 緩存失效,從物理內(nèi)存讀取最新數(shù)據(jù) */ 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 對(duì)比:Linux vs RT-Thread

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


六、運(yùn)行測(cè)試

6.1 中斷通知測(cè)試

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

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


6.2 數(shù)據(jù)讀寫(xiě)測(cè)試

Linux 寫(xiě)數(shù)據(jù),RT-Thread 讀取

# Linux 側(cè) - 向共享內(nèi)存偏移 0 處寫(xiě)入 "hello"root@rc3562:/# amp_shm_device_app /dev/amp_shmwrite0"hello"# RT-Thread 側(cè) - 從共享內(nèi)存偏移 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 寫(xiě)數(shù)據(jù),Linux 讀取

# RT-Thread 側(cè) - 向共享內(nèi)存偏移 0 處寫(xiě)入 "world"msh />amp_shm_test amp-shm write0"world"# Linux 側(cè) - 從共享內(nèi)存偏移 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(.)…

七、應(yīng)用場(chǎng)景

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

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


Linux 側(cè)做運(yùn)動(dòng)學(xué)規(guī)劃和視覺(jué)處理,通過(guò)共享內(nèi)存將目標(biāo)軌跡高速下發(fā)到 RT-Thread;RT-Thread 側(cè)控制電機(jī),通過(guò)共享內(nèi)存回傳編碼器位置數(shù)據(jù)。


7.2 高速傳感器采集

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


RT-Thread 側(cè)以 100kHz 采樣率采集多路傳感器數(shù)據(jù),通過(guò)共享內(nèi)存以 10+ MB/s 的速度傳輸?shù)?Linux 側(cè)做存儲(chǔ)和分析。


八、總結(jié)

本文基于實(shí)際 SDK 源碼,完整介紹了睿擎平臺(tái) AMP 共享內(nèi)存通信機(jī)制:

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

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

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

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


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


相關(guān)文檔:

●睿擎平臺(tái)開(kāi)發(fā)文檔

●RuiChing Studio 下載

示例工程:

●Linux 側(cè):shm_demo/amp_shm_device_app.c

●RT-Thread 側(cè):

08_misc_amp_factory_default/applications/amp_shm_device_app.c


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

    關(guān)注

    88

    文章

    11817

    瀏覽量

    219534
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3234

    瀏覽量

    76508
  • 數(shù)據(jù)交換
    +關(guān)注

    關(guān)注

    0

    文章

    109

    瀏覽量

    18451
  • Amp
    Amp
    +關(guān)注

    關(guān)注

    0

    文章

    102

    瀏覽量

    48645
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1638

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何在windows和linux平臺(tái)使用RT-Thread QEMU BSP,并運(yùn)行RT-ThreadGUI示例

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

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

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

    請(qǐng)問(wèn)rt-thread怎么設(shè)置共享內(nèi)存

    rt-thread怎么設(shè)置共享內(nèi)存 ?通過(guò)內(nèi)存管理的相關(guān)函數(shù)嗎?怎么讀寫(xiě)共享內(nèi)存?
    發(fā)表于 05-05 10:19

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

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

    RT-Thread學(xué)習(xí)筆記】用memwatch排除內(nèi)存泄露

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

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

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

    RT-Thread文檔_內(nèi)存管理

    RT-Thread文檔_內(nèi)存管理
    發(fā)表于 02-22 18:30 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>內(nèi)存</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 代碼倉(cāng)庫(kù)地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?3409次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

    中新社:RT-Thread攜“平臺(tái)”亮相工博會(huì) | 媒體視角

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

    像STM32一樣輕松玩轉(zhuǎn) MPU!RT-Thread 平臺(tái) Workshop 上海站開(kāi)啟硬核實(shí)戰(zhàn)!下一城?你定!

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

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

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

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

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

    直播預(yù)告 | 平臺(tái)AMP混合部署:你的Qt界面如何“指揮”底層電機(jī)?

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

    直播 | 平臺(tái)AMP混合部署:你的Qt界面如何“指揮”底層電機(jī)?

    很多工程師在做HMI+實(shí)時(shí)控制類(lèi)產(chǎn)品時(shí),會(huì)遇到兩個(gè)棘手問(wèn)題:●Qt界面寫(xiě)好了,怎么和底層實(shí)時(shí)任務(wù)通信?●AMP混合部署架構(gòu)下,LinuxRT-Thread之間的數(shù)據(jù)交換代碼該怎么寫(xiě)?
    的頭像 發(fā)表于 03-03 19:33 ?585次閱讀
    直播 | <b class='flag-5'>睿</b><b class='flag-5'>擎</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>AMP</b>混合部署:你的Qt界面如何“指揮”底層電機(jī)?
    获嘉县| 宁明县| 喀什市| 白银市| 习水县| 石首市| 虎林市| 苗栗县| 惠来县| 新巴尔虎左旗| 济阳县| 右玉县| 杂多县| 江陵县| 西丰县| 宣威市| 太湖县| 定日县| 修水县| 广宗县| 邓州市| 密云县| 宜章县| 北川| 广丰县| 贺兰县| 肇源县| 德格县| 家居| 揭东县| 土默特左旗| 水城县| 巴马| 德令哈市| 扎囊县| 沧源| 林芝县| 砚山县| 泗洪县| 嵩明县| 曲靖市|