当前位置: 首页 >  地方动态  >   >  正文

RTOS实现双核MCU消息通信

  • 2023-06-08 04:09:15 来源:strongerHuang

手机电脑多核的CPU你可能经常看见,但多核的单片机相对来说就不那么常见了。随着需求的增加、技术的进步,单片机已不再局限于单核了,因此,近几年陆续出现了双核的单片机了。 你可能会好奇,双核单片机之间怎么通信?其实,通信的方式和方法有很多种。本文就给大家描述一下:使用FreeRTOS消息缓冲区,实现简单的非对称多处理(AMP)核心到核心通信,结合STM32H7(M4和M7) 双核处理器为例。

概述

实现STM32H7双核之间通信是FreeRTOS官方提供的一个方案,是基于FreeRTOS消息缓冲区,该消息缓冲区是无锁循环缓冲区,可以将大小不同的数据包从单个发送方传递到单个接收方。 说明,该消息缓冲区仅提供数据的传输,不提供通信相关协议处理。


(相关资料图)

基本原理

实现双核之间通信基本原理:发送和接收任务位于非对称多处理器(AMP)配置中的多核微控制器(MCU)的不同内核上,这意味着每个内核都运行自己的FreeRTOS程序。 同时,一个内核在另一个内核中具有生成中断的能力,以及两个内核都有访问的内存区域(共享内存)。消息缓冲区以每个内核上运行在应用程序已知的地址置在共享内存中,如下图: 理想情况下,还将有一个内存保护单元(MPU),以确保只能通过内核的消息缓冲区API来访问消息缓冲区,并最好将共享内存标记为不可被其他程序占用。

单消息代码描述

这里官方提供了实现该方案的基础代码(仅供参考)。 将数据发送到流缓冲区的代码:

xMessageBufferSend(){    /* If a time out is specified and there isn"t enough    space in the message buffer to send the data, then    enter the blocked state to wait for more space. */    if( time out != 0 )    {        while( there is insufficient space in the buffer &&               not timed out waiting )        {            Enter the blocked state to wait for space in the buffer        }    }    if( there is enough space in the buffer )    {        write data to buffer        sbSEND_COMPLETED()    }}
从流缓冲区读取数据的代码:
xMessageBufferReceive(){    /* If a time out is specified and the buffer doesn"t    contain any data that canbe read, then enter the    blocked state to wait for the buffer to contain data. */    if( time out != 0 )    {        while( there is no data in the buffer &&               not timed out waiting )        {            Enter the blocked state to wait for data        }    }    if( there is data in the buffer )    {        read data from buffer        sbRECEIVE_COMPLETED()    }}
如果任务在xMessageBufferReceive()中进入阻塞状态以等待缓冲区包含数据,则将数据发送到缓冲区必须取消阻塞该任务,以便它可以完成其操作。 当xMessageBufferSend()调用sbSEND_COMPLETED()时,任务将不受阻碍。 ISR通过将消息缓冲区的句柄作为参数传递给xMessageBufferSendCompletedFromISR()函数来解除对任务的阻塞。 如图箭头所示,其中发送和接收任务位于不同的MCU内核上:1.接收任务尝试从空的消息缓冲区中读取数据,并进入阻止状态以等待数据到达。2.发送任务将数据写入消息缓冲区。3.sbSEND_COMPLETED()在正在执行接收任务的内核中触发一个中断。4.中断服务例程调用xMessageBufferSendCompletedFromISR()来解除阻止接收任务,该任务现在可以从缓冲区读取,因为缓冲区不再为空。

多消息代码描述

当只有一个消息缓冲区时,很容易将消息缓冲区的句柄传递到xMessageBufferSendCompletedFromISR()中。 但是要考虑有两个或更多消息缓冲区的情况,ISR必须首先确定哪个消息缓冲区包含数据。如果消息缓冲区的数量很少,则有几种方法可以实现:

如果硬件允许,则每个消息缓冲区可以使用不同的中断线,从而使中断服务程序和消息缓冲区之间保持一对一的映射。

