AMP模式下共享内存通信的两种定义方法
为了在两个CPU之间交互(AMP: Asymmetric Multi Processing),设计0XFFFF0000所在的字节为两个CPU之间的交互中转站。关于具体的实现,有如下两个常用的方法:
1,库函数直接读写。注意设置该地址Memory禁用缓存cache,这样CPU能够及时读到该地址内存中变化的数据,Xil_SetTlbAttributes(0xFFFF0000,0x14de2);然后通过Xilinx提供的读写地址的库函数实现读写:Xil_Out8(0xFFFF0000,0x55);read_char = Xil_In8(0xFFFF0000);
2,通过固定地址指针操作。#define VAR_NAME (*(volatile unsigned char *)(0xFFFF0000)),注意该行程序的理解:中间的(volatile unsigned char *)的作用是强制类型转换,类型转换改变了后续连接主体的属性,改变后【等效于指向0xFFFF0000这个地址的一个存储内容易变化的字节的指针】。最左侧*代表“取指针指向内存位置的存储内容”。基础知识:变量的地址成为该变量的“指针”,这里的“指针”是加引号的,要成为真正的指针,还需要指向存储数据的类型信息。专门用来存放另一变量的地址(即指针)的变量,称为指针变量。
参考资料:
http://www.iot-online.com/IC/embedded/2017/030451088.html
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-50-AMP-and-the-Zynq-SoC-s/ba-p/521889