2012-02-22 85 views
3

我開發了一塊嵌入式硬件的要求從PC的一些數據二進制文件。我正在使用FAT32格式的SD卡來提供此信息。數據只是一個我導出爲CSV的excel文件。我的問題是,如果我讓uC(AT Mega 128L)使用char* strtok (char *s, const char *delim)來處理這個問題,還是我應該編寫一個小型的實用程序將該CSV文件轉換爲二進制格式?CSV或嵌入式應用程序

性能,只要它是相當快的,是不是大問題,也不是文件大小。最大的問題將是SRAM的使用。

的線的長度爲最大。最多40個字符。大約有7個領域,其中兩個基本上是指數。 uC應該通過查看這些索引並查看它是否匹配來檢索它感興趣的信息。例如,假設uC需要關於存儲在索引5處的東西的信息。然後需要到這裏並檢索其他5個字段並將它們顯示在屏幕上。 uC需要對文件進行「隨機」訪問 - 即在某一時刻,它可能需要索引7中的內容,而另一時刻可能需要索引70中的內容。

據我所知,如果這是一個二進制文件具有嚴格定義的格式(即每個字段將是固定的字節數)。優點是uC可以直接尋找它感興趣的字節。例如,假設每個'記錄'佔用100個字節(它會少很多,但僅僅是一個例子)。 uC知道第二個索引將從100開始(第一個記錄爲0-99),第三個從200開始等。

因此,如果需要訪問第7個記錄,它只需要查找第700個字節並檢索相關信息。二進制文件方法會比CSV更好嗎?我主要關心的是SRAM的使用情況和合理的性能。

回答

3

二進制文件的做法將是多種原因更好。你沒有提到的一件大事是你需要將字段中的字符串數據轉換爲數字數據(至少對於索引,如果不是其他數據的話),這在計算中往往是昂貴的時間和RAM。此外,當然strtok需要通過字符串搜索,如果你不知道而行,你想,直到你看,這是一個很大的字符串通過搜索並將其轉換爲整數你每讀出線。

+1

我完全同意。處理字符串並將它們轉換爲數值是資源密集型(相對而言)。從長遠來看,使用計算機上的程序執行此操作通常會比在嵌入式系統上執行此操作更好。這也可以讓你使用更高級的語言(比如Ruby或Python)來處理可能在嵌入式系統上不可用的字符串處理。這些語言的庫/功能使得CSV和字符串處理比在C中執行它更容易。 – bta 2012-02-22 22:34:56

0

我建議文本文件轉換成二進制格式(與所有數字是二進制和所有元素與它們的類型和大小前綴),幷包括在該文件中(或一個單獨的文件)的索引,基本上是一個與表爲每條記錄提供文件偏移量。這樣可節省搜索時間(索引中的二進制搜索將比在當前位置(或開始位置)和所需的下一個位置之間解析整個文件)以及文本到數字轉換更快。如果您可以將所有記錄固定大小,則不需要索引,並且所有內容都會更簡單快捷。

相關問題