Vitis 代码:从 SD 卡读取数据并转换为三维数组
#include <stdio.h> #include "xil_printf.h" #include "xstatus.h" #include "xsdps.h"
#define FILENAME 'data.bin' #define NUM_ROWS 4 #define NUM_COLS 3 #define NUM_LAYERS 2
u8 buffer[NUM_ROWS * NUM_COLS * NUM_LAYERS * sizeof(int)]; int data[NUM_ROWS][NUM_COLS][NUM_LAYERS];
int main() { int status; XSdPs sd; FIL file; UINT bytes_read;
// 初始化SD卡
status = XSdPs_CfgInitialize(&sd, XPAR_XSDPS_0_DEVICE_ID, XPAR_XSDPS_0_BASEADDR);
if (status != XST_SUCCESS) {
xil_printf("Error initializing SD card\n");
return XST_FAILURE;
}
// 打开文件
FRESULT result = f_open(&file, FILENAME, FA_READ);
if (result != FR_OK) {
xil_printf("Error opening file\n");
return XST_FAILURE;
}
// 读取数据
result = f_read(&file, buffer, sizeof(buffer), &bytes_read);
if (result != FR_OK) {
xil_printf("Error reading file\n");
return XST_FAILURE;
}
// 关闭文件
f_close(&file);
// 转化为三维数组
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
for (int k = 0; k < NUM_LAYERS; k++) {
int index = k * NUM_ROWS * NUM_COLS + j * NUM_ROWS + i;
data[i][j][k] = *((int *) &buffer[index * sizeof(int)]);
}
}
}
// 打印结果
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
for (int k = 0; k < NUM_LAYERS; k++) {
xil_printf("%d ", data[i][j][k]);
}
xil_printf("\n");
}
xil_printf("\n");
}
return XST_SUCCESS;
}
在这段代码中,我们首先初始化了 SD 卡,然后打开了一个文件,读取了其中的数据,最后将数据转化为一个三维数组,并打印了结果。在转化为三维数组时,我们使用了一个循环来遍历数组中的每个元素,并将其存储到对应的位置。需要注意的是,由于我们读取的是一个二进制文件,因此需要将其转化为相应的数据类型(在这里是 int)。
原文地址: https://www.cveoy.top/t/topic/nVUU 著作权归作者所有。请勿转载和采集!