Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Встроенное в FatFs форматирование резервирует слишком много места под Fat
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
InsolentS
Всем привет!

Балуюсь с 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
gosha
Приведи полную последовательность команд (с параметрами) по разбивке на разделы и форматированию.
И проверке свободного места на диске.
InsolentS
Ура! Живой человек проявил интерес к моему вопросу!! 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 в байтах.
aaarrr
Выложили бы дамп BPB, давно бы стало ясно, куда копать. Вариантов там всего ничего.
UDmitry
Цитата(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, есть некоторые сомнения на счёт размера кластера которого используется при расчете.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.