嵌入式应用中,应该选择 CSV 还是二进制文件?

4
我正在开发一款嵌入式硬件,需要从PC获取一些数据。我使用格式为FAT32的SD卡提供这些信息。数据只是一个excel表格,我将其导出为CSV格式。我的问题是,我是否应该让uC(AT Mega 128L)使用 char * strtok(char * s,const char * delim)来处理它,还是应该编写一个小工具将此CSV文件转换为二进制格式?
性能,只要足够快速,就不是主要问题,文件大小也不是主要问题。最大的问题是SRAM的使用。
每行的长度最多为40个字符。有大约7个字段,其中两个基本上是索引。uC通过查看这些索引并查看是否匹配来检索它感兴趣的信息。例如,假设uC需要关于存储在索引5处的某些内容的信息。然后,它需要在这里检索其他5个字段,并在屏幕上显示它们。uC需要对文件进行“随机”访问-即在某一时刻,它可能需要从索引7中获取某些内容,而在另一个时刻,它可能需要从索引70中获取某些内容。
据我所理解,如果这是一个具有严格定义格式的二进制文件(即每个字段将是固定字节数),那么效果会更好。优点是uC可以直接寻找它感兴趣的字节。例如,假设每个“记录”占用100个字节(实际上会少得多,只是举个例子)。uC知道第二个索引从100开始(第一条记录为0-99),第三个从200开始等等。
因此,如果需要访问第7个记录,它只需寻找到第700个字节并检索相关信息即可。以二进制文件方式处理是否比CSV更好?我主要关注SRAM的使用和合理的性能。
2个回答

4
二进制文件的方法在许多方面都更好。其中一个重要的方面是,您需要将字段中的字符串数据转换为数字数据(至少对于索引,如果不是其他数据),这往往会消耗计算时间和内存。此外,当然需要通过字符串搜索strtok,如果在查看行之前不知道想要哪一行,那么每读取一行就需要搜索字符串并将其转换为整数。

1
我完全同意。处理字符串并将其转换为数字值是消耗资源的(相对而言)。从长远来看,使用计算机上的程序来执行此操作通常比在嵌入式系统上尝试执行此操作要更好。这也可以让您使用高级语言(如Ruby或Python)来进行字符串处理,这些语言可能在嵌入式系统上不可用。这些语言具有使CSV和字符串处理比在C中容易得多的库/功能。 - bta

0
我建议将文本文件转换为二进制格式(所有数字都是二进制的,所有元素都带有其类型和大小前缀),并在该文件中包含一个索引(或单独的文件),基本上是每个记录的文件偏移量表。这样可以节省搜索时间(在索引中进行二进制搜索比在当前位置(或开头)和所需下一个位置之间解析整个文件更快),以及文本到数字的转换。如果您可以使所有记录具有固定大小,则不需要索引,一切都会更简单更快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接