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

 
 
7 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Эффективность DMA в SAM7, Выделено из "ARM много,..."
zltigo
сообщение Sep 27 2008, 20:44
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Sep 27 2008, 22:31) *
с 100 Ethernet MAC

MAC-ом от LPC на данный момент доволен как слон smile.gif. Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром.
Цитата
быстрым SPI...

SPI/SSP обычно себя ведут, вроде smile.gif, ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает smile.gif ) и теперь в ней все по тактам ядра.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2008, 20:50
Сообщение #17


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Sep 28 2008, 00:42) *
Справедливости ради:
...и без FIFO...
Ничего удивительного.
Конечно, но согласитесь что в данном случае ДМА лучший вариант чем FIFO.
Цитата
UART - не самый удачный пример в данном случае. Вот скоростной SPI - другое дело.

Цитата(aaarrr @ Sep 27 2008, 22:03) *
PDC предназначен для обслуживания медленной периферии, и с этой задачей справляется отлично.
Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ?
Цитата
Но лучше иметь и DMA и FIFO - тогда появляется возможность выбора.
Кто б спорил, более того иногда можно совмещать эти 2 варианта.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 27 2008, 20:53
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(zltigo @ Sep 28 2008, 01:34) *
до получения конца фрейма кладется в нужный буфер.

Как Вы определяете конец фрейма?
1) по количеству байт или
2) признаком конца является какой-то особый байт

Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать. Но ведь Вы говорили, что
Цитата
байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю

Значит, получается -- второе. Т.е. в самом прерывании (от периферии) забираете принятый байт, оцениваете его на предмет маркера конца фрейма и кладете (или не кладете) его в память, подсчитываете CRC, занимаетесь задачами байт-стаффинга ... ну и т.д. Но ведь это-то как раз не эффективно получается. Или я что-то не понял.

Цитата
тем не менее, по действительно с минимальными затратами ресурсов оказавшимуся в памяти фрейму надо пробежаться, посчитать сумму это, простите, ВРЕМЯ (хорошо, если квитирование есть и канал ждет, а если нет - ой!).


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

Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков".

Цитата
Короче где экономия от того, что у меня с небольшими затратами в памяти что-то потенциально НЕПОНЯТНОЕ оказалось?

Вы спрашиваете? Я Вам отвечу!
Экономия в том, что процессы получения и обработки становятся независимы друг от друга. Другими словами, процесс обработки мы можем выполнить тогда, когда высвободится процессор, в то же время, процесс получения потока в памать ресурсы проца вообще никак не занимает.

Правда тут есть накладные расходы, нужно иметь в памяти два буфера, которые работают по-переменно. (Но, как мне кажется, потери памяти не велики -- всего пол-кило байт!)

Как это выглядит. Принимаем заголовок пакета, где (помимо еще чего-нибудь) находится длина пакета.
Длину пакета засылаем в ДМА. И, собственно все! Ждем прерывания об окончании ДМА-операции. В это время решаем свои насущние задачи. Приходит прерывание от ДМА, переключаемся на второй буфер и ставим флаг готовности первого буфера. Выходим из прерывания. Где-то там в процессе бесконечного цикла должна быть проверка этого флага. Если флаг стоит, то вызываем функцию подсчета CRC и т.д. В это время могут возникать отдельные прерывания по приему байтов заголовка следующего пакета, которые не влияют на подсчет CRC и последущую обработку пакета.

Тут может быть имеет смысл признаться, что реальные устройства занимаются помимо описанных выше действий занимаются еще и другой работой: мониторят кнопочи, моргают светодиодиками, рисуют на экране... Вот про кнопочки -- это очень актуально. Если окажется, что система будет реагировать на нажатия с запаздыванием (если вообще сможет, гы-гы!), то такой девай вряд ли кому-то будет нужен.

Теоретически, интегральное время обработки всего и всех должно быть меньше, чем обшее время работы проца. В противном случае нужно выбирать другой более быстрый проц или решать задачу с привлечением нескольких камней. Одно дело математическое суммирование времен выполнения процессов без оглядки на то, что процессы несинхронны, и другое дело -- реальное рапределение занятости проца. Я говорю о том, когда процу "приспичит" делать одновременно сразу несколько дел: обработать пакет, нарисовать что-то на экране и успеть вякнуть на нажатие кнопки. Поэтому следует четко осознавать приоритеты задач, продолжительность выполнения задач и время, на какое можно отложить их выполнение (поставить в очередь).

