簡體   English   中英

通過 NRF52840 讀取 CSV 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM