Пытаюсь записать в конец файла, но вместо этого перезаписываю

#c #fpga #sd-card #microblaze

#c #fpga #sd-карта #microblaze

Вопрос:

Я использую программный процессор microblaze на плате разработчика Basys3. Я могу записать текстовый файл на SD-карту, но я пытаюсь записать в конец файла. В настоящее время он перезаписывает все, что находится в файле. Я использую функции DFATFS для выполнения записи. К Basys3 прилагается программа чтения PMOD uSD.

Я пытался использовать функцию fslseek в DFATFS, чтобы переместить указатель файла в конец файла, но он по-прежнему записывает в начало.

 //the subroutine to print to the SD card

void SD(int32_t rando, int addr, int bit, int pc) {
DXSPISDVOL disk(XPAR_PMODSD_0_AXI_LITE_SPI_BASEADDR,
         XPAR_PMODSD_0_AXI_LITE_SDCS_BASEADDR);
   DFILE file;
   int eof;
   char printline[128];
   sprintf(printline, "nLFSR: %d ", rando);
   // The drive to mount the SD volume to.
   // Options are: "0:", "1:", "2:", "3:", "4:"
   static const char szDriveNbr[] = "0:";

   // Mount the disk
   DFATFS::fsmount(disk, szDriveNbr, 1);

   xil_printf("Disk mountedrn");

   fr = file.fsopen("output.txt", FA_WRITE | FA_OPEN_ALWAYS);

   if (fr == FR_OK) {
      file.fslseek(0);
      file.fswrite(printline, 12, amp;bytesWritten);

      fr = file.fsclose();

   } else {
      xil_printf("Failed to open file to write torn");
   }

}
  

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

Комментарии:

1. Как насчет FA_OPEN_APPEND | FA_WRITE ? elm-chan.org/fsw/ff/doc/open.html

2. @dyukha: Я не уверен, что это та же библиотека.

3. Можете ли вы указать на какую-либо документацию по этой системе? Поиск в Google для basys3 dfatfs не выполняется. На первый взгляд, я бы предположил, что lseek функция с аргументом 0 будет искать начало файла, а не конец.

4. Я тоже, но я все еще ожидаю, что это сработает (по крайней мере, стоит попробовать). Также поведение FA_OPEN_ALWAYS соответствует тому, с чем сталкивается OP,

5. Если он смоделирован по образцу C fopen , то использование режима только для записи приведет к усечению файла. Либо режим чтения-записи, либо режим добавления позволят избежать этого.