2012-02-22 48 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

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

相关问题