多核异构处理器对共享外设和资源的调配方法-飞凌嵌入式

news2024/9/20 15:43:01
来源:飞凌嵌入式官网
www.forlinx.com

在多核异构CPU中,多个内核就如同多个大脑,而外设和内存等资源就如同手足,那么多个大脑该如何控制手足才能保证它们正常有序地运行呢?

以NXP i.MX8M Plus处理器的A核和M核为例,其实只有少部分外设被指定了属于哪个核,而大部分的外设都能被A核和M核同时使用。如下图所示:

这里我们通过飞凌嵌入式OKMX8MP-C开发板上的UART3进行演示,同时编写A核和M核程序控制UART3打印信息,通过UART3将开发板与电脑链接,在电脑串口调试界面可以看到A核和M核同时输出了信息

A核和M核同时输出信息

那么在实际应用中,当某个外设需要被指定的内核独占或被多核同时使用时,该如何合理安排时序才能避免外设输出异常呢?接下来,小编就以飞凌嵌入式OKMX8MP-C开发板为例,将多核异构处理器对共享外设和资源的调配方法介绍给大家。

飞凌嵌入式OKMX8MP-C开发板所搭载的NXP i.MX8M Plus处理器具备强悍的性能, 集成4个主频最高可达1.8GHz(工业级主频为1.6GHz)的Arm Cortex-A53多任务核和1个Cortex-M7实时核,不管是对数据的高速吞吐、处理,还是复杂的人机交互界面处理,都能从容应对。

01.A核独占外设

这种情况比较简单,在设备树中定义设备节点,编译新的设备树,将生成的OK8MP-C.dtb和Image拷贝至以下目录:

开发板/run/media/mmcblk2p1/

重启开发板,同时M核程序中不初始化UART3即可。以UART3为例:

02. M核独占外设

对于NXP i.MX8M Plus处理器而言,由于A核和M核对内存和外设的访问都是共享且平等的,为了确保不产生资源冲突会通过资源域(resource domains)控制器从硬件层面来对指定内存和外设的访问权限进行保护

i.MX8M Plus处理器允许定义最多4个资源域并将不同的内存和外设资源指定到这些资源域中。默认情况下,A核和相关外设被指定于域0;当M核程序运行后,M核以及相关外设最初也是域0,但马上被重新指定于域1。

因此若一个外设需要被M7内核单独使用,首先要修改A核设备树,删除外设节点;其次在M核程序中将域0改为域1;最后再将外设初始化,这样就可以单独控制了。域转换代码如下:

03.多核共享外设

如果多核想共享某个外设,但在某段时间又需要独占,后续再释放;或者多核的开发人员不是同一人,为了避免出错,在自己的程序中强制独占某个核,是否可以实现呢?

答案是肯定的——使用RDC功能即可。RDC全程为Resource Domain Controller,即资源域控制器,可以通过寄存器和信号量两种方式实现某个域对外设的独占和释放

(1)寄存器RDC_PDAPn

由于i.MX8M Plus处理器最多支持4个域,因此对寄存器后8比特位写入不同数值,将允许相应的域对某个管脚和内存的读写使能,如禁止A核域0读写某个管脚,则设置寄存器为0xFC即可,后两个比特位为0,表示禁止域0读写此外设;其他六个比特位为1,表示允许从域1到域3读写此外设。

每个共享外设在RDC资源表中均有一个序号,用于区别其他外设,如UART3在RDC中定义如下:kRDC_Periph_UART3 = 104U, /**< UART3 RDC Peripheral */

在M核程序中可如下修改程序,实现M核独占UART3的目的。

修改程序验证,此时只有M核控制UART3打印信息。

仅M核输出信息

注意:

因为在设备树中没有删除UART3,所以在A核启动内核解析设备树生成设备文件时,需对UART3操作。因M核程序中禁止A核的访问UART3,此时内核将无法正常启动。可以加10秒延时等待内核启动完成,也可在A核启动后,通过双核通信告知M核启动RDC外设独占。

(2)信号量RDCSEMA42

