Перейти к содержанию
    

Рациональное применение DMA

Доброго времени суток. Делаю новое изделие. Проект большой. 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, падажжите. :)

Если у Вас модбас на усартах, то хоть в RTU хоть в ASCII варианте DMA реально работает только по передаче. Правильно?

А на прием - чем оно поможет? При этом с трудом можно представить ситуацию, чтобы шину подгрузить. Это к ETH надо еще штук 40 усартов, чтобы проблема была...

ЗЫ

Все равно при приеме уарта и crc16 на лету надо считать и таймауты сбрасывать либо SOF/CR/LF ловить.

Изменено пользователем _Pasha

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA???

Ну конечно если скорости из ряда стандартных до 115200 (если больше - тогда ещё есть резон).

При скорости 115200 частота прерываний при программной реализации == 115200/10/14 == 823Гц (TX IRQ ещё меньше) - для такого процессора это несущественно (даже на частотах <48МГц тактовой загрузка CPU на ISR будет не более сотых долей процента).

И гемору на порядок меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

115200/10/14 == 823Гц (TX IRQ ещё меньше)

 

Откуда /14 ?

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда /14 ?

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

От FIFO. На RX максимальный уровень срабатывание события == 14, TX - вроде после полного опустошения буфера.

Или на STM не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У stm32 нет фифо на уартах.

Да??? фуууу......

И как их можно сравнивать с нормальными LPC???

;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У stm32 нет фифо на уартах.

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

 

Но сказано жеж: модбас. Куда там фифо на приём?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вы не в маркетинге случайно работаете? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не в маркетинге случайно работаете? :)

После таких слов можно смело (ногами) открывать дверь и требовать, чтобы оне поставили на довольствие агентом влияния. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не слишком ли много будет загрузки шины.

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

 

Может при такой загрузке эфективность будет падать и выигрыш будет близкий к нулю, а расход памяти увеличится?

Не нужно заниматься преждевременной оптимизацией: как известно, это всегда приводит к лишнему геморрою и почти никогда - к реальной пользе. Как уже сказали выше, сделайте на прерываниях: так проще, а существенный выигрыш от DMA тут не просматривается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но сказано жеж: модбас. Куда там фифо на приём?
А в чём проблема? FIFO с модбас и на приём прекрасно работает.

 

Ну и, как сказано выше, чтобы перегрузить шину, надо очень постараться. Обратите внимание, что там не просто шина, а Bus Matrix, то есть допускает одновременную передачу не пересекающихся потоков.
У меня шина на Cortex-M3 NXP изредка перегружается при 2-х параллельно работающих SSP через DMA (по 2 потока tx/rx), один SSP SCLK=20МГц, другой - SCLK=30МГц. Байтовый режим, пакетная передача, CPU_CLK==120МГц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня шина на Cortex-M3 NXP изредка перегружается...

а как вы это определили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как вы это определили?

Если поставить управление линией SSEL от SSP, то изредка (раз на неск. сотен-тысяч транзакций) сигнал SSEL прерывается. SSP-мастер.

Если поставить управление SSEL от GPIO - всё ок, или если снизить частоты SCLK ниже некоторых значений, то тоже прерывания SSEL пропадали.

Хотя, возможно, проблема была в чём-то другом......

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA???

:biggrin:

Нет, как раз и не пользовал. Вот и спрашивал, стоит ли начинать. Правда, на LPC fifo на 16 байт было иможно было пакетом обрабатывать. Там вообще не парился.

Кстати здесь CRC зато есть. ))

===

Спасибо всем за советы. Так и поступлю. Программный UART. Если что, то потом перепишу. Лучше поупираюсь с at45db. Хотя там у меня тоже объёмы очень небольшие и смысла большого тоже не просматривается.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...