реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Встроенное в FatFs форматирование резервирует слишком много места под Fat
InsolentS
сообщение Feb 19 2015, 14:33
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Всем привет!

Балуюсь с FatFs поверх AT45. Размер носителя 1мегабайт. После форматирования с помощью f_mkfs наблюдаю ровно 3/4 свободного места на диске (т.е. 768кб). Не понимаю, как служебная область Fat12 может так много занимать, ведь диск у меня всего-то 2048 кластеров размером (кластер = 1 сектор, 1 сектор = 512байт). Это, в теории, получается 1.5байт * 2048кластеров = 3кб на собственно таблицу. Я понимаю, что там ещё есть загрузочные сектора и прочая служебная информация, но ведь не 256кб 05.gif Я что-то не помню, чтобы у дискеты на 1.44мб было зарезервировано столько места под FAT.
Мои предположения:
1) Встроенное в FatFs форматирование чего-то не так форматирует.
2) Я не докурил документацию на Fat.

Любая помощь будет принята с благодарностью beer.gif


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
gosha
сообщение Mar 5 2015, 13:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 15-06-04
Из: Менделеево
Пользователь №: 30



Приведи полную последовательность команд (с параметрами) по разбивке на разделы и форматированию.
И проверке свободного места на диске.
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 9 2015, 22:30
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Ура! Живой человек проявил интерес к моему вопросу!! biggrin.gif
Код
static FRESULT res;  
static uint32_t total_size, free_size;
static FATFS *fs_ptr;

res = f_mkfs("", 0, 1);
      
res = f_getfree("", &free_size, &fs_ptr);
      
total_size = (fs_ptr->n_fatent - 2) * fs_ptr->csize * 512; /* TODO: Abstract out the sector size */
free_size = free_size * fs_ptr->csize * 512;

Как видите, ничего особенного.
total_size и free_size в байтах.


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2015, 23:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Выложили бы дамп BPB, давно бы стало ясно, куда копать. Вариантов там всего ничего.
Go to the top of the page
 
+Quote Post
UDmitry
сообщение Jun 13 2015, 10:39
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 28-01-14
Из: Таганрог
Пользователь №: 80 225



Цитата(InsolentS @ Mar 10 2015, 01:30) *
Ура! Живой человек проявил интерес к моему вопросу!! biggrin.gif
Код
static FRESULT res;  
static uint32_t total_size, free_size;
static FATFS *fs_ptr;

res = f_mkfs("", 0, 1);
      
res = f_getfree("", &free_size, &fs_ptr);
      
total_size = (fs_ptr->n_fatent - 2) * fs_ptr->csize * 512; /* TODO: Abstract out the sector size */
free_size = free_size * fs_ptr->csize * 512;

Как видите, ничего особенного.
total_size и free_size в байтах.


Есть такой вопрос, вы уверены в верности расчёта свободного места при использовании функций get_free, есть некоторые сомнения на счёт размера кластера которого используется при расчете.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 03:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.02769 секунд с 7
ELECTRONIX ©2004-2016