Не скрою, мне тоже приходится решать уникальные трудные (== интересные) задачи. Боюсь, что поднятый мной вопрос об эффективности по-байтовой обработке потока очень многословен. На столько многословен, что обсуждение его в форуме становится практически невозможно. Поэтому, если нет возражений, то я снимаю его.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 20:56
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Sep 27 2008, 22:37) *
Пакеты длинной до 256байт, FIFO например в 16 байт будет более эфективен ?

Фреймы до где-то 386 байт, два потока по 115K в качестве вспомогательных задач. FIFO 16. Никаких проблем и близко не наблюдается.
Цитата
А каков % таких нештатных ситуаций/битых пакетов ?

В моих условиях может быть до 100% - надо жить и когда вместо даннных вдруг полный мусор пошел. Дело ведь не в том, что нельзя найти часный случай, когда голое FIFO или голое DMA на ARM7 не будет на сколько-то там проценов эффективнее, а в том, что это для поростых ARM совершенно сопоставимые по эффективности решения, и говорить "ах, как жить без DMA" совершенно необъективно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 20:59
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 00:44) *
MAC-ом от LPC на данный момент доволен как слон smile.gif. Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром.

К SAM'у тоже претензий нет. Немного раздражает только фиксированный размер приемных буферов - 128 байт.

Цитата(zltigo @ Sep 28 2008, 00:44) *
SPI/SSP обычно себя ведут, вроде smile.gif, ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает smile.gif ) и теперь в ней все по тактам ядра.

Мне на SPI придется 20Мбит выплевывать, возможно одновременно через два канала. Поэтому делитель SSP не вызвал восторга.

А внешние шины - это, похоже, вечная проблема Philips/NXP - на своих USB-контроллерах они их тоже замедляли потихоньку smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:00
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Sep 27 2008, 22:50) *
Кто б спорил, более того иногда можно совмещать эти 2 варианта.

Эти варианты ДОЛЖНЫ быть совмещены, ибо что будет делать периферия, если ей канал DMA мгновенно не дадут когда ей приспичит. В нормально организованной системе (все уже поняли о чем это я smile.gif ) должно быть и то и другое FIFO или FIFO+DMA. Голый DMA череват для сколь-нибудь скоростных вещей.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 21:05
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(singlskv @ Sep 28 2008, 00:50) *
Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ?

Потому что он слишком медленный, и при наличии FIFO серьёзную нагрузку на процессор дать не может.

Цитата(zltigo @ Sep 28 2008, 01:00) *
Эти варианты ДОЛЖНЫ быть совмещены, ибо что будет делать периферия, если ей канал DMA мгновенно не дадут когда ей приспичит.

А кто же ему запретит-то? smile.gif И уж на одно слово FIFO присутствует всегда.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2008, 21:11
Сообщение #23


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 00:56) *
В моих условиях может быть до 100% - надо жить и когда вместо даннных вдруг полный мусор пошел.
В таких условиях конечно FIFO+разбор пакетов на лету лучший вариант.
Я говорю о случаях когда и 0,1% пакетов уже очень плохо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:23
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(zhevak @ Sep 27 2008, 22:53) *
Как Вы определяете конец фрейма?
1) по количеству байт или
2) признаком конца является какой-то особый байт

конечно второй вариант - я же говорил волшебное слово SLIP. По "количеству", волшебным заголовкам это менее универсально и надежно.
Цитата
Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать.

И даже в этом случае у Вас,например, банально в канале пропал байт во фрейме. Дальше сами расскажите, как будете вылезать из ситуевины?
Цитата
Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков".