中断服务例程可以简单地查询每个消息缓冲区以查看其是否包含数据。

可以通过传递元数据(消息是什么,消息的预期接收者是什么等等)以及实际数据的单个消息缓冲区来代替多个消息缓冲区。

但是,如果存在大量或未知的消息缓冲区,则这些技术效率不高。 在这种情况下,可伸缩的解决方案是引入单独的控制消息缓冲区。如下面的代码所示,sbSEND_COMPLETED()使用控制消息缓冲区将包含数据的消息缓冲区的句柄传递到中断服务例程中。 使用sbSEND_COMPLETED()的实现:

/* Added to FreeRTOSConfig.h to override the default implementation. */#define sbSEND_COMPLETED( pxStreamBuffer ) vGenerateCoreToCoreInterrupt( pxStreamBuffer )/* Implemented in a C file. */void vGenerateCoreToCoreInterrupt( MessageBufferHandle_t xUpdatedBuffer ){size_t BytesWritten.    /* Called by the implementation of sbSEND_COMPLETED() in FreeRTOSConfig.h.    If this function was called because data was written to any message buffer    other than the control message buffer then write the handle of the message    buffer that contains data to the control message buffer, then raise an    interrupt in the other core.  If this function was called because data was    written to the control message buffer then do nothing. */    if( xUpdatedBuffer != xControlMessageBuffer )    {        BytesWritten = xMessageBufferSend(  xControlMessageBuffer,                                            &xUpdatedBuffer,                                            sizeof( xUpdatedBuffer ),                                            0 );        /* If the bytes could not be written then the control message buffer        is too small! */        configASSERT( BytesWritten == sizeof( xUpdatedBuffer );        /* Generate interrupt in the other core (pseudocode). */        GenerateInterrupt();    }}
然后,ISR读取控制消息缓冲区以获得句柄,将句柄作为参数传递到xMessageBufferSendCompletedFromISR()中:
void InterruptServiceRoutine( void ){MessageBufferHandle_t xUpdatedMessageBuffer;BaseType_t xHigherPriorityTaskWoken = pdFALSE;    /* Receive the handle of the message buffer that contains data from the    control message buffer.  Ensure to drain the buffer before returning. */    while( xMessageBufferReceiveFromISR( xControlMessageBuffer,                                         &xUpdatedMessageBuffer,                                         sizeof( xUpdatedMessageBuffer ),                                         &xHigherPriorityTaskWoken )                                           == sizeof( xUpdatedMessageBuffer ) )    {        /* Call the API function that sends a notification to any task that is        blocked on the xUpdatedMessageBuffer message buffer waiting for data to        arrive. */        xMessageBufferSendCompletedFromISR( xUpdatedMessageBuffer,                                            &xHigherPriorityTaskWoken );    }    /* Normal FreeRTOS "yield from interrupt" semantics, where    xHigherPriorityTaskWoken is initialised to pdFALSE and will then get set to    pdTRUE if the interrupt unblocks a task that has a priority above that of    the currently executing task. */    portYIELD_FROM_ISR( xHigherPriorityTaskWoken );}
如图,使用控制消息缓冲区时的顺序:1.接收任务尝试从空的消息缓冲区中读取数据,并进入阻止状态以等待数据到达。2.发送任务将数据写入消息缓冲区。3.sbSEND_COMPLETED()将现在包含数据的消息缓冲区的句柄发送到控制消息缓冲区。4.sbSEND_COMPLETED()在正在执行接收任务的内核中触发一个中断。5.中断服务例程从控制消息缓冲区中读取包含数据的消息缓冲区的句柄,然后将该句柄传递给xMessageBufferSendCompletedFromISR()API函数以取消阻止接收任务,该任务现在可以从缓冲区读取,因为缓冲区不再存在空的。 当然,以上仅提供基础原理和方法,具体实现需结合项目实际情况。更多相关内容,请参看官方相关资料。审核编辑:汤梓红

标签:

最新推荐

RTOS实现双核MCU消息通信

RTOS实现双核MCU消息通信-手机、电脑多核的CPU你可能经常看见,但多核

