UFATFs
Введение
Обычно при разработке встраиваемых систем мы используем Fatfs в качестве файловой системы, но методы работы с файлами отличаются от тех, что используются в Windows. Чтобы сделать файловые операции, написанные для ПК, легко переносимыми на микроконтроллеры, я добавил дополнительный уровень пользователя (user layer) поверх Fatfs. Это позволяет почти без изменений переносить файловые операции с ПК на микроконтроллеры. Например, для типа FILE* P на ПК достаточно изменить его на uFILE* P. Подробное описание использования см. в функции fatfs_test();
В этом тесте мы создаем область памяти на ПК для имитации работы с W25Q128, а также используем LCD-симулятор для отображения и MemDbg для отладки памяти. Все эти инструменты были использованы в предыдущих проектах.
Архитектура программного обеспечения
Инструкции по установке
Используемая версия Fatfs — R0. 14. Для переноса на другую платформу см. инструкции по переносу в файле.
Инструкции по использованию
- Для всех файловых операций на ПК достаточно добавить префикс u, например: uf_open, uf_close, uf_read, uf_write, uf_gets, uf_putc, uf_puts, uf_tell, uf_size, uf_seek, uf_opendir, uf_closedir, uf_mkdir, uf_scan_dir, uf_readdir, uf_unlink, uf_rename, uf_typetell, uf_cpy_msg, uf_filecopy, uf_get_file_name, uf_foldercopy, uf_folderdsize, uf_mount, uf_mkfs, uf_getfree, uf_setlabel, uf_getlabel.
- Эти функции совместимы со стандартными функциями Stdio и имеют аналогичные прототипы. Примеры прототипов:
uFILE * uf_open(const char *path, const char *mode); // Открыть файл
int uf_close(uFILE *ufile); // Закрыть файл
size_t uf_read(void *ptr, size_t size, size_t nmenmb, uFILE ufile); // Чтение содержимого файла
size_t uf_write(void ptr, size_t size, size_t nmenmb, uFILE ufile); // Запись содержимого файла
char uf_gets(char outbuf, uint32 size, uFILE file); // Чтение строки из файла
int uf_putc(char c, uFILE *ufile); // Запись одного символа
int uf_puts(char *str, uFILE *ufile); // Запись строки
. . . . . . . . . . . . . . . . . . . . . . . .
- Большинство файловых функций, которые могут понадобиться на ПК, представлены здесь. Однако при работе с большими файлами следует учитывать ограничения памяти. Если файл слишком большой, может возникнуть нехватка памяти. Конкретные ограничения я не помню, так как это было написано давно. Если кто-то из коллег обнаружил эти ограничения, пожалуйста, дайте знать. Обычно файлы на микроконтроллерах не бывают слишком большими, поэтому в большинстве случаев все работает корректно.
- Тип FILE на ПК, это и есть тип uFILE здесь, просто добавьте u в начало, но DIR и FILINFO можно оставить без изменений. Подробный пример использования см. в функции fatfs_test()
- Для включения режима отладки можно установить UFILE_DEBUG_ENABLE в 1 в файле user_fats.h, что позволит выводить подробную информацию о выполненных операциях с файлами
Как внести вклад
- Создайте форк этого репозитория
- Создайте ветку Feat_xxx
- Подключите свой код
- Создайте Pull Request
Специальные возможности
- Используйте Readme_XXX.md для поддержки различных языков, например Readme_en.md, Readme_zh.md
- Официальный блог Gitee blog.gitee.com
- Вы можете посетить https://gitee.com/explore для изучения лучших открытых проектов на Gitee
-
GVP — это сокращение от Gitee Most Valuable Open Source Project, что означает лучшие проекты, выбранные по критериям оценки
- Официальная документация Gitee https://gitee.com/help
- Секция Gitee Stars представляет собой рубрику, посвященную представлению достижений пользователей Gitee https://gitee.com/gitee-stars/
Комментарии ( 0 )