|
Что может замедлять работу FatFS? |
|
|
|
Sep 29 2011, 10:43
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 25-08-11
Пользователь №: 66 868

|
LPC1768 + SDHC. Для работы с SD-карточкой использую FatFS. Программа должна достаточно быстро создавать на карточке файлы и записывать в них какие-то данные. Величина каждого файла 15-20Кb. Скорость создания файлов - 2-3 файла в секунду. Однако со временем скорость, с которой создаются и записываются файлы, падает. Общая структура программы такова: Код while (f_mount(0, &FATFS_Obj) != FR_OK); while (f_mkdir (str) != FR_OK); while (1) { //время выполнения этого цикла падает от 1/3секунды до 3 секунд while (f_open(&fil_obj, str1, FA_CREATE_ALWAYS|FA_WRITE) != FR_OK); f_write(&fil_obj, &ibf, data_length, &ui); while (f_close(&fil_obj) != FR_OK); }; Кто-нибудь сталкивался с подобной проблемой? Сейчас шлифую свои процедуры из интерфейса с FatFS(файл diskio.c), но пока безрезультатно. Думаю, что пора переходить к функциям самой FatFS(файл ff.c).
|
|
|
|
|
 |
Ответов
(1 - 11)
|
Sep 29 2011, 11:41
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(sambotey @ Sep 29 2011, 14:43)  Думаю, что пора переходить к функциям самой FatFS(файл ff.c). Ошибочное решение. FatFS у меня выдает до 5 МБайта в секунду для SDHC (с буферизацией конечно). Библиотечные функции трогать не стоит.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Sep 29 2011, 12:26
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 25-08-11
Пользователь №: 66 868

|
Цитата(Lotor @ Sep 29 2011, 14:41)  FatFS у меня выдает до 5 МБайта в секунду для SDHC (с буферизацией конечно). Что значит "с буферизацией"? Цитата(sergeeff @ Sep 29 2011, 14:08) А со временем появяются дополнительные накладные расходы типа что-то стереть в директории, сами директории растут и прочее. У меня лишь быстро увеличивается количество файлов. А разве увеличение количества файлов влечет за собой увеличение времени создания файла и записи в него? Я тоже предполагал, что виной всему "накладные расходы". Но как с этим бороться? Ведь после закрытия файла мы возвращаемся в исходное положение - освобождается дескриптор файла и все связанные с ним структуры.
Сообщение отредактировал sambotey - Sep 29 2011, 12:27
|
|
|
|
|
Sep 29 2011, 12:48
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(sambotey @ Sep 29 2011, 16:26)  Что значит "с буферизацией"? То и значит - формирую буферы по 6 МБайт в SDRAM и затем записываю их. А иначе быстрых скоростей с SDHC и не видать - по спецификации карта может давать задержки до 250 мс, при чем независимо от класса.
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Sep 29 2011, 13:02
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sambotey @ Sep 29 2011, 16:26)  А разве увеличение количества файлов влечет за собой увеличение времени создания файла и записи в него? Неизбежно влечет, ведь для создания нового файла нужно полностью перелопатить текущую директорию, чтобы: а) убедиться, что файла с таким же именем не существует (не знаю, делает ли FatFS, и можно ли отключить) б) найти/добавить свободное место в директории Цитата(sambotey @ Sep 29 2011, 16:26)  Но как с этим бороться? Кэшировать диск.
|
|
|
|
|
Sep 29 2011, 14:18
|
Участник

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956

|
- использовать FAT32. у Чена сделан быстрый поиск свободного места.
- использовать подкаталоги, в каждом, к примеру, max 256 файлов
|
|
|
|
|
Sep 30 2011, 06:27
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 25-08-11
Пользователь №: 66 868

|
Всем громадное спасибо за множество дельных советов. Цитата(aaarrr @ Sep 29 2011, 16:02)  Кэшировать диск. А это как делается? Цитата(Lotor @ Sep 29 2011, 15:48)  То и значит - формирую буферы по 6 МБайт в SDRAM и затем записываю их. У меня LPC1768, так что могу использовать лишь SRAM и буфер больше 30Kb создать не получается. Сейчас пробую DMA.
Сообщение отредактировал sambotey - Sep 30 2011, 06:38
|
|
|
|
|
Sep 30 2011, 06:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sambotey @ Sep 30 2011, 10:27)  А это как делается? Например, так. Но если памяти только 30кБайт, то смысла нет практически, к сожалению  Цитата(sambotey @ Sep 30 2011, 10:27)  Что-то я не нашел в спецификации замечания по поводу задержки до 250мс Оно там есть точно. Просто поищите "ms".
|
|
|
|
|
Oct 3 2011, 12:59
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 25-08-11
Пользователь №: 66 868

|
Цитата(sergeeff @ Sep 30 2011, 23:45)  Вы, надеюсь, реализовали мультисекторную запись/чтение? Да, я информацию всего файла сохраняю в буфер, который уже записываю на карточку именно с помощью мультисекторной записи. Однако проблема с постепенным уменьшением скорости записи осталась. Здесь мне помог совет Цитата(Grape @ Sep 29 2011, 17:18)  - использовать подкаталоги, в каждом, к примеру, max 256 файлов Сейчас карточка непрерывно пишет со скоростью 2fps. Уже терпимо, но хотелось бы побыстрее. Сейчас пытаюсь упомянутый буфер писать по DMA.
Сообщение отредактировал sambotey - Oct 3 2011, 13:05
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|