Страница 1 из 1
petit fatfs
Добавлено: Вт мар 20, 2018 20:31:52
Ravor
Доброе время . Попробывал сегодня petit fatfs и наткулся на такую проблемму . Не работает запись в фаил.
То есть , монтирование , открытие файла и чтение из него спокойно , но вместо записи только перезапись.
Если создать пустой текстовый фаил , то при попытке записать в него инф. ничего не произойдет , однако если записать в него 120 пробелов то запись произойдет (пока не кончится строка или эти 120 пробеллов).
В чем может быть проблема ?
Re: petit fatfs
Добавлено: Ср мар 21, 2018 11:48:31
Dimon456
Без ваших исходников сложно будет вам подсказать.
Разновидностей petit fatfs довольно много,
но тем не менее может поможет
Спойлер
Код: Выделить всё
// процедура записи файла, дописать в конец файла
if ((status=fs_lseek(fs_file.size,1))==0) { //FA_WRITE
#asm("nop")
/* write some text to the file,
without the NULL string terminator sizeof(data)-1 */
if ((status=fs_write(text,sizeof(text)))==0)
printf("%u bytes written of %u%u Bt\r\n",sizeof(text)-1, fs_file.size / 1000, fs_file.size % 1000);
#asm("nop")
else
/* an error occured, display it and stop */
printf("%u no bytes no written of \r\n");
} else {
/* an error occured, display it and stop */
printf("File no_size %u bytes\r\n",sizeof(text)-1);
}
// конец процедуры записи
То есть перед функцией fs_write вы должны вызвать fs_lseek
Re: petit fatfs
Добавлено: Ср мар 21, 2018 16:14:35
Ravor
Спойлер
[uquote="Dimon456",url="/forum/viewtopic.php?p=3335777#p3335777"]Без ваших исходников сложно будет вам подсказать.
Разновидностей petit fatfs довольно много,
но тем не менее может поможетСпойлер
Код: Выделить всё
// процедура записи файла, дописать в конец файла
if ((status=fs_lseek(fs_file.size,1))==0) { //FA_WRITE
#asm("nop")
/* write some text to the file,
without the NULL string terminator sizeof(data)-1 */
if ((status=fs_write(text,sizeof(text)))==0)
printf("%u bytes written of %u%u Bt\r\n",sizeof(text)-1, fs_file.size / 1000, fs_file.size % 1000);
#asm("nop")
else
/* an error occured, display it and stop */
printf("%u no bytes no written of \r\n");
} else {
/* an error occured, display it and stop */
printf("File no_size %u bytes\r\n",sizeof(text)-1);
}
// конец процедуры записи
То есть перед функцией fs_write вы должны вызвать fs_lseek[/uquote]
fs_lseek(0) вызываю перед записью. Но ошибки это не исправляет.
Исходник взят с сайта https://hubstub.ru/programming/114-podk ... lleru.html.
Правда подправил его для atmega32u4 на 16МГц.
Re: petit fatfs
Добавлено: Ср мар 21, 2018 17:06:59
Dimon456
pf_lseek(0); установить указатель на ноль, он будет перезаписывать.
Что бы писать дальше, надо pf_lseek(fs.fsize) установить указатель на размер файла или на конец файла.
Re: petit fatfs
Добавлено: Ср мар 21, 2018 17:52:31
Ravor
[uquote="Dimon456",url="/forum/viewtopic.php?p=3335944#p3335944"]pf_lseek(0); установить указатель на ноль, он будет перезаписывать.
Что бы писать дальше, надо pf_lseek(fs.fsize) установить указатель на размер файла или на конец файла.[/uquote]
Но разве он не должен продолжить запись как только перезапишет все существующие байты ?