嵌入式应用程序的CSV或二进制文件

时间:2012-02-22 18:20:59

标签: csv embedded binaryfiles

我正在开发一种需要PC上的数据的嵌入式硬件。我正在使用FAT32格式的SD卡来提供此信息。数据只是我导出为CSV的excel文件。我的问题是,我应该让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 个答案:

答案 0 :(得分:3)

由于多种原因,二进制文件方法会更好。你没有提到的一件大事是你需要将字段中的字符串数据转换为数字数据(至少对于索引,如果不是其他数据),这在两个计算中往往都很昂贵时间和内存。另外,strtok当然需要搜索字符串,如果你不知道你想要的行直到你看到它,那就是通过字符串搜索并将它们转换为你读取的每一行的整数。

答案 1 :(得分:0)

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