为了在两个CPU之间交互,设计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
时间: 2024-10-29 19:08:18