RTOS实现双核MCU消息通信_世界新要闻
手机、电脑多核的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函数以取消阻止接收任务,该任务现在可以从缓冲区读取,因为缓冲区不再存在空的。 当然,以上仅提供基础原理和方法,具体实现需结合项目实际情况。更多相关内容,请参看官方相关资料。审核编辑:汤梓红
标签:
相关阅读
-
海联金汇:公司智能制造板块将乘新能源快速发展的大势继续聚焦汽车零部件业务,金融科技板块重点发展移动信息业务和第三方支付业务
同花顺金融研究中心6月7日讯,有投资者向海联金汇提问,请问刘董,公司
2023-06-08
精彩推荐
阅读排行
相关词
- 政法机关整治医美行业乱象 推动“颜值经济”健康发展 当前快看
- 樱花小镇迷你超市好玩吗 樱花小镇迷你超市玩法简介 世界热头条
- 全球速看:沈阳一幼儿园17名幼儿发生腹泻呕吐症状,官方通报:疑似胃肠病毒感染
- 5G商用加速培育新应用场景和商业模式 环球动态
- 首艘国产大型邮轮出坞 我国将集齐造船业皇冠三颗明珠-全球速看
- 海联金汇:公司智能制造板块将乘新能源快速发展的大势继续聚焦汽车零部件业务,金融科技板块重点发展移动信息业务和第三方支付业务
- 世界快报:薪资专家:太阳可将保罗受保障1580万延期五年支付 期间无法重签
- 财富超6亿美元!梅西赴美,边踢球边当老板:涉足7大产业
- 可转债转股划不划算?可转债如何转股划算?
- 全球讯息:本川智能(300964.SZ)监事郑小春累计减持3万股
- 天天观察:隽诺实现日产200吨RDF替代燃料,高效助力绿色循环碳减排!
- 江苏银行北京广渠门支行:关爱农民工,守住“钱袋子”-世界热文
- 洪都拉斯总统将访华 中国外交部介绍此访安排及期待
- 丝线十字绣怎么才好绣_丝线十字绣-天天聚看点
- 高考进入第二天,部分地区已公布查分时间 世界聚看点
- 环球今热点:洋河蓝色经典广告_洋河蓝色经典
- 基金买在山顶能回本吗?基金买在山顶该怎么补救?
- 跌到2900万,乌克兰面临人口危机?泽连斯基:需要更多离开的人回国
- 天天滚动:微软拟向美国国防部、NASA等机构开放GPT-4大模型
- 天士力(600535.SH):安体威颗粒获准开展用于普通感冒(风寒证)Ⅲ期临床试验
- 世界热讯:2012年以来首次下跌!英国5月Halifax房价同比下降1%
- 宠物经济方兴未艾 年增相关企业近百万家
- 全球快资讯丨禁毒宣传进校园:远离毒品,让青春充满阳光
- 焦点热议:主力资金|两市成交额大幅缩量,华工科技获主力逆势加仓9亿元
- 【天天播资讯】光山仙人球的养殖方法_仙人球的养殖方法
- 5月全球制造业PMI为48.3% 表现最亮眼者仍是亚洲国家|环球快播
- 点击方框内打钩符号怎么设置_方框内打钩符号现成的
- 苏州与北京银行签署战略合作协议 北京银行苏州分行揭牌_天天聚看点
- 中俄两军完成第6次联合空中战略巡航第二阶段任务
- 烟酰胺是什么辅酶的成分_烟酰胺是什么
- 关注:英国房价自2012年以来首次出现年度下跌
- 全球半导体生产设备销售额连续两个季度环比下滑 Q1降至268.1亿美元
- 上海市纪委监委通报4起群众身边的腐败问题
- 当前观察:“文化皖军”亮相文博会
- 邮编英文缩写方法_邮编英文缩写_全球视点
- 电脑共享文件怎么搜索_共享电脑怎么搜索对方
- 流产假期国家规定多久_流产假期 环球观点
- 世界快讯:雷雨大风+冰雹+龙卷!黑龙江省发布龙卷预警
- 梦鸽简历及个人资料简介_梦鸽简历|当前动态
- 世界热点评!虚拟数字人近日热度持续攀升 多家A股公司早已前瞻性布局
- 12306早上几点放票出来_12306早上几点放票 世界观点
- 寡助之至的下一句_寡助之至的之翻译
- 手机问题:中兴远航10怎么设置返回键
- 手机问题:vivoS9e怎么隐藏应用
- 明朝皇帝朱厚熜怎么读_朱厚熜读cong还是zong 天天热推荐
- 世界视讯!北京住建委:已购共有产权住房家庭取得不动产权证书未满5年的,不允许转让房屋产权份额
- 环球新动态:宇宙最多的两个元素是氢和什么_宇宙最多的两个元素是什么
- 天天动态:海关总署:前5个月民营企业进出口总额同比增长13.1%
- 慧博云通(301316):6月7日北向资金增持14.37万股 世界热议
- 大族数控(301200):6月7日北向资金增持5.51万股|天天热头条
- 强对流预警!黑龙江等7省份部分地区将有8至10级雷暴大风或冰雹 天天播资讯
- 天天报道:系统教程篇:让windows系统自动关闭停止响应的程序
- 天天即时:外贸“新三样”表现亮眼 传递何种信号?
- 每日看点!@端午节有出行计划的小伙伴们 该买火车票啦!
- 天天资讯:Reddit现在原生支持图像库 这是它的工作方式
- 乐东县气象台发布大雾黄色预警【Ⅲ级/较重】【2023-06-08】 头条
- 小医院大作战官网在哪下载 最新官方下载安装地址-每日热文
- 全球微速讯:愚公来了官网在哪下载 最新官方下载安装地址
- 中天精装06月07日主力资金大幅流出
- A股收评:宁德时代跌超5%,创业板指跌1.61%续创新低|天天播报
- 本川智能(300964.SZ)监事郑小春累计减持3万股
- 世界快播:中俄两军完成第6次联合空中战略巡航第二阶段任务
- 翻译英文翻译中文_昔有二翁同邑而居翻译和注释|环球即时
- 焦点消息!天奥电子:中电十所是公司的控股股东,中电天奥是中国电科的全资子公司
- 众智科技06月07日主力资金大幅流出
- 国企领导出差带“小三”逛街?中央巡视组回应:将督促查实 焦点热议
- 地铁僵尸跑者好玩吗 地铁僵尸跑者玩法简介-天天消息
- 【焦点热闻】青岛双星:公司目前主要销售渠道包括车厂配套渠道、经销商替换渠道及电商渠道,未来公司将会持续加大在新能源配套渠道及电商渠道的投入
- 台湾新冠疫情再升温 死亡日增28例较前周增四成
- 当前观察:港交所:未来内地投资者或可经“港股通”买卖人民币柜台证券
- 今日看点:系统教程篇:设置的系统还原点不起作用的原因
- 澳大利亚篮协官员给了西蒙斯最后期限 让其决定是否出战世界杯|今日讯
- 中信建投黄文涛:存款利率市场化改革再进一步
- 山东临沭:小柳编编织富民大产业|世界焦点
- 观速讯丨复兴号和和谐号的区别_复兴号和普通高铁的区别
- 由俭入奢易由奢入俭难_由俭入奢易由奢入俭难意思
- 第124章睛姨梅开二度梅姨_梅开二度的由来
- 最资讯丨主要矛盾和次要矛盾的方法论_主要矛盾和次要矛盾
- 精选推广是普通推广的3倍还是8倍_甲数是乙数的3倍,甲数除以乙数的商是多少|全球看热讯
- 观察:斗士传说对决之星好玩吗 斗士传说对决之星玩法简介
- 【全球快播报】东方智造06月07日主力资金大幅流出
- 当前看点!楚天高速(600035.SH)完成发行12亿元第一期超短期融资券
- 什么是奇数和偶数_什么叫奇数什么叫偶数的定义
- 焦点热文:富安达基金“换帅”,今年近百家公募变更高管
- 天天热推荐:城市传媒:公司加快对AI领域重大技术突破的引入和应用,日前初步完成服务出版行业的专业大模型“万象”测试版开发,面向内部开启辅助专业图片生成等编发测试工作
- 斯波:我不认为希罗可能会在总决赛复出 他的伤没完全恢复-观焦点
- 最新:出资频率提升险资加快“扫货”不动产
- 鲁控科技与中国农业科学院北京畜牧兽医研究所所长秦玉昌一行就餐厨废弃物饲料化应用进行交流
- 好公司遇到好价格成就好股票!诺安基金王创练:追求持仓均衡,要有估值容忍度
- 冲突情况:1.乌克兰赫尔松地区州长
- 618特惠!美的【暴风蒸汽】手持挂烫机限时降10元! 环球热点评
- 慧博云通(301316):6月7日北向资金增持14.37万股_当前讯息
- 焦点日报:奥德彪逆袭记官网在哪下载 最新官方下载安装地址
- 【收评】纯碱日内下跌2.27% 机构称纯碱是处在“主动去库”的阶段_全球消息
- 梅西B计划!每体:内马尔被推荐给巴萨,球员愿降薪加盟-新消息
- 环球看点!皮尔斯:希罗受伤对热火来说可能是因祸得福 因为马丁比他更强
- 焦点关注:日本强推核污染水排海 我驻日使馆发言人:日方必须慎之又慎 勿让核事故灾害延续
- 广汇汽车:2022年,公司在新能源汽车销售和服务方面,借助自身在行业内的影响力,积极参与新能源市场布局_通讯
- 热点评!德云社门票在哪买_德云社在哪个城市
- 奥海科技:公司充电枪除了供应于大客户之外,在自主品牌的线上旗舰店也有售卖|天天新资讯
- 【环球新视野】斯波:莱利是我最信任的人 他总能够让人冷静下来
- 梅西欧洲生涯荣誉一览:853场704球338助+38冠军+7金球
- 好生态带来好生活(美丽中国)
- 南向资金今日净买入2.41亿港元
- 亚联发展:目前公司未参与《深圳市加快推动人工智能高质量发展高水平应用行动方案(2023—2024年)》的相关建设
- 火灾过程中产生大量的什么气_火灾过程中产生大量的什么气体
- 中国外汇投资研究院:本轮日元贬值侧重内因
- 佛罗伦萨队长比拉吉被西汉姆球迷丢杂物击中,头部受伤流血
- 电子后视镜新国标将于7月实施 行业市场规模有望超60亿
- 手机APP教程:酷我畅听怎么清除缓存 酷我畅听APP清除缓存的方法
- 世界快资讯:一视同仁的近义词_一视同仁的意思
- 可按市场价转让份额,北京已购共有产权房拟推出回购、交易新规
- 信息:加税立竿见影 新加坡5月外国人购房量暴跌50%
- 每串烧烤都收包装费,实际只分2盒装?上海市消保委:外卖包装收费规则亟待完善 全球播报
- 全球动态:分析越南经济不能忽视人口因素
- 协鑫能科调整发行可转债方案 删减“年产3万吨电池级碳酸锂项目”_热门看点
- 突发,闪崩跌停!杀白马行情再度上演 每日热门
- 23旭越惠诚2优先C票面利率为3.5000%-世界微速讯
- 世界热消息:A320NEO客机 投入暑运旺季运营
- 【环球快播报】伊朗驻沙特吉达总领馆及驻伊斯兰合作组织代表处正式重新开放
- 2023年高考全国共设7726个考点
- 建设幸福河湖 再现水清岸绿-每日消息
- 国恩股份:子公司国骐光电专注于光学级导光板、扩散板、膜片材料开发、光学模组设计及成套产品的研发、生产和销售
- 人民来论:“AI换脸”诈骗,人脸怎能“想换就换”?-环球最资讯
- 当前热讯:中天精装06月07日主力资金大幅流出
- 环球微资讯!陈都灵穿缎面长裙优雅迷人 抹红唇绽放魅力
- 塞尔达传说王国之泪塔吉卡兹怎么打[多图]
- 华为watch4和watch3区别
- 樱花小镇迷你超市什么时候出 公测上线时间预告
- 每日看点!高频调光和类dc调光哪个好
- 全球观焦点:本川智能06月07日主力资金大幅流出
- 焦点速讯:海通国际:给予珍酒李渡(06979.HK)“增持”评级 目标价11.90港元
- 全球微头条丨佳力图06月07日主力资金大幅流出
- 凡拓数创06月07日主力资金大幅流出
- 《山河令》制片人马韬去世 多位工作人员发文悼念
- 兴业证券:给予龙湖集团(00960.HK)“买入”评级 目标价24.00港元_通讯
- 重置无线网络适配器_今日要闻
- 今日最新!TrendForce集邦:2023 年第一季全球智能手机产量仅 2.5 亿台,近十年来首季新低
- 斯诺克新星赵心童为涉赌遭禁赛道歉
- 【全球新要闻】制作临时身份证、设“高考专席”,广州警方“一考点一团队一方案”为高考保驾护航
- 环球时讯:昆船智能06月07日主力资金大幅流出
- 天天微头条丨华立股份06月07日主力资金大幅流出
- 微恐找找茬官网在哪下载 最新官方下载安装地址
- 没病走两步瞧瞧好玩吗 没病走两步瞧瞧玩法简介|世界最新
- 指鼠为鸭?江西省教育厅介入“食堂老鼠头”事件,网友爆料教职工要求控评,涉事窗口几乎没人去吃饭了……
- 天天通讯!微恐找找茬好玩吗 微恐找找茬玩法简介
- 每日简讯:江西省出台举措加快推进农业产业化高质量发展
- 苹果14plus护眼吗
- 全球热门:海南警方通报一起重大刑事案件!
- 民勤:高考第一天 考场外温暖的目送|环球精选