3天假期后要连上6天班!端午假期首日火车票明日开售_环球热头条

3天假期后要连上6天班!端午假期首日火车票明日开售

孚能科技(688567.SH)股东深圳安晏减持期满未减持|环球热资讯

孚能科技(688567 SH)股东深圳安晏减持期满未减持智通财经APP讯,孚能

藏不住了!浙江这座海滨小城登上央视,居然有这么多宝藏小吃_当前看点

潮新闻客户端记者徐雨阳浙江又一座宝藏小城登上央视啦!6月2日,CCTV-4

只要不是故意泄露国家秘密就无关紧要_无关紧要的意思 天天热点

想必现在有很多小伙伴对于无关紧要的意思方面的知识都比较想要了解,那

ASMPT尾盘涨超3% 开源证券首予买入评级|今日看点

ASMPT(00522)尾盘上涨3 01%,现报73 55港元,成交额1 158亿港元。 

上海市消保委呼吁制定细化外卖包装收费规则 把选择权交给消费者

收费不合理、浪费等外卖包装问题一直以来受到关注。上海市消保委7日指

关工厂大裁员 签军令破楼兰 上汽陈虹这次真急了|全球微资讯

“我们要通过目标层层分解、压力层层传递、责任层层落实,传递出‘不破

华商基金看行业之人工智能:为什么中长期要关注“卖铲子的人”

伴随ChatGPT在多场景的广泛深入地应用,人工智能的想象空间得到显著放

嫦娥5号月球探测器_嫦娥5号什么时候返回地球

想必现在有很多小伙伴对于嫦娥5号什么时候返回地球方面的知识都比较想

梯形的面积等于平行四边形面积的什么_梯形的面积等于平行四边形的一半对吗

想必现在有很多小伙伴对于梯形的面积等于平行四边形的一半对吗方面的知

当前焦点!高考考场是如何防作弊的?

各类大型考试不仅是广大学子知识比拼的舞台,也是通信圈作弊与反作弊技

6月7日山东宏洋化学纯碱最新报价

6月7日山东宏洋化学纯碱报价暂稳,轻质纯碱执行2150元 吨,较上一交易

华阴市城关初级中学 多措并举助力教育教学高质量发展

党建引领聚焦课堂。充分发挥党员教师的先锋模范作用,引领教师立足课堂

【护航高考】“幸亏遇到了你们!”

高考期间一道道忙碌的身影一幅幅感动的画面在许多不经意的地方一抹暖心

系统教程篇:设置的系统还原点不起作用的原因

出现还原点故障的可能原因入如下:1 受“系统还原”监视的分区中可用磁

硬核科技论 | 高通8295:算力暴涨8倍可带11块屏/真不是“马甲” 天天速看料

上次我们聊了曲面屏,聊完之后我就试到了一款配有曲面屏的新车,屏幕确

天津市气象台发布雷雨大风蓝色预警/IV级/一般【2023-06-07】

天津市气象台于2023年06月07日15时20分发布雷雨大风蓝色预警信号:预计

兴华消费精选6个月持有期混合增聘崔涛 冷文鹏离任-环球热资讯

兴华消费精选6个月持有期混合增聘崔涛冷文鹏离任

渤海化学:全资子公司渤海石化拟投建丙烯酸酯和高吸水性树脂新材料项目 环球热文

金融界6月7日消息渤海化学(行情600800,诊股)公告,全资子公司渤海石化

土耳其里拉持续贬值 再创历史新低-环球动态

当地时间6月4日,土耳其新任财政部长穆罕默德·希姆谢克表示,土耳其将

猎人的生存日记加强版暴君在哪_猎人的生存日记加强无敌版暴君

1、玩家们可以先杀掉城堡底下的石像怪,得到红宝石,就可以使用红宝石

3天假期后要连上6天班!端午假期首日火车票明日开售

3天假期后要连上6天班!端午假期首日火车票明日开售

凯美特气(002549.SZ)子公司惠州凯美特例行停车检修完成并复产|热门看点