RDC SEMA42是一个专门配合RDC功能的信号量,当某个域获取某个外设的SEMA42锁后,其他的域将无法访问此外设,只能等待域释放该外设锁,才能再访问。

RDC SEMA42数据锁的开启配置如下:

M核对UART3上锁,获取管脚的使用权:

M核释放UART3的RDC SEMA42锁,放弃管脚的使用权:

修改程序后验证,发现和RDC寄存器一样,M核上锁后获取UART3使用权,仅可独自发送,A核访问UART3会出错。释放SEMA42锁后,A核和M核就均能访问UART3了。

以上就是小编基于OKMX8MP-C开发板为大家带来的多核异构处理器对外设和内存资源的使用方法,各位工程师小伙伴可以根据自己的需求灵活设置策略,以满足不同场景的需要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/197106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为HTML网页添加喜庆气氛的诸多方法

为HTML网页添加喜庆气氛的诸多方法 节假日&#xff0c;如春节&#xff0c;为网页&#xff08;或网站的主网页&#xff09;营造欢乐祥和氛围的手段&#xff0c;还是比较多的&#xff0c;下面介绍。 先给出未加喜庆气氛修饰的网页源码如下&#xff0c;特意做的简单&#xff0c;意…

Docker - 10. 本地镜像发布到阿里云

将本地镜像发布到阿里云&#xff0c;具体步骤如下&#xff1a; 1. 注册并登录阿里云控制台&#xff1a;阿里云登录平台 2. 进入容器镜像服务&#xff1a;阿里云 - 容器镜像服务 3. 创建个人实例&#xff0c;未创建前如下图1&#xff0c;创建后见下图2 4. 打开并创建命名空间…

XSS Labs (one)

Web Security Academy>>Cross-site scripting>>Contexts burpsuite官网XSS靶场地址 超全的fuzz payload Lab: Reflected XSS into HTML context with nothing encoded <script>alert(1)</script>弹出成功&#xff0c;最简单的反射型XSS靶场。 Lab: S…

2023牛客寒假算法基础集训营5 小沙の不懂(思维)

题意&#xff1a;这题目一开始看了半天啊&#xff0c;而且坑点很多&#xff08;qwq&#xff09;&#xff0c;大概意思就是给你两个字符串a,b&#xff08;可能存在前导0&#xff09;&#xff0c;然后给你任意个长度为10的从0到9的排列&#xff08;比如1234567890 &#xff0c;09…

攻防世界:crypt(RC4)

1、下载PE文件&#xff0c;控制台程序2、main函数大致分析&#xff0c;请看下面的注释int __cdecl main(int argc, const char **argv, const char **envp) {unsigned int str_length; // eaxunsigned int myflag_length; // eaxvoid *v5; // raxvoid *v7; // raxint i; // [rs…

软测(概念) · 开发模型 · 软件的生命周期 · 瀑布模型 · 螺线模型 · 增量模型 · 迭代模型 · 敏捷模型 · scrum · 软件测试模型之 V 模型 W 模型

一、开发模型的由来二、软件的生命周期三、瀑布模型&#xff08;Waterfall Model&#xff09;四、螺线模型&#xff08;Spiral Model&#xff09;五、增量模型&#xff08;Incremental Model&#xff09;六、迭代模型&#xff08;Rational UnifiedProcess&#xff09;七、敏捷模…

SQL Server 2014 数据库误删数据的恢复处理

一、序言 作为程序开发人员或 DBA&#xff0c;经常会接触到数据库&#xff08;以 SQL Server 2014 数据库为例&#xff09;的增、删、改查操作。执行 delete 语句时不小心误删数据表的记录情况&#xff0c;而数据库之前又没有任何备份。 SQL Server 数据库自身的数据库还原数…

