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

 
 
 
Reply to this topicStart new topic
> stm32 usart dma, dma на передачу без heap, миф или реальность?
demiurg_spb
сообщение Mar 19 2012, 07:37
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Решил тут заюзать dma для stm32 usart, наткнулся на принципиальный момент.
Вводное: отправка нескольких пакетов подряд без ожидания окончания отправки предыдущего пакета и без использования динамической памяти.

Пока остановился на том, что приём по dma, а отправка по прерыванию с fifo. (кособоко как-то...)

Накидайте идейки кто какие может (пусть на первый взгляд и утопические).

Спасибо!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
neiver
сообщение Mar 19 2012, 08:50
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Я думаю можно попробовать так:
1. пул из N блоков байт одинакового размера;
2. блоки организованы в FIFO;
3. берём из пула первый сводный блок и пишем в него пока он не заполнится;
4. помечаем заполненный блок как готовый к отправке;
5. если DMA не еще включен, отправляем заполненный блок;
6. в прерывании DMA по завершении передачи, если есть блоки готовые к передачи, то передаем их;
7. можно поставить в очередь передачи частично заполненный блок (надо хранить кол-во байт в нем), предусмотреть типа функции flush, которую вызавать в конце пакета, или по таймауту;
8. минимальное кол-во блоков - два.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 19 2012, 11:01
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Спасибо, но думаю что пул из фифо это уже избыточно, должно по идее хватать пула из пары буферов (так проще значительно будет).
Всё равно что второе фифо переполнится, что второй буфер - разницы уже ИМХО большой нет.
Тут наверное имеет смысл увеличивать размер пула (дробить на большее кол-во мелких буферов) чтобы в случае переполнения меньший хвостик херился.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
neiver
сообщение Mar 19 2012, 11:39
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



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

Сообщение отредактировал neiver - Mar 19 2012, 12:39
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Mar 19 2012, 12:28
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Я видимо не так вас понял с первого раза.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:16
Рейтинг@Mail.ru


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