本文是 zynq 7000 AMP模式 双裸核CPU同时运行 的继续。本文主要是上文的基础上增加通过共享内存的方式,演示2个裸核的交互。
共享内存前先看看内存地址分布,这个图取自 ug585 4.1 节 address map 的表4-1
本文定义OCM 为共享内存,地址为0xffff_0000。
在2个文件的头部都这样定义共享内存
#include "xil_mmu.h"
#define COM_VAL (*(volatile unsigned int*)(0xffff0000))
#define COM_VAL1 (*(volatile unsigned int*)(0xffff0004))
在程序中定义0xffff0000 这段内存没有cache,防止写在cache ,另一方看不到。同时初始化变量为0,代码如下:
Xil_SetTlbAttributes(0xffff0000,0x14de2);
COM_VAL=0;
COM_VAL1=0;
在cpu0 中(helloworld工程中)COM_VAL=i, 在cpu1 中显示这个数据
printf("led=%x, cpu0 count=%d\n\r",1<<Ledwidth,COM_VAL);
在cpu1 中 COM_VAL1=1<<Ledwidth; 在cpu0