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

 
 
> Проблемка с записью данных в файл, stm32+cubeF2+fatfs+usb
XWoo
сообщение Oct 20 2015, 13:56
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 19-11-09
Пользователь №: 53 737



Доброго времени суток, коллеги.
Наблюдаю следующую вещь. В цикле идёт периодическая запись одного байта в файл. Данные пишутся без проблем. Но если поставить для отладки светодиод в этот цикл, то по осциллограмме получается следующее: несколько раз светодиод моргает с одинаковой задержкой, а один раз эта задержка в несколько раз увеличивается. Задержка получается именно в функции записи в файл (f_printf или f_puts). Если закомментировать эту функцию, то моргание светодиода становится равномерным!
Пробовал писать массив размером 64,128,256,512,1024,2048,4096 байт - ничего не меняется.

Я использую кейл и библиотеку stm32cubef2. В ней есть пример с использованием usbhost и файловой системы fatfs (от chanа) для записи/чтения строки в файл на usb-флэшку. Я заменил fatfs на последнюю версию с сайта автора - всё повторяется. Пробовал работать с разными флэшками на 4 и 8 Гбайт - задержка всё равно есть.

Есть ли решение этой проблемки? Как с этим бороться? Можно ли это задержку убрать или хотябы уменьшить?

По времени получалось следующее: несколько раз, например, задержка в функции записи была 50 мс, а потом один раз становится 500 мс.

Может это такая особенность библиотеки, драйверов или самой fatfs ?

Сообщение отредактировал XWoo - Oct 20 2015, 14:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CrimsonPig
сообщение Oct 20 2015, 14:10
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(XWoo @ Oct 20 2015, 14:56) *
Наблюдаю следующую вещь. В цикле идёт периодическая запись одного байта в файл. Данные пишутся без проблем. Но если поставить для отладки светодиод в этот цикл, то по осциллограмме получается следующее: несколько раз светодиод моргает с одинаковой задержкой, а один раз эта задержка в несколько раз увеличивается. Задержка получается именно в функции записи в файл (f_printf или f_puts). Если закомментировать эту функцию, то моргание светодиода становится равномерным!
Пробовал писать массив размером 64,128,256,512,1024,2048,4096 байт - ничего не меняется.
Я использую кейл и библиотеку stm32cubef2. В ней есть пример с использованием usbhost и файловой системы fatfs (от chanа) для записи/чтения строки в файл на usb-флэшку. Я заменил fatfs на последнюю версию с сайта автора - всё повторяется. Пробовал работать с разными флэшками на 4 и 8 Гбайт - задержка всё равно есть.
Есть ли решение этой проблемки? Как с этим бороться? Можно ли это задержку убрать или хотябы уменьшить?


Проблемы как таковой нет sm.gif есть небольшое непонимание некоторых вещей:

- никто не знает (и все может поменяться в любой версии софта), как реализованы высокоуровневые функции над файловой системой (fprintf и им подобные). Как они кешируют данные для записи\чтения и когда решают эти кеши скинуть в файловую систему. Никаких гаранитий по времянкам тут нет.

- никто не знает (и все может поменяться в любой версии софта), как реализованы функции самой файловой системы, как она работает со своими внутренними кешами, когда решает их скинуть на физический носитель итп. Никаких гаранитий по времянкам тут нет. Так же нет никаких гарантий что данные и метаданные файловой системы будут вообще записаны (здравствуй FAT)

- запись на носители с NAND флэшем никаких особых гарантий по времянкам не дает, поскольку унутре оно в любой момент может начать процесс освобождения erase blocks.

Так что рассчитывать на какие-то конкретные задержки и их отсутствие не стоит.. Можно с грехом пополам рассчитывать на какую-то среднюю производительность, да и то не всегда.
В консерватории надо править, то есть сам высокоуровневый подход к работе с данными.

Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 21 2015, 08:34
Сообщение #3


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(CrimsonPig @ Oct 20 2015, 17:10) *
- никто не знает (и все может поменяться в любой версии софта), как реализованы высокоуровневые функции над файловой системой (fprintf и им подобные). Как они кешируют данные для записи\чтения и когда решают эти кеши скинуть в файловую систему. Никаких гаранитий по времянкам тут нет.


