SapegoAL 0 19 декабря, 2012 Опубликовано 19 декабря, 2012 · Жалоба Доброго времени суток. Делаю новое изделие. Проект большой. 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 19 декабря, 2012 Опубликовано 19 декабря, 2012 (изменено) · Жалоба Не, падажжите. :) Если у Вас модбас на усартах, то хоть в RTU хоть в ASCII варианте DMA реально работает только по передаче. Правильно? А на прием - чем оно поможет? При этом с трудом можно представить ситуацию, чтобы шину подгрузить. Это к ETH надо еще штук 40 усартов, чтобы проблема была... ЗЫ Все равно при приеме уарта и crc16 на лету надо считать и таймауты сбрасывать либо SOF/CR/LF ловить. Изменено 19 декабря, 2012 пользователем _Pasha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA??? Ну конечно если скорости из ряда стандартных до 115200 (если больше - тогда ещё есть резон). При скорости 115200 частота прерываний при программной реализации == 115200/10/14 == 823Гц (TX IRQ ещё меньше) - для такого процессора это несущественно (даже на частотах <48МГц тактовой загрузка CPU на ISR будет не более сотых долей процента). И гемору на порядок меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба 115200/10/14 == 823Гц (TX IRQ ещё меньше) Откуда /14 ? И почему по TX должно быть меньше, чем по RX ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Откуда /14 ? И почему по TX должно быть меньше, чем по RX ? От FIFO. На RX максимальный уровень срабатывание события == 14, TX - вроде после полного опустошения буфера. Или на STM не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба У stm32 нет фифо на уартах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба У stm32 нет фифо на уартах. Да??? фуууу...... И как их можно сравнивать с нормальными LPC??? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба У stm32 нет фифо на уартах. Это еще поспорить можно. Фифо на 4хх делается на основе DMA с циклическим поинтером. Но сказано жеж: модбас. Куда там фифо на приём? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Это еще поспорить можно. Фифо на 4хх делается на основе DMA с циклическим поинтером. Вы не в маркетинге случайно работаете? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Вы не в маркетинге случайно работаете? :) После таких слов можно смело (ногами) открывать дверь и требовать, чтобы оне поставили на довольствие агентом влияния. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Не слишком ли много будет загрузки шины. Кстати, этот вопрос не имеет отношения к DMA, так как загрузка шины скорее зависит от объёма трафика, а не от способа его обработки. Ну и, как сказано выше, чтобы перегрузить шину, надо очень постараться. Обратите внимание, что там не просто шина, а Bus Matrix, то есть допускает одновременную передачу не пересекающихся потоков. Может при такой загрузке эфективность будет падать и выигрыш будет близкий к нулю, а расход памяти увеличится? Не нужно заниматься преждевременной оптимизацией: как известно, это всегда приводит к лишнему геморрою и почти никогда - к реальной пользе. Как уже сказали выше, сделайте на прерываниях: так проще, а существенный выигрыш от DMA тут не просматривается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Но сказано жеж: модбас. Куда там фифо на приём?А в чём проблема? FIFO с модбас и на приём прекрасно работает. Ну и, как сказано выше, чтобы перегрузить шину, надо очень постараться. Обратите внимание, что там не просто шина, а Bus Matrix, то есть допускает одновременную передачу не пересекающихся потоков.У меня шина на Cortex-M3 NXP изредка перегружается при 2-х параллельно работающих SSP через DMA (по 2 потока tx/rx), один SSP SCLK=20МГц, другой - SCLK=30МГц. Байтовый режим, пакетная передача, CPU_CLK==120МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба У меня шина на Cortex-M3 NXP изредка перегружается... а как вы это определили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба а как вы это определили? Если поставить управление линией SSEL от SSP, то изредка (раз на неск. сотен-тысяч транзакций) сигнал SSEL прерывается. SSP-мастер. Если поставить управление SSEL от GPIO - всё ок, или если снизить частоты SCLK ниже некоторых значений, то тоже прерывания SSEL пропадали. Хотя, возможно, проблема была в чём-то другом...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 20 декабря, 2012 Опубликовано 20 декабря, 2012 · Жалоба Вообще не понимаю зачем народ так упорно пытается юзать UART через DMA??? Нет, как раз и не пользовал. Вот и спрашивал, стоит ли начинать. Правда, на LPC fifo на 16 байт было иможно было пакетом обрабатывать. Там вообще не парился. Кстати здесь CRC зато есть. )) === Спасибо всем за советы. Так и поступлю. Программный UART. Если что, то потом перепишу. Лучше поупираюсь с at45db. Хотя там у меня тоже объёмы очень небольшие и смысла большого тоже не просматривается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться