在微控制器上以二进制形式写入文件

时间:2018-05-09 10:59:04

标签: c embedded fatfs

我正在使用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 :(得分:0)

以最简单的形式,您只需按原样转储数据:

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

这当然不能优雅地处理字节序,并且没有任何结构(你可能想要查看更复杂的格式,比如CBOR)。

如果我没记错的话,FatFS已经在幕后进行了一些缓冲,但是memcpy所有数据先临时缓冲然后写入它也会更快。如果速度是您的首要任务,您需要进行实验。