Для определения битости фрейма нужно по нему всему пробежаться-прочитать-просуммировать, даже если он целый пришел. А если в конце вместо последнего байта начало следующего фрейма прибежало.... разборки начались, извлечение целого фрейма, восстановление синхронизации фреймов, скоее всего в Вашем простешем случае уже и потеря втрого фрейма... время, время, время... Я уже писал, что не вчера и не сразу умным родился, контроллеров разных и DMA и без пользовал для разных задач... В результае я начинаю рассматривать для байтовых (нефреймовых) интерфейсов прежде всего работу в FIFO, даже если есть выбор.
Далее, а буфер-то у нас какой? Кольцевой? А как с поддержкой кольцевых буферов? У всех DMA контроллеров с этим хорошо? У нориальных DSP - хорошо, а у SAM7 просто никак. Заодно и расход памяти минимум на две целых полочки для макимальных фреймов не радует совсем. Минималистичный, прямо скажем, DMA sad.gif

Цитата(aaarrr @ Sep 27 2008, 23:05) *
А кто же ему запретит-то? smile.gif И уж на одно слово FIFO присутствует всегда.

Другой, DMA, например, захватил шину. Разруливать по слову будем, и при этом рассуждать об эффективности DMA?
На одно слово, это не FIFO.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 21:36
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 01:23) *
Другой, DMA, например, захватил шину. Разруливать по слову будем, и при этом рассуждать об эффективности DMA?
На одно слово, это не FIFO.

Другой DMA (если это PDC) захватить шину может на время передачи одного слова, EMAC - на 4-х. Никаких затыков при таких условиях не будет.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:58
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(aaarrr @ Sep 27 2008, 23:36) *
Другой DMA (если это PDC) захватить шину может на время передачи одного слова, EMAC - на 4-х. Никаких затыков при таких условиях не будет.

Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили smile.gif А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится.
Цитата(DpInRock @ Sep 27 2008, 23:56) *
Если нормально распорядиться.

Вы уже умеете "нормально распоряжаться", дабы никому не мешать? Или, полагаете, что это знание придет после оплаты 200USD за многослойку smile.gif? Про умелое обращение с ARM9 (кэши, MMU, SDRAM....) можно еще много больше поговорить smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Sep 27 2008, 22:37
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



И чего нервничать? Человеку интересно совсем не то, что вы обсуждаете, то бишь флудите. См. заглавную статью топика.

А за умелое обращение не переживайте. Не только вы иностранные буковки выучили.

Все это не так сложно, Семен. Тем более, все это добро АРМ9 никто не заставляет использовать сразу.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 22:46
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 01:58) *
Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили smile.gif А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится.

Во-первых, все -дцать каналов одновременно не вылезут, ибо даже приложение такое придумать трудно.

Единственное, что известно от Atmel'а:
Цитата
• One Master Clock Cycle Needed for a Transfer from Memory to Peripheral
• Two Master Clock Cycles Needed for a Transfer from Peripheral to Memory


А 2x20Mbit с параллельно работающим EMAC я и сейчас тяну без особых проблем.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 23:01
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(DpInRock @ Sep 28 2008, 00:37) *
Человеку интересно совсем не то, что вы обсуждаете, то бишь флудите. См. заглавную статью топика.

Смешно sad.gif. Товарщ захотел сделать буквально на коленке плату уровня ARM7 - логично (не то, что на коленке, а то, что ARM7), самый, что ни наетсь сегодняшний mainstream. Рассуждаем о выборе производителя, ну подробно рассуждаем, углубленно, так сказать... А тут некто периодически встревает за многслойки за сотни баксов, ARM9, навеске на него всекой вячины типа LCD на "вырост". А сейчас еще и о флуде разговор завел. Не сочтите за наезд, но пыл умерьте, пожалуйста. Можете очередную тему создать типа "ARM9 для начинающих" и подробнейшим образом высказаться о путях и методах. С удовольствием поучаствую, или помолчу - как скажите....

Цитата(aaarrr @ Sep 28 2008, 00:46) *
Единственное, что известно от Atmel'а:

Это именно про "Low bus arbitration overhead"
плюс сама пересылка..
Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 23:19
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 03:01) *
Это именно про "Low bus arbitration overhead"
плюс сама пересылка..

Да нет, это всего (я смотрел описание IP Core, а не DS).

Цитата(zltigo @ Sep 28 2008, 03:01) *
Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины...

Все равно полоса внутренней шины многократно покрывает способности периферии, как ни крути.
Go to the top of the page
 
+Quote Post

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

 


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


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