Обсуждаем контроллеры компании Atmel.
Ответить

petit fatfs

Вт мар 20, 2018 20:31:52

Доброе время . Попробывал сегодня petit fatfs и наткулся на такую проблемму . Не работает запись в фаил.
То есть , монтирование , открытие файла и чтение из него спокойно , но вместо записи только перезапись.
Если создать пустой текстовый фаил , то при попытке записать в него инф. ничего не произойдет , однако если записать в него 120 пробелов то запись произойдет (пока не кончится строка или эти 120 пробеллов).
В чем может быть проблема ?

Re: petit fatfs

Ср мар 21, 2018 11:48:31

Без ваших исходников сложно будет вам подсказать.
Разновидностей 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

Спойлер
Без ваших исходников сложно будет вам подсказать.
Разновидностей petit fatfs довольно много,
но тем не менее может поможет[spoiler]
Код:
// процедура записи файла, дописать в конец файла      
        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


fs_lseek(0) вызываю перед записью. Но ошибки это не исправляет.

Исходник взят с сайта https://hubstub.ru/programming/114-podk ... lleru.html.
Правда подправил его для atmega32u4 на 16МГц.
Вложения
atmega32u4_petit_fatfs.rar
(119.08 KiB) Скачиваний: 122

Re: petit fatfs

Ср мар 21, 2018 17:06:59

pf_lseek(0); установить указатель на ноль, он будет перезаписывать.
Что бы писать дальше, надо pf_lseek(fs.fsize) установить указатель на размер файла или на конец файла.

Re: petit fatfs

Ср мар 21, 2018 17:52:31

pf_lseek(0); установить указатель на ноль, он будет перезаписывать.
Что бы писать дальше, надо pf_lseek(fs.fsize) установить указатель на размер файла или на конец файла.

Но разве он не должен продолжить запись как только перезапишет все существующие байты ?
Ответить