使用蚁群优化 (ACO) 解决背包问题(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 背包问题&#xff08;Knapsack problem&#xff09;是一种组合优化的NP完全&#xff08;NP-Complete&#xff0c;NPC&#xff0…

【My Electronic Notes系列——组合逻辑电路】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

【页面设计】03.JavaScript

一、什么是JavaScript&#xff1f; 一种编程语言&#xff0c;可以在网页上实现复杂的功能、交互等。是一种解释型语言&#xff0c;也是一种面向对象的语言。 ps&#xff1a;解释型语言&#xff0c;是在运行的时候将程序翻译成机器语言。解释型语言的程序不需要在运行前编译&a…

怎么找回删除的文件?尝试下这些恢复数据的方法

我们使用电脑时&#xff0c;总会产生各种各样的文件数据。这些文件保存在电脑里面&#xff0c;但是有时不免手滑误删重要的文件。这些文件被删除、被清空了&#xff0c;还可以恢复回来吗&#xff1f;怎么找回删除的文件&#xff1f;建议你尝试下这些恢复数据的方法。 一、文件恢…

一篇了解Eureka

文章目录一.Eureka注册中心1.1.Eureka简介1.2.Eureka基本架构1.2.1 EurekaServer(注册中心)1.2.2 EurekaClient(客户端)二.Eureka项目的构建2.1 新建一个工程EurekaServer-70012.2.将user-service注册到Eureka2.3 消费者从Eureka获取服务2.4.注册微服务信息完善三、CAP理论3.1.…

ITK多线程加速filter

文章目录1. ITK多线程简介1.1 平台多线程1.1.1 基本内容1.1.2 Intel的TBB1.2 典型例子&#xff08;执行原理&#xff09;1.3 5.X版本之后的变动1.4 ITK多线程整体认识1.4.1 基本内容1.4.2 过滤器级别的多线程&#xff08;Filter Level Multithreading&#xff09;1.4.3 内存管理…

Shader绘制2D圆-学习Cherno教程笔记-(OpenGL/Vulkan/DirectX/Metal)-新手向

文章目录相关网址前言基本实现画一个圆步骤1.初步-根据长度绘画圆2.初步-根据1-length(uv)绘画圆3.正式-绘画白色形状的圆(1)if逻辑代码实现(2)用shader的step函数完善圆-实现绘画手环圆1.if逻辑代码实现2.用step函数代替if用smoothstep代替step函数1.smoothstep函数2.使用smoo…

ESP-IDF:使用STL stack栈做检查括号是否匹配测试

ESP-IDF:使用STL stack栈做检查括号是否匹配测试 /使用栈检查括号是否匹配测试/ #include typedef struct LINKNODE20 { struct LINKNODE20 * next; }linknode20; typedef struct MYCHAR20 { linknode20 node; char * address; int index; }MyChar20; MyChar20 * createMyC…

【MFC】文档操作——范例(12)

使用MFC框架文档操作范例&#xff1a; 创建工程 创建工程&#xff0c;其中&#xff1a; 1、MFC单文档 2、自定义改应用程序数据文件扩展名&#xff1a; 3、 最后一步选择CListView&#xff08;用报表显示数据&#xff09; 重点问题&#xff1a;数据文件的读写功能 添加数据类…

电脑多个不同分辨率屏幕鼠标移动时出现偏移、错位情况的解决方法

本文介绍在使用不同尺寸、不同分辨率的两个或多个电脑屏幕时&#xff0c;鼠标在不同屏幕之间切换时&#xff0c;出现偏移、飘动、不规则运动等情况的解决方法。 对于使用两个或多个电脑屏幕的用户而言&#xff0c;鼠标在不同屏幕之间的切换有时候会出现偏移的问题。在同时使用多…

【My Electronic Notes系列——逻辑函数的化简】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

MySQL入门篇-MySQL字符集小结

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL的字符集 前言: 字符集和排序规则 说实话我对这两个概念比较模糊&#xff0c;其实可以简单的理解: 字符集(character set)&#xff1a;定义了字符以及字符的编码。 排序规则(collation)&#xff1a;定义了字符的比…

【Django】ORM增删改查、F对象和Q对象、聚合操作和原生数据库操作

1、ORM的增删改查均需要通过管理器对象进行。 2、可使用python3 manage.py shell 进入脚本页方便操作。 3、可修改输出格式 一、ORM查询操作 1、查询方法 &#xff08;1&#xff09;all()方法 用法&#xff1a;MyModel.objects.all()作用&#xff1a;查询所有数据&#xff0c…