CSV или двоичный файл для встроенного приложения - PullRequest
3 голосов
/ 22 февраля 2012

Я занимаюсь разработкой встроенного оборудования, для которого требуются данные с ПК. Я использую SD-карту в формате FAT32 для предоставления этой информации. Данные - это просто файл Excel, который я экспортирую в CSV. Мой вопрос, должен ли я позволить uC (AT Mega 128L) обрабатывать это, используя char* strtok (char *s, const char *delim), или я должен написать небольшую утилиту, которая преобразует этот файл CSV в двоичный формат?

Производительность, если она достаточно высокая, не имеет большого значения и размера файла. Самая большая проблема - использование SRAM.

длина строки макс. Максимум 40 символов с о. Есть около 7 полей, два из которых в основном индексы. Предполагается, что ОК извлекает интересующую его информацию, просматривая эти индексы и проверяя их соответствие. Например, предположим, что для uC нужна информация о чем-то, что хранится в индексе 5. Затем он должен перейти сюда, получить остальные 5 полей и отобразить их на экране. ОК требует «случайного» доступа к файлу - то есть, в один момент ему может понадобиться что-то из индекса 7, а в другой - что-то из индекса 70.

Как я понимаю, было бы лучше, если бы это был двоичный файл со строго определенным форматом (то есть каждое поле было бы фиксированным числом байтов). Преимущество состоит в том, что ОК может непосредственно искать интересующий его байт. Например, предположим, что каждая «запись» занимает 100 байтов (это будет намного меньше, но только в качестве примера). ОК знает, что второй индекс будет начинаться с 100 (0-99 для первой записи), третий - с 200 и т. Д.

Так что, если ему нужен доступ к 7-й записи, он просто ищет 700-й байт и извлекает соответствующую информацию. Будет ли бинарный файловый подход лучше, чем CSV? Моя главная задача - использование SRAM и разумная производительность.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Подход двоичного файла будет лучше по ряду причин.Одна из больших частей, которые вы не упомянули, заключается в том, что вам нужно будет преобразовать строковые данные в полях в числовые данные (по крайней мере, для индексов, если не для других данных), что обычно обходится дорого в обоих вычислениях.время и в оперативной памяти.Кроме того, strtok, конечно, требует поиска по строкам, и если вы не знаете, когда хотите строку, пока не посмотрите на нее, это большой поиск по строкам и преобразование их в целые числа для каждой прочитанной строки.

0 голосов
/ 23 февраля 2012

Я бы порекомендовал преобразовать текстовый файл в двоичный формат (со всеми двоичными числами и всеми элементами с префиксом их типа и размера) и включить индекс в этот файл (или отдельный файл), в основном таблицу с файлом смещения для каждой записи. Таким образом вы экономите время поиска (двоичный поиск в индексе будет быстрее, чем анализ всего файла между текущей позицией (или началом) и необходимой следующей позицией) и преобразованием текста в числа. Если вы можете сделать все записи фиксированного размера, вам не понадобится индекс, и все будет еще проще и быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...