#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.html2. @dyukha: Я не уверен, что это та же библиотека.
3. Можете ли вы указать на какую-либо документацию по этой системе? Поиск в Google для
basys3 dfatfs
не выполняется. На первый взгляд, я бы предположил, чтоlseek
функция с аргументом 0 будет искать начало файла, а не конец.4. Я тоже, но я все еще ожидаю, что это сработает (по крайней мере, стоит попробовать). Также поведение
FA_OPEN_ALWAYS
соответствует тому, с чем сталкивается OP,5. Если он смоделирован по образцу C
fopen
, то использование режима только для записи приведет к усечению файла. Либо режим чтения-записи, либо режим добавления позволят избежать этого.