1、添加工程
啓動SDK時選取workspace,如下圖所示:
對應的workpace文件夾中會生成如下幾個文件:
如果當前workspace是首次加載工程,SDK會進入啓動界面
點擊Import Project,導入已有工程
點擊Browse,添加工程路徑,一個完整的工程包含一個bsp文件夾,一個HW文件夾,和一個src文件夾(添加C功能函數)
點擊Finish。
2、編譯、鏈接
等待工程導入完成後,SDK操作界面,ctrl+B(或者project——Build All)對已有工程進行編譯,編譯時注意以下設置正確:
點擊project——property
圖中編譯相關的配置,ARM gcc compile——Inferred Options——Software Platform,設置編譯時工程包含文件的路徑,當前路徑爲debug下的Makefile文件的路徑,每一個../表示相對當前路徑的上一級路徑,爲便於工程的移植和拷貝,建議設置相對路徑。
圖中鏈接相關的配置,ARM gcc linker——Inferred Options——Software Platform下是鏈接庫的路徑,同上,最好用相對路徑。
如果功能代碼不在SDK工程目錄下,可以通過添加虛擬文件或者鏈接路徑的方式在SDK工程中調用對應的代碼文件,如下圖,右鍵project——New——folder
點擊Advance,如下圖,選擇Folder is not located in the file system(Virtual Folder)則是在project目錄下創建一個虛擬文件夾,選擇Link to alternate location (Linked Folder)則是將對應的代碼文件鏈接到當前工程目錄下。
3、debug
完成編譯後,點擊Run——Debug Configurations如下圖配置
點擊Apply,然後Debug可以執行debug操作,
其中如果圖1中勾選program FPGA,則每次debug的時候都會燒寫一次bit流文件,一般不勾選,bit流文件在debug前燒寫一次即可;
4、打印
xilinx sdk自帶有很多打印函數(xil_printf, printf等),所有的打印函數其實都是調用outbyte函數(xil_printf.c)來打印信息,outbyte函數其實是調用了ps側的uart send byte函數。
如果ps側有兩個uart,outbyte如何進行選擇輸出呢?這個是在bsp中設置的,雙擊bsp下面的mss文件,然後選擇modify this bsp setting,然後設置stdout和stdin,如果設置爲psu_uart_0則通過uart0打印,如果選擇psu_uart_1則通過uart1打印,另外如果pl側有uart ip例如uart16550,那麼也可以選擇uart16550進行打印,這裏設置不同的uart,則bsp中xparameters.h中對STDOUT_BASEADDRESS的定義就不一樣,如果是uart0,那麼定義爲0xff000000,如果是uart1,那麼定義爲0xff010000,這兩個地址可以在ug1087 ultrascale寄存器定義中查找到,0xff000000是UART0的基址,0xff010000是UART1的基址。
另外使用打印函數不同,編譯出來的可執行文件大小可能相差很大,比如printf函數是標準c庫中的重要函數(可以執行浮點打印等),但是fpga基本不用浮點打印,只需要xil_printf執行打印即可,所以printf和xil_printf編譯後的可執行文件相差就比較大。
————————————————
本段鏈接:https://blog.csdn.net/carlsun80/article/details/78045776