為了在兩個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
