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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Рациональное применение DMA, Обращаюсь к коллективному разуму.
SasaVitebsk
сообщение Dec 19 2012, 20:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Доброго времени суток. Делаю новое изделие. Проект большой. FreeRTOS, GLCD+GUI, измерения и так далее. Проц stm32f407. Из сетевых - 3 порта USART c MODBUS + ETHERNET. Хотелось бы создать одну задачу по USART и запустить 3 экземпляра. Есть следующий вопрос. Просматривается, что при реализации посредством DMA объём потребляемой памяти увеличится. Кроме того с ETERNET никогда ранее не работал. Поэтому оценить пока не могу. Планирую LwIP применить. Возможно ещё при записи на AT45DB применю DMA, хотя это и не критично. Там объём работы незначителен.
Так вот вопрос. Не слишком ли много будет загрузки шины. 3 USART + ETH. Может при такой загрузке эфективность будет падать и выигрыш будет близкий к нулю, а расход памяти увеличится? Один USART будет плотно загружен на 115200 для примера. Остальные эпизодически. На ETH тоже MODBUS/TCP. То есть загрузка врятли плотная.
Кто подскажет в общих чертах? Стоит ли связываться с DMA на USART?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 19 2012, 20:31
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Не, падажжите. sm.gif
Если у Вас модбас на усартах, то хоть в RTU хоть в ASCII варианте DMA реально работает только по передаче. Правильно?
А на прием - чем оно поможет? При этом с трудом можно представить ситуацию, чтобы шину подгрузить. Это к ETH надо еще штук 40 усартов, чтобы проблема была...
ЗЫ
Все равно при приеме уарта и crc16 на лету надо считать и таймауты сбрасывать либо SOF/CR/LF ловить.

Сообщение отредактировал _Pasha - Dec 19 2012, 21:18
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2012, 04:59
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA???
Ну конечно если скорости из ряда стандартных до 115200 (если больше - тогда ещё есть резон).
При скорости 115200 частота прерываний при программной реализации == 115200/10/14 == 823Гц (TX IRQ ещё меньше) - для такого процессора это несущественно (даже на частотах <48МГц тактовой загрузка CPU на ISR будет не более сотых долей процента).
И гемору на порядок меньше.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Dec 20 2012, 05:14
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(jcxz @ Dec 20 2012, 08:59) *
115200/10/14 == 823Гц (TX IRQ ещё меньше)


Откуда /14 ?
И почему по TX должно быть меньше, чем по RX ?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2012, 05:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(dimka76 @ Dec 20 2012, 11:14) *
Откуда /14 ?
И почему по TX должно быть меньше, чем по RX ?

От FIFO. На RX максимальный уровень срабатывание события == 14, TX - вроде после полного опустошения буфера.
Или на STM не так?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 20 2012, 06:10
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



У stm32 нет фифо на уартах.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2012, 06:45
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Flexz @ Dec 20 2012, 12:10) *
У stm32 нет фифо на уартах.

Да??? фуууу......
И как их можно сравнивать с нормальными LPC???
wink.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 20 2012, 06:45
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Flexz @ Dec 20 2012, 10:10) *
У stm32 нет фифо на уартах.

Это еще поспорить можно. Фифо на 4хх делается на основе DMA с циклическим поинтером.

Но сказано жеж: модбас. Куда там фифо на приём?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 20 2012, 07:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата(_Pasha @ Dec 20 2012, 10:45) *
Это еще поспорить можно. Фифо на 4хх делается на основе DMA с циклическим поинтером.

Вы не в маркетинге случайно работаете? sm.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 20 2012, 07:23
Сообщение #10


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Flexz @ Dec 20 2012, 11:12) *
Вы не в маркетинге случайно работаете? sm.gif

После таких слов можно смело (ногами) открывать дверь и требовать, чтобы оне поставили на довольствие агентом влияния. sm.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 20 2012, 09:56
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(SasaVitebsk @ Dec 20 2012, 00:17) *
Не слишком ли много будет загрузки шины.

Кстати, этот вопрос не имеет отношения к DMA, так как загрузка шины скорее зависит от объёма трафика, а не от способа его обработки. Ну и, как сказано выше, чтобы перегрузить шину, надо очень постараться. Обратите внимание, что там не просто шина, а Bus Matrix, то есть допускает одновременную передачу не пересекающихся потоков.

Цитата(SasaVitebsk @ Dec 20 2012, 00:17) *
Может при такой загрузке эфективность будет падать и выигрыш будет близкий к нулю, а расход памяти увеличится?

Не нужно заниматься преждевременной оптимизацией: как известно, это всегда приводит к лишнему геморрою и почти никогда - к реальной пользе. Как уже сказали выше, сделайте на прерываниях: так проще, а существенный выигрыш от DMA тут не просматривается.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2012, 10:48
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(_Pasha @ Dec 20 2012, 12:45) *
Но сказано жеж: модбас. Куда там фифо на приём?
А в чём проблема? FIFO с модбас и на приём прекрасно работает.

Цитата(scifi @ Dec 20 2012, 15:56) *
Ну и, как сказано выше, чтобы перегрузить шину, надо очень постараться. Обратите внимание, что там не просто шина, а Bus Matrix, то есть допускает одновременную передачу не пересекающихся потоков.
У меня шина на Cortex-M3 NXP изредка перегружается при 2-х параллельно работающих SSP через DMA (по 2 потока tx/rx), один SSP SCLK=20МГц, другой - SCLK=30МГц. Байтовый режим, пакетная передача, CPU_CLK==120МГц
Go to the top of the page
 
+Quote Post
Flexz
сообщение Dec 20 2012, 11:37
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Цитата(jcxz @ Dec 20 2012, 14:48) *
У меня шина на Cortex-M3 NXP изредка перегружается...

а как вы это определили?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 20 2012, 15:15
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Flexz @ Dec 20 2012, 17:37) *
а как вы это определили?

Если поставить управление линией SSEL от SSP, то изредка (раз на неск. сотен-тысяч транзакций) сигнал SSEL прерывается. SSP-мастер.
Если поставить управление SSEL от GPIO - всё ок, или если снизить частоты SCLK ниже некоторых значений, то тоже прерывания SSEL пропадали.
Хотя, возможно, проблема была в чём-то другом......
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 20 2012, 19:27
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(jcxz @ Dec 20 2012, 07:59) *
Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA???

biggrin.gif
Нет, как раз и не пользовал. Вот и спрашивал, стоит ли начинать. Правда, на LPC fifo на 16 байт было иможно было пакетом обрабатывать. Там вообще не парился.
Кстати здесь CRC зато есть. ))
===
Спасибо всем за советы. Так и поступлю. Программный UART. Если что, то потом перепишу. Лучше поупираюсь с at45db. Хотя там у меня тоже объёмы очень небольшие и смысла большого тоже не просматривается.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 21 2012, 01:55
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(SasaVitebsk @ Dec 21 2012, 01:27) *
Кстати здесь CRC зато есть. ))

В LPC177x/LPC178x тоже есть.
Go to the top of the page
 
+Quote Post

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

 


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


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