|
STM32L4 + SD + DMA + FatFs |
|
|
|
 |
Ответов
|
Jul 30 2017, 07:58
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(Genadi Zawidowski @ Jul 30 2017, 09:44)  Включишь кэш данных процессора - появится. Он у меня включен, но я умею его приготовить соответствующим образом  То кинцо, что я тебе посылал довольно активно использует кеши, без них времени потребовалось бы намного больше (или письмо не дошло?). Но разговор то был не про кэши? Цитата(AHTOXA @ Jul 30 2017, 10:37)  Ну давайте, сделаем RTFM  Открываем ссылку: disk_write(), читаем: Ещё вопросы есть? У меня вопросов и не было, и если Вы внимательно прочитаете мое сообщение, то я не возражал, что в общем случае доступ может быть невыровненный. Однако там же описано, что сделать, чтобы он всегда был выровненный. Про это я тоже написал в том же сообщении. Вы в Вашем примере пишите как попало, отсюда и невыровненный доступ. Никакого откровения здесь нет - все есть в мануале на FatFS, почему я и посоветовал сделать RTFM.
|
|
|
|
|
Jul 30 2017, 08:17
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Шаманъ @ Jul 30 2017, 12:58)  Однако там же описано, что сделать, чтобы он всегда был выровненный. Про это я тоже написал в том же сообщении. Первым пунктом там идёт: Цитата Convert word transfer to byte transfer in this function if needed. - Recommended. На что, собственно, я и напираю уже который пост. И это наиболее универсальное решение. А как сделать, чтобы он был всегда выровненный при записи блоков данных произвольной длины? (Например, текстовых логов). Вот прямо для приведённого мной выше сценария, можете рассказать? Мне кажется, это невозможно. (Ну разве что пропатчить FatFs, чтобы все записи велись через файловый буфер, но это будет приличное замедление). Цитата(Allregia @ Jul 30 2017, 13:05)  Джентельмены, мы пишем стрим строго по 8К или 16К блоками, так что проблемы с выравниваниями думаю нет. Прошу прощения, что увёл тему несколько в сторону. Но вопрос, я считаю, важный.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 30 2017, 08:43
|
Знающий
   
Группа: Участник
Сообщений: 758
Регистрация: 27-08-08
Пользователь №: 39 839

