Arduino SDFat Libray перезаписывает последнее значение

Я пытаюсь создать файл, разделенный запятыми, используя эту библиотеку SDFat

Вызов этого кода создает мой файл

const char Header[24]="Desired RPM,Output RPM\n";
...
foo()
{
  SpeedCache.open("/Speed_Cache.txt",O_CREAT | O_RDWR | O_APPEND);
  SpeedCache.write(Header);
  SpeedCache.sync();
}
...

После запуска у меня есть файл, содержащий

Желаемая частота вращения,Выходная частота вращения'\n'

Когда я вызываю следующую функцию, я хочу, чтобы она добавила int target и int reference в конец файла.

bool SDClass::SetLine(SdFile Cache,int target, int reference)
{   
  bool good = false;
  char NewLine[32];
  Cache.seekEnd();
  sprintf_P(NewLine,(PGM_P)F("%d,%d\n"),target,reference);
  Serial.println(good=Cache.write(NewLine));
  Cache.sync();
  return good;
}

При первом вызове это работает так, что при вводе SpeedCache,50,100 я получаю

Желаемая частота вращения,Выходная частота вращения'\n'

50 100 футов\n'

Однако, если я затем напишу ввод SpeedCache,5,10, я получу

Желаемая частота вращения,Выходная частота вращения'\n'

5,10'\n'

Как мне настроить свою функцию, чтобы получить:

Желаемая частота вращения,Выходная частота вращения'\n'

50 100 футов\n'

5,10'\n'

, 👍0


2 ответа


Лучший ответ:

2

Вам просто нужно открыть файл в режиме APPEND:

SpeedCache.open("/Speed_Cache.txt",O_CREAT | O_RDWR | O_APPEND);

O_APPEND

Файл открывается в режиме добавления. Перед каждой записью смещение файла позиционируется в конце файла, как при использовании lseek.

Вам также следует передавать файл по ссылке, чтобы он не создавал новые копии внутренней структуры:

bool SDClass::SetLine(SdFile &Cache,int target, int reference)
,

Добавление | O_APPEND не дало эффекта, @ATE-ENGE

Хорошо, передача файла по ссылке — это последнее, что нужно для его работы., @ATE-ENGE


0

Как передать файл по ссылке?

SdFat sd;
SdFile DataFile;

isSD = DataFile.open(FileName, O_WRITE | O_CREAT | O_AT_END);
,