В мои дни SD-карты обычно записывали свои данные в виде полных секторов, даже если вы записывали один байт.Я предполагаю, что это все еще так, поэтому, делая это по-своему, вы будете носить сектор много раз без необходимости делать это.Вот почему буферизация важна.Данные должны быть в буфере размером около 512 байт (типичный размер сектора). Создайте буфер, пока он не достигнет 512 байт, затем очистите, записав на SD-карту.
char sd_buffer[512];
unsigned short buffer_idx = 0;
:
void append_buffer ( char *str )
{
while ( *str )
{
sd_buffer[buffer_idx++] = *str++;
if ( buffer_idx >= 512 )
{
FILE *fp = fopen("/sd/data/parameters.txt", "a");
if ( fp == NULL )
return; // error
// flush buffer
fwrite(sd_buffer,1,512,fp);
fclose(fp);
buffer_idx = 0;
}
}
}
:
while (1)
{
char buf[32];
sprintf(buf,"%.4f\n", parameter);
append_buffer(sd_buffer,buf);
wait_ms(100);
}
Это просто означает, что запись будет меньше вSD-карта (с интервалом 512 байт)
Отказ от ответственности: не проверено
Ps.Открыть / закрыть файл теперь в append_buffer
, поэтому все буферы файловой системы также очищаются.
Если у вас есть проблемы с циклами.Используйте конечный автомат