|
Цитата(AHTOXA @ Jul 30 2017, 11:17)  А как сделать, чтобы он был всегда выровненный при записи блоков данных произвольной длины? (Например, текстовых логов). Для текстовых логов писать их кусками менее 512байт каждый. Как правило оно само собой так и получается. По крайней мере я не могу припомнить, чтобы в текстовый лог я писал за раз более 0.5К... Для нетекстовых изменить структуру данных так, чтобы все было выровнено по границам слова - и в памяти, и в файле. В общем случае, если хочется ни о чем не париться, то функции обмена с картой должны уметь работать с невыровненными данными. Как вариант написать "надстройки" над функциями чтения/записи, которые будут дробить вызовы записи/чтения фатфс, чтобы фрагменты были менее 512байт, и использовать эти функции там, где может быть проблема с невыровненными данными. Хотя проще в случае невыровненных данных обработать ситуацию прямо в disk_read/disk_write. Цитата Вот прямо для приведённого мной выше сценария, можете рассказать? Мне кажется, это невозможно. В disk_read/disk_write в случае невыровненного адреса данных переписываем данные во временный буфер (выровненный, на 512байт) и пишем посекторно из него (при чтении делаем также - читаем в буфер, копируем в память). Это так сказать по методу "чайника" подход  Более правильно конечно разобраться с ДМА и, если он умеет работать с невыровненными адресами, просто правильно "приготовить" его (но у меня никогда такой надобности не возникало, потому здесь ничего не подскажу). Цитата(Allregia @ Jul 30 2017, 11:05)  может кто что сказать по поводу того, что я постил выше? Могу сказать одно, чем неделю (!) переделывать чужой код лучше написать свое строго по мануалу. Вы ведь не знаете какие грабли припрятаны в чужом коде?
Сообщение отредактировал Шаманъ - Jul 30 2017, 08:46
|
|
|
|
|
Jul 30 2017, 09:13
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Шаманъ @ Jul 30 2017, 13:43)  Более правильно конечно разобраться с ДМА и, если он умеет работать с невыровненными адресами, просто правильно "приготовить" его (но у меня никогда такой надобности не возникало, потому здесь ничего не подскажу). Вот, вот оно!  Я ведь как раз и советую настроить DMA на доступ по байтам, и тогда всё работает как часы! Собственно, с чего я и влез в эту тему: вы спросили, зачем у Геннадия доступ к памяти побайтный, и я привёл пример, когда это может быть важно. Кстати, я проводил замеры скорости, и у меня побайтный оказался даже немного быстрее, чем доступ по 32 бита.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
Allregia STM32L4 + SD + DMA + FatFs Jul 26 2017, 18:49 Genadi Zawidowski Есть для не "L" а для "F"
htt... Jul 26 2017, 18:54 Allregia Спасибо, попробую. Jul 26 2017, 19:24 Allregia Трудно там разобраться, тем более что L4 и F4 немн... Jul 27 2017, 08:20 Genadi Zawidowski Да, у L проще... так попробовали бы по аналогии...... Jul 27 2017, 08:57 Шаманъ Genadi Zawidowski, а зачем разные размеры источник... Jul 27 2017, 11:34 AHTOXA Цитата(Шаманъ @ Jul 27 2017, 16:34) Genad... Jul 27 2017, 14:46  Шаманъ Цитата(AHTOXA @ Jul 27 2017, 17:46) А, ту... Jul 27 2017, 20:03 Genadi Zawidowski Там было много непонятного... много казалось бы ра... Jul 27 2017, 11:41 Шаманъ Цитата(Genadi Zawidowski @ Jul 27 2017, 14... Jul 27 2017, 11:49 Genadi Zawidowski Если посмотришь, у меня только инициализация DMA с... Jul 27 2017, 11:58 Allregia У L4, как я понял. в DMA нет барста, поэтому так в... Jul 27 2017, 18:53 AHTOXA Дело не только и не столько в burst, сколько в пос... Jul 27 2017, 19:43  Allregia Цитата(AHTOXA @ Jul 27 2017, 20:43) Дело ... Jul 29 2017, 08:22 Genadi Zawidowski Используя у себя FatFs R0.12b, дорабатывал напильн... Jul 28 2017, 17:06 AHTOXA Выравнивание buf структуры FIL не помогает, всё ра... Jul 28 2017, 19:28 Genadi Zawidowski Цитатаbuf структуры FIL не помогает
Я два поля упо... Jul 28 2017, 22:03 AHTOXA Цитата(Genadi Zawidowski @ Jul 29 2017, 03... Jul 29 2017, 11:11 Genadi Zawidowski невыровненные обращения к фпайлу fatfs делает чере... Jul 29 2017, 11:29 Шаманъ Народ, может просто сделать RTFM?
Отсюда и дальше... Jul 30 2017, 06:22 AHTOXA Цитата(Шаманъ @ Jul 30 2017, 11:22) Народ... Jul 30 2017, 07:37 Genadi Zawidowski ЦитатаНичего править в FatFs надобности нет.
Включ... Jul 30 2017, 06:44 Allregia Джентельмены, мы пишем стрим строго по 8К или 16К ... Jul 30 2017, 08:05    Шаманъ Цитата(AHTOXA @ Jul 30 2017, 12:13) Вот, ... Jul 30 2017, 09:24     AHTOXA Цитата(Шаманъ @ Jul 30 2017, 14:24) Так м... Jul 30 2017, 12:06 Genadi Zawidowski ЦитатаГеннадия доступ к памяти побайтный, и я прив... Jul 30 2017, 13:29 Шаманъ Цитата(Genadi Zawidowski @ Jul 30 2017, 16... Jul 30 2017, 15:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|