Запись в файл в двоичном формате на микроконтроллере - PullRequest
0 голосов
/ 09 мая 2018

Я использую плату STM32476 Nucleo, и сейчас я записываю некоторые данные с датчиков в читаемый файл, но это слишком медленно. Чтобы показать код того, что я делаю сейчас:

static char buffer[LINE_MAX];
char* p = buffer;
p += sprintf(p, "%f,%f,%f,", s.ax.val, s.ay.val, s.az.val);
p += sprintf(p, "%f,%f,%f,", s.gx.val, s.gy.val, s.gz.val);
p += sprintf(p, " %f"DEGREE_UTF8"C\r\n", s.temperature);

int ret;

unsigned bytes_written=0;
if ((ret = f_write(&USERFile, buffer, length, &bytes_written)) != FR_OK || bytes_written != length) {
    hang("write failed: %d (written = %u)", ret, bytes_written);
}

Как я мог изменить это, чтобы записать в двоичном коде вместо этого?

1 Ответ

0 голосов
/ 09 мая 2018

В простейшей форме вы просто выводите данные как:

float data = ...
fwrite(&file, &data, sizeof data, &written);

Это, конечно, изящно не обрабатывает порядок байтов и не имеет какой-либо структуры (для этого вам могут понадобиться более сложные форматы, такие как CBOR).

Если я правильно помню, FatFS уже выполняет некоторую буферизацию за кулисами, но также может быть быстрее memcpy сначала поместить все данные во временный буфер, а затем записать это. Вам нужно экспериментировать, если скорость - ваш главный приоритет.

...