[英]Reading a CSV file via NRF52840
00> <info> app: Reading: data.csv... 00> 00> <info> app: data.csv sucessfully opened! 00> 00> <info> app: File size: 37876 bytes 00> 00> <info> app: File successfully read! 00> 00> <info> app: 0 bytes read
我正在嘗試讀取可以寫入 Nordic NRF52840 的 CSV 文件。 文件類型為 CSV。 文件本身只是一個 ID 值,旁邊有一些傳感器/數據值。
我也希望能夠讀取該文件。 最好根據 ID 值讀取一行。 但是我在讀取數據時遇到了問題。 在我的終端中,我可以看到該文件存在,並且它具有從我的讀取函數中找到的文件大小。 但是,當我嘗試讀取文件時。 它帶來了 0 個字節的讀取。
下面是我閱讀 CSV 的代碼,任何提示都會非常感謝。
void SD_CARD_Read() { uint16_t size; UINT bytesRead;//From sd card driver library while (fno.fname[0]); ff_result = f_open(&file, FILE_NAME, FA_READ | FA_WRITE | FA_OPEN_APPEND); if(ff_result != FR_OK)//Not passing if the file is missing { if (ff_result != FR_OK) { NRF_LOG_INFO("Unable to open or create file: " FILE_NAME "."); SD_CARD_PRESENT = 0; return; } } else//File was openned fine { NRF_LOG_RAW_INFO(""); NRF_LOG_INFO("Reading: " FILE_NAME "..."); NRF_LOG_INFO(FILE_NAME" sucessfully opened!"); size = f_size(&file); char * data = NULL; data = malloc(size); /* allocate memory to store image data */ NRF_LOG_INFO("File size: %d bytes", size); ff_result = f_read(&file, data, (UINT) size, &bytesRead); if (ff_result == FR_OK){ NRF_LOG_INFO("File successfully read!"); NRF_LOG_INFO("%d bytes read", bytesRead); for (int i=0; i < bytesRead; i++) { NRF_LOG_INFO("data[%d]: 0x%x", i, data[i]); } } free(data); // free allocated memory when you don't need it } (void) f_close(&file); return; }
這是我的終端的輸出。 如您所見,它標識了一個名為 data.csv 的文件及其大小,但不讀取任何數據。
00> <info> app: Reading: data.csv... 00> 00> <info> app: data.csv sucessfully opened! 00> 00> <info> app: File size: 37876 bytes 00> 00> <info> app: File successfully read! 00> 00> <info> app: 0 bytes read
根據我的理解,代碼 f_read 將 bytesRead 設置為 0。我正在使用 FA_OPEN_APPEND 打開文件。 下面是傳遞給 read 函數的 sdk 參數:
FRESULT f_read ( FIL* fp, /* Pointer to the file object */ void* buff, /* Pointer to data buffer */ UINT btr, /* Number of bytes to read */ UINT* br /* Pointer to number of bytes read */ )
這個答案是猜測,因為我不知道有關 SD 卡庫的任何詳細信息。
也許庫沒有單獨的指針來讀取和寫入(附加到)文件。 如果FA_OPEN_APPEND
將位置設置為文件末尾,則f_read
不會從該位置獲取任何數據。
嘗試使用f_open
沒有FA_OPEN_APPEND
,甚至沒有FA_WRITE
。
ff_result = f_open(&file, FILE_NAME, FA_READ);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.