roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 04:32

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Использование DMA для вывода данных в консоль (STM32)
СообщениеДобавлено: 12 фев 2013, 14:48 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Народ, помогите придумать, как правильно использовать DMA для вывода данных, например, в консоль. У меня сейчас реализована функция печати в буффер, по окончании которой дергается контроллер ДМА, ему передается адрес буфера и количество байт на отправку, контроллер дальше работает сам.

Проблема в том, что функция печати может быть вызвана в момент, когда предыдущая операция не закончена. Функция отключит контроллер, перезапишет адрес буфера и начнет передачу новой информации. Старая информация при этом просто не будет передана. Можно, конечно, делать проверку и, например, ждать до окончания предыдущей операции, но это сводит на нет все преимущества использования ДМА.

Использование временного буфера для хранения данных до окончания предыдущей операции также проблему не решает, так как вызовов может быть больше чем один.

Есть идея сделать кольцевой пре-буфер. Т.е. если предыдущая операция не завершена, то складываем данные в кольцевой пребуфер. По окончании операции копируем из пребуфера все накопившиеся данные и суем их в рабочий буфер для работы контроллера.

Еще я пытался играть со счетчиками ДМА, но не очень-то получилось. Т.е. пихать данные в тот же самый буфер, С которыми контроллер уже работает и играться указателями.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование DMA для вывода данных в консоль (STM32)
СообщениеДобавлено: 12 фев 2013, 16:08 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Вижу 2 варианта:
- можно несколько линейных буферов в очереди держать. Когда передача буфера закончена, переключаемся на следующий.
- Всегда все складывать в кольцевой буфер. DMA отсылает заполненный буфер, по окончании передачи проверяется - не нафигачили ли туда еще чего-нибудь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO