vivado 2014.4

特殊情况:总DDR内存大于512MB,且CPU0已经占用了超过512MB,这时按以下步骤CPU1无法启动。

原因:启动入口地址限制。更改方法如下:

打开cpu1_bsp\ps7_cortexa9_1\libsrc\standalone_v4_2\src\boot.S,注释为以下效果即可

#if USE_AMP==1
// ldr r3, =0x1ff /* 512 entries to cover 512MB DDR */
// ldr r0, =TblBase /* MMU Table address in memory */
// add r0, r0, #0x800 /* Address of entry in MMU table, for 0x20000000 */
// ldr r2, =0x0c02 /* S=b0 TEX=b000 AP=b11, Domain=b0, C=b0, B=b0 */
//mmu_loop:
// str r2, [r0] /* write the entry to MMU table */
// add r0, r0, #0x4 /* next entry in the table */
// add r2, r2, #0x100000 /* next section */
// subs r3, r3, #1
// bge mmu_loop /* loop till 512MB is covered */
#endif

部分所需代码:

#define sev() __asm__("sev")
#define CPU1STARTADR 0xFFFFFFF0 //这个地址是固定的
#define CPU1STARTMEM 0x3D000000 //这个CPU1启动地址是在lscript.ld中设置的 void StartCpu1(void)
{
#if 1
fsbl_printf(DEBUG_GENERAL,"FSBL: Write the address of the application for CPU 1 to 0xFFFFFFF0\n\r");
Xil_Out32(CPU1STARTADR, CPU1STARTMEM);
dmb(); //waits until write has finished
fsbl_printf(DEBUG_GENERAL,"FSBL: Execute the SEV instruction to cause CPU 1 to wake up and jump to the application\n\r");
sev();
#endif
}





























-DUSE_AMP=1
#define sev() __asm__("sev")
#define CPU1STARTADR 0xFFFFFFF0
#define CPU1STARTMEM 0x02000000//此处必须与第5步改的cpu1的ddr地址一致
void StartCpu1(void)
{
#if 1
fsbl_printf(DEBUG_GENERAL,"FSBL: Write the address of the application for CPU 1 to 0xFFFFFFF0\n\r");
Xil_Out32(CPU1STARTADR, CPU1STARTMEM);
dmb(); //waits until write has finished
fsbl_printf(DEBUG_GENERAL,"FSBL: Execute the SEV instruction to cause CPU 1 to wake up and jump to the application\n\r");
sev();
#endif
}
//app_cpu0.c为以下代码
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
int main()
{
init_platform();
while(1)
{
print("CPU 0 : Hello World\r\n");
sleep(2);
}
cleanup_platform();
return 0;
}
//app_cpu1.c为以下代码
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "sleep.h"
int main()
{
init_platform();
while(1)
{
print("CPU 1 : New World\r\n");
sleep(3);
}
cleanup_platform();
return 0;
}

ZYNQ 双CPU裸机运行例程的更多相关文章

  1. 限制某个进程只能在某个CPU上运行

    首先可以调用GetSystemInfo查看有多少个CPU,再通过调用: BOOL WINAPI SetProcessAffinityMask( __in HANDLE hProcess, __in D ...

  2. 关于CPU的运行队列与系统负载

    在linux操作系统中,我们一般查看系统的cpu负载情况常用的命令可以是uptime,top,还有vmstat等这些个都是可以有的.每个工具所提供的信息各不相同, 我这里要讨论的仅说cpu部分.使用u ...

  3. [转帖]centos7设置CPU的运行频率为performance

    centos7设置CPU的运行频率为performance http://www.512873.com/archives/612.html Publish: March 6, 2019 Categor ...

  4. [转帖]判断Linux进程在哪个CPU核运行的方法

    判断Linux进程在哪个CPU核运行的方法   原文网址:http://www.embeddedlinux.org.cn/html/xinshourumen/201601/30-5013.html 问 ...

  5. NIOS中双CPU系统的构建

    首先构建SOPC系统,先分别添加两个CPU,分别命名为CPU1和CPU2,设置如下图,其中CPU1运行VGA的乒乓游戏,CPU2运行音乐,这里为了简单,音乐用LED来表示. 这里CPU1选择是中等容量 ...

  6. 从CPU的运行到函数调用做个了解

    CPU的内部结构 我们都知道CPU是一台电脑的核心部件,所有的程序都是通过它运行的,那么CPU是如何让一个程序跑起来的呢?我们今天就来一起简单的做个了解,首先看下CPU的基本结构 程序流程 假如现在我 ...

  7. CPU Rings, Privilege, and Protection.CPU的运行环, 特权级与保护

    原文标题:CPU Rings, Privilege, and Protection 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的 ...

  8. 多核cpu电脑运行多线程程序的问题

    呵呵,当初我学多线程时也遇到过这样的问题,也是输出的结果每次都不一样.后来我找到原因了---都是多核惹得祸. 我猜你的电脑应该也是多核的.单核的cpu在处理多线程时每次只能执行一跳指令,也就是说无论你 ...

  9. 进程池-限制同一时间在CPU上运行的进程数

    if __name__=='__main__' :  为了区分你是主动执行这个脚本,还是从别的地方把它当做一个模块去调用. 如果是主动执行,则执行.如果是调用的,则不执行主体. 1. 串行:切记切记: ...

随机推荐

  1. Ubuntu18修改/迁移mysql5.7数据存放路径

    1.停止mysql服务 sudo service mysql stop 2.修改mysql配置文件,一般是 /etc/mysql/my.cnf,或者/etc/mysql/mysql.conf.d/my ...

  2. windows设备相关位图与设备无关位图

    windows支持两种位图格式,DDB(device-dependent bitmap),DIB(device-independent bitmap).设备相关位图用于windows显示系统中,其图像 ...

  3. PHP获取用户IP地址

    PHP获取访问者IP地址 这是一段 PHP 代码,演示了如何获得来访者的IP address. <?php//打印出IP地址:echo (GetIP());function GetIP()  / ...

  4. Dubbo基础之四管理控制台 dubbo-admin

    Dubbo提供一个重要功能就是服务治理(SOA governance),什么是服务治理呢?企业为了确保项目顺利完成而实施的过程,需要进行各方面的管理.服务治理就是用来管理SOA的采用和实现的过程. 服 ...

  5. Linux C/C++ UDP 网络通信

    昨晚 Vv 想让我给她讲讲网络编程,于是我就傻乎乎的带她入了门... 以下内容为讲课时制作的笔记- 1. socket() 函数 1.1 头文件 #include<sys/socket.h> ...

  6. 录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)

    近日翻看了下招聘信息,很多都要求loadrunner和jmeter这两款工具,毕竟是性能测试的主流客户端并发工具. 录制的问题 做性能脚本是性能测试的基本功,loadrunner和jmeter这两款工 ...

  7. [题解]hihoCoder挑战赛18——题目1 神奇字符串

    题目地址:http://hihocoder.com/problemset/problem/1264 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 我们说两个字符串是非常 ...

  8. Smartbi扩展性怎么样,是否方便扩展开发产品已有功能?

    Smartbi大数据分析工具具有很强的扩展性,通过"稳定内核+API扩展"的架构,通过报表插件扩展的方式,能满足很多应用项目的定制化需求,把新功能无缝集成到系统中. Smartbi ...

  9. Python 中的闭包和自由变量

    1.定义 在函数内部再定义一个函数,并且这个函数用到了外部函数的变量(LEGB),最后返回新建函数的函数名索引,那么将这样的能够访问其定义时所在的作用域的函数以及用到的一些变量称之为闭包.被引用的非全 ...

  10. nginx之版本升级方法一

    转至:https://www.cnblogs.com/sblack/p/12809034.html 非线上业务,纯属测试升级,线上业务不要采用此方法,可以采用官方推荐的平滑升级. 环境 Linux c ...