历史上的今天
返回首页

历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2020年09月24日 | 在Zynq SoC上实现双核非对称的多进程处理模式

2020-09-24 来源:elecfans

在我的上一篇博客中我介绍了利用Zynq SoC上的两个ARM Cortex-A9 MPCore处理器执行不同的任务程序,实现非对称的多进程处理模式的概念。我期望你能坐得住因为这篇博客有点长,但是我们会有收获,到最后我们会让我们的AMP系统启动并运行,在我们实现AMP系统启动并运行之前会进行很多步的准备工作,但是这些都非常的简单所以不用担心。


在Zynq SoC上搭建AMP系统的关键是配置好一个启动引导加载程序,第一阶段的加载程序执行完毕后处理器会寻找这个执行文件并加载到内存中。不幸的是我使用的Vivado工具是2014.1版本(因为我最近在搬家没有网络所以不能下载最新的版本),当我们生成FSBL(第一阶段启动加载文件)时这个版本不支持AMP,因此为了能够完成这个例程我将使用赛灵思应用笔记XAPP1079中提供的修改过的FSBL文件和standalone OS文件。


下载好压缩包文件后第一部是将文件解压到你期望的工作目录下,并给文件夹重命名为SRC。这些文件包含了修改过的FSBL和standalone OS文件。我们需要让SDK软件能够找到这些文件,因此下一步是要设置更新一下SDK存储库目录让SDK能够找到这些文件。在SDK软件菜单来点击Xilinx tools,在下拉菜单中选择repositories,创建一个新的存储库文件目录,路径为<你的工作目录>app1079designworksdk_repo,具体如下图所示:

在Zynq SoC上实现双核非对称的多进程处理模式

添加好存储库后下一步就是要生成以下文件:
AMP第一阶段启动引导加载程序
Core 0 的应用程序
Core 1 的应用程序


我们要为每个处理器内核生成BSP(板级支持包)文件:
第一步是创建FSBL,选择file -> new applicaTIon -> project,这样才能够让我们创建一个FSBL工程,实现AMP处理模式,这些步骤和以前没什么区别,但是我们选择Zynq FSBL for AMP 模板,代替以前选择的Zynq FSBL模板.

在Zynq SoC上实现双核非对称的多进程处理模式

接下来我们要为第一个处理器内核创建应用程序,这步同样很简单。以前我们已经做过很多次了,这里要确保选择的是Core 0 和standalone OS并且创建自己的BSP文件。

在Zynq SoC上实现双核非对称的多进程处理模式

一旦我们为内核创建了应用程序,我们需要正确的定义DDR内存的映射地址,因为程序将从这些地址开始执行。我们需要编辑链接脚本,如下图所示显示除了DDR内存的基地址和大小。这一步很重要,如果我们不能正确的为Core 0和 Core 1定义内存地址和大小,在程序执行的过程中就会产生内核间的冲突,出现段地址错误。

在Zynq SoC上实现双核非对称的多进程处理模式

现在我们就可以编写Core 0执行程序的代码了。这部分是AMP 系统的核心,它将从Core 1开始执行程序代码。我们要在应用程序代码中包含以下部分代码。这部分代码禁止了Zynq SoC片上存储的缓存功能,定义了Core 1的起始地址,这个地址是Core 1的内存映射地址范围之内的,具体可以查看先前定义的链接脚本。一旦Core 0 执行Set Event(SEV)命令,就会让Core 1开始执行它负责的程序代码。

在Zynq SoC上实现双核非对称的多进程处理模式

下一步是要为Core 1创建BSP文件,我们将使用修改过的standalone OS模板(standalone_amp),这个模板禁止了PS部分的监听控制单元(SCU)的重复初始化。因此,我们不能允许自动生成BSP文件,这与Core 0的操作是有区别的。还有就是确认在CPU的选择项中选择的是Core 1。

在Zynq SoC上实现双核非对称的多进程处理模式

既然我们已经为Core 1创建了BSP文件,但是在我们编写Core 1执行的应用程序代码之前,我们要修改BSP的一些设置,这一步非常简单,需要在驱动配置对话框中增加一个额外的编译标志---–DUSE_AMP=1,具体操作参照下图:

在Zynq SoC上实现双核非对称的多进程处理模式

 

完成以上这些操作后,我们就可以为Core 1创建应用程序。按照下图所示,确保处理器选择的是Core 1,BSP选择的是前面步骤中刚刚建立的amp_core1_bsp。

在Zynq SoC上实现双核非对称的多进程处理模式

推荐阅读

史海拾趣

台湾町洋(dinkle)公司的发展小趣事

为了进一步扩大市场份额,町洋开始进军国际市场。公司凭借其优质的产品和服务,逐渐在欧美等发达国家和地区打开了市场。为了更好地服务全球客户,町洋在全球设立了多个贸易与服务机构,构建了完善的销售网络和售后服务体系。

DYMO公司的发展小趣事