Вообще говоря, fprintf - штука довольно очевидная. Легко изучается, легко подменяется на свой велосипед. Времянки по ней посчитать тоже очень легко (хочешь в тактах, хочешь - осциллографом), и они достаточно стабильные. Разговор "всё может САМО поменяться" вообще ни о чём, с чуть меньшей вероятностью Земля завтра налетит на небесную ось.

А вот ST'шная библиотека хоста - штука довольно странная. Изучать её можно долго, там наверчено хрен знает что. Можно ли это как-то значительно оптимизировать - не знаю... Бесплатных аналогов этой библиотеки не знаю. Хороших платных - тоже не знаю (в прошлой конторе работали с венграми HCC - тоже есть нарекания, но теперь ещё и за деньги; поддержка не очень помогает).

Если не поможет добавление буферов (и запись данных не по одному байту!) - открывается большой простор для творчества и костылестроения. Можно, например, свой драйвер FAT сделать, который будет писать в заранее подготовленный файл - количество записей уменьшится вдвое, не нужно будет обновлять запись FAT.

Цитата(XWoo @ Oct 21 2015, 08:56) *
Ещё говорят, что usb-драйвер/библиотека/протокол (вся эта программная реализация usb) "съедает" много времени у ядра (и ресурсоёмкая), поэтому рекомендуют ставить самый высокий приоритет usb-прерыванию (0 или 1) соотвествующей функцией при инициализации.

Нет, после всех предварительных действий там просто перекладывание данных из памяти в регистры USB.
Правда, действительно, хост неадекватно себя ведёт, если приоритет прерывания достаточно низкий. Кто виноват, понять не удалось.

Цитата(XWoo @ Oct 21 2015, 08:56) *
При использовании usb из-под куба тут на форумах где-то говорили, что эта rtx автоматом подключается в код без ведома программиста (это нужно для работы самого usb и всего с ним связанного, именно при применении куба).

Не читайте советских газет!
Куб, конечно, много чего "без ведома" творит, но не настолько же.

Кстати, куб в принципе не может работать под ОС (точнее, корректно обрабатывать обращения к одной и той же периферии из нескольких потоков).
Хотя может уже и поправили это безобразие:
stm32f1xx_hal_def.h
Код
#if (USE_RTOS == 1)
  #error " USE_RTOS should be 0 in the current HAL release "
#else


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Harvester
сообщение Oct 21 2015, 11:15
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(esaulenka @ Oct 21 2015, 11:34) *
Не читайте советских газет!
Куб, конечно, много чего "без ведома" творит, но не настолько же.

Газеты, может действительно не стоит читать, а вот то, что при использовании USB-библиотеки от ST подключается RTX - это факт.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- XWoo   Проблемка с записью данных в файл   Oct 20 2015, 13:56
|- - CrimsonPig   Цитата(esaulenka @ Oct 21 2015, 09:34) Ес...   Oct 21 2015, 09:07
- - XWoo   CrimsonPig, спасибо за ответ. А вот если мне надо...   Oct 20 2015, 14:26
|- - CrimsonPig   Цитата(XWoo @ Oct 20 2015, 15:26) Crimson...   Oct 20 2015, 14:33
- - toweroff   XWoo, а куб-то пот кайлами в RTX вертится? Никогда...   Oct 20 2015, 15:32
- - XWoo   CrimsonPig, понял вашу мысль. Спасибо. Идея с нес...   Oct 21 2015, 05:56
- - XWoo   esaulenka, советских газет более читать не будем. ...   Oct 21 2015, 08:54
|- - esaulenka   Цитата(XWoo @ Oct 21 2015, 11:54) В верси...   Oct 21 2015, 10:02
- - XWoo   Понятно. Благодарю за комментарии. В кубе в прим...   Oct 21 2015, 10:37
- - XWoo   Во-во. Я ж где-то вычитал такое недавно на форуме ...   Oct 21 2015, 11:48
- - esaulenka   Взял куб (полугодовой давности, я его не обновляю ...   Oct 21 2015, 19:53
- - XWoo   Как ни странно, а мне тоже интересна "автомат...   Oct 22 2015, 05:42


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

 


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


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