智通财经APP讯,凯美特气(002549 SZ)发布公告,公司全资子公司惠州凯美

厦门怪坡在哪里坐公交车能到吗_厦门怪坡在哪里 播报

1、怪坡在文屏那边。2、在文屏站下车后往上坡方向走10分钟左右就到以下

外交部:日本政府一再为福岛核污染水洗白,事实却一再打脸

日本经济产业省曾提出过5种方案,邻国专家也提出过长期储存等更为安全

ASMPT尾盘涨超3% 开源证券首予买入评级 新消息

ASMPT(00522)尾盘上涨3 01%,现报73 55港元,成交额1 158亿港元。 

最新预警!雷雨大风!|焦点资讯

天津市气象台于2023年06月07日15时20分发布雷雨大风蓝色预警信号:预计

第五元素里面所有的歌曲?-世界微速讯

一、第五元素里面所有的歌曲?《第五元素》插曲-Thedivadance那个外星

小白兔的作文350多字_小白兔的作文-每日看点

1、我爱小白兔我养过许多小动物,有小金鱼、小乌龟、小狗、小猫、小鸟

每日讯息!硬核科技论 | 高通8295:算力暴涨8倍可带11块屏/真不是“马甲”

上次我们聊了曲面屏,聊完之后我就试到了一款配有曲面屏的新车,屏幕确

苏州相城区hpv疫苗预约公众号 观速讯

苏州市相城区第三人民医院预约平台:苏州市相城区第三人民医院微信公众

焦点短讯!克扣供应商10%货款?长安汽车:不实 已报案

6月7日,长安汽车(000625 SZ)发布关于网传《致长安汽车采购部的申诉

山雨欲来风满楼,珠海商管19.8亿元股权被冻结,王健林曾称有困难|全球速递

近日,大连万达集团股份有限公司(下称“万达”)新增两则股权冻结信息

【世界速看料】塔塔Nexon电动车将于明日亮相并于2020年初推出

塔塔汽车将于明天发布NexonEV的生产规格版本。Nexon电动车是塔塔400万

环球快消息!纽威股份:纽威集团拟减持不超2%公司股份

【纽威股份:纽威集团拟减持不超2%公司股份】纽威股份(603699)6月7日晚

6月7日江苏新海硫磺报价平稳_全球消息

6月7日,江苏新海石化有限公司工业硫磺(液硫)报价640元 吨,5月30日

大义凛然形容谁_大义凛然可以形容哪些人 今日要闻

想必现在有很多小伙伴对于大义凛然可以形容哪些人方面的知识都比较想要

当前资讯!23旭越惠诚2优先C票面利率为3.5000%

23旭越惠诚2优先C票面利率为3 5000%

短视频和直播成读者购书新方式,抖音电商年销售图书2.5亿单

抖音电商5月16日在广州举办了第三届生态大会,公布了一系列的数据。在

一月四场,大众酱香的命题,容大·土豪金满分领答?

5月24日,容大酱酒·土豪金来到了福建厦门,以“容·耀无止境”为主题举

原神3.8深渊有什么[多图]

原神3 8深渊有什么?据悉,原神3 8版本的深渊阵容已经公布了,玩家需要

环球今头条!名师点评海南高考作文:降低审题难度 让考生有话说

点击查看海南学校权威数据库海南侨中高级语文教师宋献良:作文题目降低

关注:御驾被拦还被老妇人怒骂,朱元璋为何愧疚赔礼并为其养老送终?

御驾被拦还被老妇人怒骂,朱元璋为何愧疚赔礼并为其养老送终?,导读:

风景在路上作文500字

风景在路上作文500字在上个暑假的时候,我和家人们一起去泰国玩,而让

关于奶粉的文案

1、想和你喝酒是假,想醉你怀里是真。2、希望我能成为你的小众喜好,藏

东高科技:猴痘病毒概念股闻风而动|焦点短讯

近日,北京市医疗机构报告两例猴痘病毒感染病例,其中一例为境外输入病

开心文案

