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

 
 
> Что может замедлять работу FatFS?
sambotey
сообщение Sep 29 2011, 10:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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).
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
sergeeff
сообщение Sep 29 2011, 11:08
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Да сама карточка и тормозит. Если вы померяете время записи файла, то 90-95% занимают операции с карточкой.

А со временем появяются дополнительные накладные расходы типа что-то стереть в директории, сами директории растут и прочее.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Sep 29 2011, 11:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(sambotey @ Sep 29 2011, 14:43) *
Думаю, что пора переходить к функциям самой FatFS(файл ff.c).

Ошибочное решение. FatFS у меня выдает до 5 МБайта в секунду для SDHC (с буферизацией конечно).
Библиотечные функции трогать не стоит.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
sambotey
сообщение Sep 29 2011, 12:26
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Lotor
сообщение Sep 29 2011, 12:48
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(sambotey @ Sep 29 2011, 16:26) *
Что значит "с буферизацией"?

То и значит - формирую буферы по 6 МБайт в SDRAM и затем записываю их. А иначе быстрых скоростей с SDHC и не видать - по спецификации карта может давать задержки до 250 мс, при чем независимо от класса.


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
skripach
сообщение Sep 29 2011, 12:50
Сообщение #6


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Если есть возможность объединить много мелких файлов в один, увеличить буфер записи.


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2011, 13:02
Сообщение #7


Гуру
******

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



Цитата(sambotey @ Sep 29 2011, 16:26) *
А разве увеличение количества файлов влечет за собой увеличение времени создания файла и записи в него?

Неизбежно влечет, ведь для создания нового файла нужно полностью перелопатить текущую директорию, чтобы:
а) убедиться, что файла с таким же именем не существует (не знаю, делает ли FatFS, и можно ли отключить)
б) найти/добавить свободное место в директории

Цитата(sambotey @ Sep 29 2011, 16:26) *
Но как с этим бороться?

Кэшировать диск.
Go to the top of the page
 
+Quote Post
Grape
сообщение Sep 29 2011, 14:18
Сообщение #8


Участник
*

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




- использовать FAT32. у Чена сделан быстрый поиск свободного места.

- использовать подкаталоги, в каждом, к примеру, max 256 файлов

Go to the top of the page
 
+Quote Post
sambotey
сообщение Sep 30 2011, 06:27
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 30 2011, 06:46
Сообщение #10


Гуру
******

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



Цитата(sambotey @ Sep 30 2011, 10:27) *
А это как делается?

Например, так.
Но если памяти только 30кБайт, то смысла нет практически, к сожалению sad.gif

Цитата(sambotey @ Sep 30 2011, 10:27) *
Что-то я не нашел в спецификации замечания по поводу задержки до 250мс

Оно там есть точно. Просто поищите "ms".
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 30 2011, 20:45
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(sambotey @ Sep 30 2011, 09:27) *
Всем громадное спасибо за множество дельных советов.


Вы, надеюсь, реализовали мультисекторную запись/чтение?
Go to the top of the page
 
+Quote Post
sambotey
сообщение Oct 3 2011, 12:59
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post

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

 


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


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