为了扩大市场份额,DYMO公司积极寻求与各大零售商和办公用品供应商的合作。通过与这些合作伙伴建立紧密的合作关系,DYMO公司的产品得以更广泛地进入市场,并被更多的消费者所熟知。此外,DYMO公司还积极开拓国际市场,将其产品销往全球各地。

GPD Optoelectronics Corp公司的发展小趣事

随着市场需求的不断变化,DYMO公司不断推出新的产品线,以满足不同消费者的需求。除了传统的标签打印机外,DYMO公司还推出了便携式打印机、工业级打印机等多种类型的产品。这些产品不仅功能强大,而且设计精美,深受消费者的喜爱。通过产品线的多样化,DYMO公司进一步巩固了其在标签打印领域的领先地位。

Datatronic公司的发展小趣事

随着市场竞争的加剧,Datatronic公司意识到单纯依靠技术创新已不足以保持竞争优势。于是,公司开始调整市场策略,注重与客户的沟通和合作。通过深入了解客户需求,公司能够提供更符合市场需求的定制化产品和服务。同时,公司还加强了与上下游企业的合作,形成了稳定的供应链体系。

ERNI Electronics公司的发展小趣事

ERNI Electronics的源头可以追溯到1947年,当时其瑞士母公司成立。而在1956年,ERNI Electronics以生产继电器为起点,正式进入电子行业。在创立初期,公司专注于继电器的开发和制造,积累了丰富的电子行业经验。随着市场需求的不断变化,ERNI在1967年开发了第一个背板连接器,这一创新产品迅速成为公司的核心产品,并推动了公司的快速发展。

EMLSI公司的发展小趣事

随着电子行业的快速发展,市场竞争也日益激烈。为了保持领先地位,EMLSI公司开始实施全球化战略。公司先后在亚洲、欧洲和北美等地建立了生产基地和研发中心,与当地企业建立了紧密的合作关系。这一战略不仅让EMLSI能够更快地了解市场需求和技术趋势,还为公司带来了更多的商业机会和合作伙伴。

问答坊 | AI 解惑

dxp 2004 指导教程

为方便同行们设计,现贡献资料DXP20047指导教程,只需1枚金币,因为我也需要下载其他的资料,不然肯定免费,望理解和支持。 点击下载:…

查看全部问答>

【PDF】——高亮度投射式LED模組技術簡介

【PDF】——高亮度投射式LED模組技術簡介 !这个资料怎么样!若有其他需求意见,下次送你个更好的。…

查看全部问答>

菜鸟求问

wince下如何编译运行win32控制台程序?我将一段简单的代码放在一个win32智能设备的工程的源文件里,编译不通过。提示 corelibc.lib(crtstrtw.obj) : error LNK2019: 无法解析的外部符号 wmain,该符号在函数 mainWCRTStartup 中被引用 STANDARD ...…

查看全部问答>

以下信息如何看呀

appverifce.exe 产生log. avlogview.exe 看log, 怎么看不出来有问题的函数? 以下信息如何看呀: Invalid pointer (ole32.dll:404CA33C) lpUserMem: 0x00000000 (ole32.dll:404CA1F0) lpUserMem: 0x00000000 (message.exe:000197EC) lpUserMem ...…

查看全部问答>

编写简单的IP协议栈

最近要在ARM平台上实现一个网络IP数据包加密的程序,但是现有的系统没有网络协议栈,而我有不想移植一个完整的TCP/IP协议栈(其实移植困难也很大,因为系统是我们团队自己实现的嵌入式最简系统),完整的协议栈很多部分对我们的这次应用来说是多余 ...…

查看全部问答>

求推荐几款医疗用的体温传感器

作为学生的我,由于毕业设计的要求需要通过传感器采集病人的体温,希望高人们推荐几款医用的体温传感器的型号,当然如有具体型号和相关资料将不胜感激!谢谢各位。…

查看全部问答>

有关bootloader制作的问题

我在做booloader加入sb.xcl文件之后出现了Fatal Error[e72]: Segment IEEE_ADDRESS_SPACE must be defined in a segment definition option (-Z, -b or -P) 错误请问这个是什么原因呢? [ 本帖最后由 wateras1 于 2013-2-25 15:10 编辑 ]…

查看全部问答>

MSP430:P1OUT=4、P1OUT |=4、P1OUT &-=~8的意思

首先,msp430没有P0口的,按P1口来说明 P1OUT = 4; P1.2引脚输出高电平,P1其余引脚输出低电平; P1OUT |= 4;P1.2置高电平,P1其余引脚不变; P1OUT &= ~8;即P1OUT &= 0xf7,P1.3置低电平,P1其余引脚不变; |是或运算符,&是与运算符,具体请参 ...…

查看全部问答>

求助,有没有人有单片机让蜂鸣器模拟警车,救护车……声音的代码

有没有人有单片机让蜂鸣器模拟警车,救护车,火警,机关枪,生日快乐……声音的代码 …

查看全部问答>