开心文案1、愿你有清晨的粥,能解昨夜的酒。2、生活真的很奇妙,活着活

X 广告
X 广告

精彩放送

今日热闻!今天高考,为每一位追梦少年加油!

晨鸣纸业:目前自制浆较进口商品浆仍有一定优势

武陵山环线高速公路(关于武陵山环线高速公路介绍)

李云泽会见美国花旗集团首席执行官范洁恩

风油精涂哪里提神醒脑(十大提神醒脑小零食)|全球热议

环球热点评!泸州:保护赤水河 长效治水水长清

亿华通布局上游制氢领域 氢能科技公司正式成立_前沿热点

一起来看看视频怎么快速转音频吧

午评:创业板指跌1.32% CPO、算力概念大涨-全球快报

国外最大的CSGO交易平台是哪个 最新CSGO饰品交易排行榜公布 世界热点

【环球新视野】2023年南宁端午节龙舟赛参赛条件

怀孕能喝维c泡腾片吗_维c泡腾片能天天喝

高尔夫界的NBA来了!美国职业高尔夫巡回赛同意与沙特支持的LIV合并-每日看点

世界热资讯!锂电、电解液概念表现强势,中证1000ETF 159633涨0.12%

wps首页不显示页码_wps首页不显示页码 当前聚焦

无锡近万名环卫工人将享免费早餐

天天热点!美股三大指数低开 纳指跌0.25%

下一代起亚Picanto承诺改进技术和多功能性

世界畅销书排行榜前十名_畅销书排行榜前十名2018

口误、错别字,江疏影热搜不断,王传君曾评价她:只剩下平庸

安德烈·波佐 当前消息

环球热门:乐东成立金融法治服务中心 推进金融纠纷多元化解

【世界速看料】Novo Nordisk Applies for Approval of Game-changing Weight-loss Drug Simeglerotide in China

当前热议!无彩色_关于无彩色介绍

华宝新能:Jackery电小二销量和销售额位于户外电源品类第一|每日热闻

【热闻】三寄一加是什么意思 三寄一加原则是什么

湘西州:“非遗+就业” 激发乡村振兴新活力 天天新动态

安德森·格拉西亚尼·德·马托斯·席尔瓦

唐永胜将军答中评:美方应改正错误做法

6月6日大公司动向追踪:百度推出代码编写助手“Comate”,科大讯飞6月9日发布“讯飞星火认知大模型”V1.5

全球即时看!2023上海崇明区爱心暑托班大学生志愿者招募

每日时讯!96333属于哪个部门_96333

AMD(AMD.US)数据中心业务或迎拐点 获机构大幅上调目标价至150美元-天天热资讯

环球报道:拒不道歉,知名大 V 被强制执行!

环球今日讯!网上竞标平台_竞标网

高铁df座位在一起吗_高铁df座位在一起 当前快播

全球球精选!证监会同意华虹宏力科创板IPO注册

环球今头条!黄焖鸡米饭的酱料配方是什么?

伊思君凯是哪个国家的品牌_什么档次怎么样|当前聚焦

环球快资讯丨博世天然气壁挂炉价格_天然气壁挂炉价格

揭秘涨停 | 近49万手买单抢筹工业母机概念股!地产链热度高增,人气股斩获12连板

【环球新视野】亚洲电视控股:将于6月6日开始进入电商直播业务

hotmail邮箱注册_hot mail_天天快看点

通威股份:拟投建年产25GW太阳能电池暨20GW光伏组件项目

交学费当主播骗人的吗(交快手主播的学费能给退吗)

今日落雁泓真的是李白写的吗_李白落雁泓

浦发银行南宁分行开展“守住钱袋子-人民币的奇妙之旅”教育宣传活动|全球热资讯

银杏树叶像什么_银杏叶有什么用处

实时:海航科技:6月6日召开董事会会议

世界播报:6月7日、11日供电暂时中断!涉及杭州钱塘新区这些区域

Copyright ©  2015-2022 现在律师网版权所有  备案号:粤ICP备18023326号-5   联系邮箱:855 729 8@qq.com