SpiritDance 0 20 ноября, 2006 Опубликовано 20 ноября, 2006 · Жалоба А вот мне кажется, что атмел череcчур упорно лепит повсюду свой PDC, забывая, что некоторой периферии желательно еще и FIFO. +1 Что самое смешное с USB ситуация как раз прямо противоположная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 20 ноября, 2006 Опубликовано 20 ноября, 2006 · Жалоба Как-то наткнулся у Intel на статейку, где сравнивается использование FIFO и DMA. Советую почитать. 27242701.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 ноября, 2006 Опубликовано 20 ноября, 2006 · Жалоба При приеме- тоже грустно. из FIFO обязательно нужно выгребать, Чуть-чуть глянем подальше, но начном сначала - FIFO нужно "выгребать", а DMA (уже писал) "само", но у контроллер без кэшей и отдельных банков на отдельной переферийной шине просто "стоит". а PDC уже сразу кладет данные туда, куда мне нужно. А свой тему топика поднятую Вами помните? Что-то мне подсказывает, что DMA положил Вам куда-то совсем сырой поток данных, потом Вы захотели с ним слегка разобраться, ну там фреймы выделить, контрольные суммы подсчитать, битые пакеты выринуть, перезапросы сделать.... А уж только после этого положить не тольлько куда надо, но и то, что надо. Обработка сырого потока так или иначе нужна почти всегда, с DMA получаете дополнительные пересылки память-память буквально на ровном месте. Можете привести пример, когда FIFO позволит сэкономить количество обращений с памятью? См. Выше. Как-то наткнулся у Intel на статейку, где сравнивается использование FIFO и DMA. Советую почитать. Реально много работал с AMD186CC, тот-же UART (кстати много более продвинутый нежели от Intel и 32bit интерфейсом и прочими вкусностями) имеет и FIFO и DMA. Пробовал, думал.... в результате работает с FIFO. Причины изложены выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vmp 0 20 ноября, 2006 Опубликовано 20 ноября, 2006 (изменено) · Жалоба А свой тему топика поднятую Вами помните? Что-то мне подсказывает, что DMA положил Вам куда-то совсем сырой поток данных, потом Вы захотели с ним слегка разобраться, ну там фреймы выделить, контрольные суммы подсчитать, битые пакеты выринуть, перезапросы сделать.... Реально много работал с AMD186CC, тот-же UART (кстати много более продвинутый нежели от Intel и 32bit интерфейсом и прочими вкусностями) имеет и FIFO и DMA. Пробовал, думал.... в результате работает с FIFO. Причины изложены выше. У меня получилась противоположная ситуация (UART на SAM7S). Мой протокол (который я разрабатывал еще под MSP430) идеально лег на PDC. Хитрость следующая: обмен идет пакетами данных. Данные внутри пакета идут без пауз, между пакетами вставляются паузы длиной не менее одного символа. В итоге я просто программирую UART на прием с тайм-аутом (регистр US_RTOR), а PDC - на прием максимально допустимой длины пакета. Дальше, обнаружив в основном цикле программы флаг RX_BUFF или TIMEOUT в регистре US_CSR я проверяю правильность принятого пакета (стартовый байт, совпадение длины и контрольной суммы). Вся дальнейшая обработка принятого пакета идет по месту, без лишних пересылок. Передача - аналогично, в памяти формируется пакет и скармливается PDC. Разумеется, можно придумать вариант протокола, который будет более оптимален при работе с FIFO. Достаточно добавить к нему какой-либо вариант байт-стаффинга или убрать паузы между пакетами. Изменено 20 ноября, 2006 пользователем vmp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 20 ноября, 2006 Опубликовано 20 ноября, 2006 · Жалоба Разумеется, можно придумать вариант протокола, который будет более оптимален при работе с FIFO. Обычно протоколы "придумывают" совсем с другой целью :-) Достаточно добавить к нему какой-либо вариант байт-стаффинга или убрать паузы между пакетами. Далеко и ходить не надо - SLIP - хороший, стандартный и правильный пакетный протокол и будет "туши свет"..... Повторюсь :-( Ни FIFO, ни DMA сами по себе не лучше и не хуже, просто довольно часто приходится слышать о DMA (в случае простых контроллеров!) как о чем-то абсолютно прекрасном, так вот это не так, к сожалению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 21 ноября, 2006 Опубликовано 21 ноября, 2006 · Жалоба А свой тему топика поднятую Вами помните? Да. Напоминаю: Я: спросил, как можно быстрее передать данные, чем через memcpy(), и еще посетовал на отсутствие PDC для этого процесса. Мне: PDC- это фигня по сравнению с FIFO. Я: не вижу, чем FIFO лучше чем PDC. Что-то мне подсказывает, что DMA положил Вам куда-то совсем сырой поток данных, потом Вы захотели с ним слегка разобраться, ну там фреймы выделить, контрольные суммы подсчитать, битые пакеты выринуть, перезапросы сделать.... Как? Где Вы экономите? Я так и не понял. Конкретный пример приведите, как FIFO экономит пересылки при подсчете контрольной суммы? Или как FIFO помогает определить битый пакет? А уж только после этого положить не тольлько куда надо, но и то, что надо. Обработка сырого потока так или иначе нужна почти всегда, с DMA получаете дополнительные пересылки память-память буквально на ровном месте. Так уж получилось, что я постоянно решаю задачи, в которых обработка сырого потока до момента его полного приема бессмысленна. То есть есть критерии завершения, которые я могу описать контроллеру PDC до начала обмена, и просто ждать прерывания по событию "конец приема". У Вас же, наверное, ситуация обратная. Реально много работал с AMD186CC, тот-же UART (кстати много более продвинутый нежели от Intel и 32bit интерфейсом и прочими вкусностями) имеет и FIFO и DMA. Пробовал, думал.... в результате работает с FIFO. Причины изложены выше. Ну что ж. А у меня ситуация обратная. Мой протокол хорошо ложится на PDC, вот и все. И FIFO ну никак не облегчит мне жизнь. Далеко и ходить не надо - SLIP - хороший, стандартный и правильный пакетный протокол и будет "туши свет"..... Ну а если у меня постоянно MODBUS-RTU, который хорошо ложится на имеющийся PDC? Что мне теперь, протокол менять, чтобы неудобно было? :) Повторюсь :-( Ни FIFO, ни DMA сами по себе не лучше и не хуже, просто довольно часто приходится слышать о DMA (в случае простых контроллеров!) как о чем-то абсолютно прекрасном, так вот это не так, к сожалению. Это да. Нет в мире совершенства. Кому что нравится. Мне- PDC, Вам- FIFO. :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 21 ноября, 2006 Опубликовано 21 ноября, 2006 · Жалоба Да. Напоминаю: Я: спросил, как можно быстрее передать данные, чем через memcpy(), и еще посетовал на отсутствие PDC для этого процесса. Тогда ВЫНУЖДЕН напомнить свой ответ ПОЛНОСТЬЮ: Прежде чем 'требовать' подумайте а чем занимается контроллер, когда у него отобрали память? В памяти оно конечно 'само все пересылается' а процессор просто стоит, если у него конечно нет кэшей немеряно и продвинутой системы предсказаний для загрузки кэшей.... Ну а чем стоять - мог и пересылать... Короче, DMA в микроконтролерном мире во многих случаях это просто словечко для маркетинга..... Это похоже?????? на Вашу интерпретацию моего ответа: Мне: PDC- это фигня по сравнению с FIFO. Мой протокол хорошо ложится на PDC, вот и все. Зачем тогда сожаление об отсутствие пересылок память-память? Я полагаю (уже писал), что имеет место быть необходимость после того, как отработало DMA c железом наконец переслать несколько обработанную принятую информацию в "правильное" место. Есть еще какие-то причины? Я лично могу назвать еще только одну - ошибки в проектировании системы приводящие к необходимости такой лишней пересылки. Кому что нравится. Мне- PDC, Вам- FIFO. Нравится/не нравится это НЕ МОЙ ПОДХОД. Если есть выбор, то я выбираю наиоптимальнейший вариант не руководствуясь понятием "нравится" и стереотипами ( например, по отношению к затронутому здесь DMA). Чего и Вам желаю! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 22 ноября, 2006 Опубликовано 22 ноября, 2006 · Жалоба Да. Напоминаю: Я: спросил, как можно быстрее передать данные, чем через memcpy(), и еще посетовал на отсутствие PDC для этого процесса. Тогда ВЫНУЖДЕН напомнить свой ответ ПОЛНОСТЬЮ: Прежде чем 'требовать' подумайте а чем занимается контроллер, когда у него отобрали память? В памяти оно конечно 'само все пересылается' а процессор просто стоит, если у него конечно нет кэшей немеряно и продвинутой системы предсказаний для загрузки кэшей.... Ну а чем стоять - мог и пересылать... Короче, DMA в микроконтролерном мире во многих случаях это просто словечко для маркетинга..... Это похоже?????? на Вашу интерпретацию моего ответа: Мне: PDC- это фигня по сравнению с FIFO. Тогда ВЫНУЖДЕН привести еще один Ваш ответ: Речь вел не о том, что без DMA лучше - с DMA безусловно лучше чем без ничего. А о том, что а Atmel-овской архитетуре DMA отнюдь не более, а менее эффективна, чем "банальные" FIFO. Извините, Вы действительно не говорили, что "PDC- это фигня по сравнению с FIFO". Вы сказали, что "в Atmel-овской архитетуре DMA отнюдь не более, а менее эффективна, чем "банальные" FIFO". Вероятно, моя интерпретация этой фразы оказалась слишком вольной. Мой протокол хорошо ложится на PDC, вот и все. Зачем тогда сожаление об отсутствие пересылок память-память? Я полагаю (уже писал), что имеет место быть необходимость после того, как отработало DMA c железом наконец переслать несколько обработанную принятую информацию в "правильное" место. Есть еще какие-то причины? Я лично могу назвать еще только одну - ошибки в проектировании системы приводящие к необходимости такой лишней пересылки. Ну зачем так прямолинейно? Предствьте себе более сложную картину мироздания. У меня для работы с некоторой периферией есть PDC, которые я успешно использую. Но также есть и другие устройства, для которых этих PDC нет, а правила работы с устройствами навязаны их производителем. Конкретно- NAND FLASH. Вот для нее-то мне и не хватает аналогичного контроллера, облегчающего жизнь. Еще пример- пересылка больших объемов (размером с экран) из SDRAM в контроллер дисплея. Тоже очень помогло бы наличие аппаратного "насоса". Вышеупомянутое- пример устройств, так или иначе отображенных на память, и если бы у меня был аппаратных контроллер для пересылок "память-память", он бы довольно хорошо уменьшил требуемое на эти операции время. О тривиальных пересылках внутри той же SDRAM я не говорю- это действительно вызвано часто не необходимостью, а применением плохого программиста. Кому что нравится. Мне- PDC, Вам- FIFO. Нравится/не нравится это НЕ МОЙ ПОДХОД. Если есть выбор, то я выбираю наиоптимальнейший вариант не руководствуясь понятием "нравится" и стереотипами ( например, по отношению к затронутому здесь DMA). Согласитесь, под "нравиться" можно подразумевать комплекс причин, влияющих в том числе и на "оптимальность". А под "оптимальностью" можно подразумевать и банальную скорость достижения результата, что запросто может определяться личными предпочтениями программиста. Но это философский вопрос, не будем развивать. Чего и Вам желаю! Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться