В этой статье собраны общие рекомендации и указания, как использовать в своих проектах библиотеку Petit FatFS.
Указания по портированию Petit FatFs на различные платформы
При портировании модуля Petit FatFs нужно учитывать следующее.
- ANSI C
Модуль FatFs является промежуточным микропрограммным средством (middleware), которое написано в соответствии со стандартом ANSI C. Нет никаких зависимостей от конкретной платформы, за исключением наличия компилятора, совместимого с кодом ANSI C.
- Размерность целочисленных типов (integer types)
Модуль FatFs подразумевает, что размер типов char/short/long является соответственно 8/16/32 бит, и размер int является 16 или 32 бит. Эти соответствия задаются в заголовочном файле integer.h. Такое условие не является проблемой для большинства компиляторов. Если произошел какой-то конфликт с уже имеющимися типами, Вы должны самостоятельно разрешить его.
Расход памяти (Memory Usage) на примере версии R0.02a
| AVR | x86 |
Компилятор |
gcc(WinAVR) |
VC6 |
_WORD_ACCESS |
1 |
1 |
Code (default) |
2100 |
1720 |
Code (!_USE_READ) |
-444 |
-246 |
Code (_USE_DIR) |
+1002 |
+420 |
Code (_USE_LSEEK) |
+490 |
+228 |
Code (_USE_WRITE) |
+518 |
+351 |
RAM (bss) |
2 |
4 |
RAM (work) |
42 |
44 |
В таблице указан только размер самого модуля Petit FatFs. Дополнительно для полной работоспособности нужен также модуль низкоуровневых функций обращения к диску (low level disk I/O). Размер модуля MMC/SDC на AVR равен примерно 620 без поддержки функции записи, и 840 байт с функцией записи.
Уменьшение размера модуля Petit FatFs
В следующей таблице показано, какие функции можно удалить опциями конфигурации с целью уменьшения размера модуля.
Функция |
_USE_READ |
_USE_DIR |
_USE_LSEEK |
_USE_WRITE |
0 |
0 |
0 |
0 |
pf_mount |
|
|
|
|
pf_open |
|
|
|
|
pf_read |
x |
|
|
|
pf_lseek |
|
|
x |
|
pf_opendir |
|
x |
|
|
pf_readdir |
|
x |
|
|
pf_write |
|
|
|
x |
Эффективный доступ к файлу
Для получения хорошей производительности/скорости при чтении файла на встраиваемых малых системах разработчик firmware должен представлять себе, как происходит этот процесс в модуле Petit FatFs.
Petit FatFs читает сектора диска без использования буфера сектора. Это означает, что файловая система читает часть сектора, содержащую нужные данные в каждой точке обращения, даже если это один и тот же сектор. Однако стандартное устройство хранения данных (generic storage device) не поддерживает побайтную адресацию, поэтому на слое disk I/O будет читаться весь сектор целиком, и оттуда из потока чтения данных будет браться только нужный кусок.
Когда за один раз из файла вычитывается сразу 512 байт, каждый сектор данных будет читаться только один раз. Когда данные будут читаться байт за байтом (т. е. один байт на один вызов подпрограммы чтения), то один и тот же сектор будет прочитан 512 раз. Поэтому чтение побайтными запросами многократно ухудшает производительность чтения (см. рисунок).
Чтобы избежать такого бесполезного управления чтением, данные из файла нужно читать блоками как можно большего размера. Доступ, выровненный на границу сектора, для Petit FatFs не важен (не имеет значения).
Самые маленькие микроконтроллеры, для которых предназначен модуль Petit FatFs, часто имеют ограниченный размер RAM (ОЗУ). Поэтому может не получиться выделить буфер чтения нужного полного размера, и при многих обработках текста могут потребоваться побайтовые операции с файлом. Для этих целей Petit FatFs поддерживает возможность перенаправления данных.
О лицензировании библиотеки Petit FatFs
Это копия лицензии Petit FatFs, которая включена в исходные коды библиотеки.
/*----------------------------------------------------------------------------/
/ Petit FatFs - FAT file system module R0.02a (C)ChaN, 2010
/-----------------------------------------------------------------------------/
/ Petit FatFs module is an open source software to implement FAT file system to
/ small embedded systems. This is a free software and is opened for education,
/ research and commercial developments under license policy of following trems.
/
/ Copyright (C) 2010, ChaN, all right reserved.
/
/ * The Petit FatFs module is a free software and there is NO WARRANTY.
/ * No restriction on use. You can use, modify and redistribute it for
/ personal, non-profit or commercial use UNDER YOUR RESPONSIBILITY.
/ * Redistributions of source code must retain the above copyright notice.
/
/-----------------------------------------------------------------------------/
Перевод лицензии: "Petit FatFs - модуль файловой системы FAT, версия R0.02a (C)ChaN, 2010. Модуль Petit FatFs является программным модулем обычной файловой системы FAT, предназначенным для малых встраиваемых систем на микроконтроллерах. Это свободное программное обеспечение, которое открыто для обучения, исследования и коммерческих разработок при условии соблюдения следующих правил. Все права на библиотеку Petit FatFs принадлежат ChaN. На эту библиотеку НЕ ДАЕТСЯ НИКАКИХ ГАРАНТИЙ. Нет ограничений на использование. Вы можете использовать и распространять код библиотеки для персональных, некоммерческих или коммерческих продуктов ПОД ВАШЕЙ СОБСТВЕННОЙ ОТВЕТСТВЕННОСТЬЮ. Распространяемый исходный код библиотеки должен содержать в себе указанные выше лицензионные замечания.". Таким образом, лицензия Petit FatFs является одной из разновидностей лицензии BSD, однако есть одно большое отличие. Поскольку Petit FatFs предназначена для встраиваемых проектов, то условия распространения в двоичной форме (такой как встраиваемый код, HEX-файл или двоичная библиотека) не определены с целью увеличения удобства использования. Документация дистрибутивов может как включать в себя Petit FatFs и её лицензионный документ, так и не включать его. Разумеется, лицензия Petit FatFs совместима с проектами, выпущенными под защитой лицензии GNU GPL.