Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CromArt от ST
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SasaVitebsk
Хочу задействовать аппаратный акселератор. Опыта такой работы практически нет. Вся моя графика - обычные менюшки.
Насколько я понимаю бегло прочитав, этот ускоритель можно применять в следующих случаях:
1. При отрисовке объекта типа widget на экран из заранее заготовленного места, например из флэши.
2. То же что и 1, только ещё с учётом фона либо с учётом перекрытия. Короче с учётом картинки. (Тут мне надо ещё осмыслить)
3. Например затемнение объекта (всякие там invisible).
4. При появлении окна перекрытия (например диалог) для сохранения/ восстановления фоновой картинки.
Я так понимаю его нельзя использовать для отрисовки примитивов и т.п.

Учитывая как обычно дрова пишутся, получается что его органичное применение в библиотеке достаточно хлопотное занятие?
Кто в теме, проясните ситуацию. А также может кто литературу какую-нибудь по теме приведёт или примеры.
Хотелось бы глянуть.
Заранее блгодарю
scifi
Цитата(SasaVitebsk @ Apr 7 2015, 08:57) *
Учитывая как обычно дрова пишутся, получается что его органичное применение в библиотеке достаточно хлопотное занятие?
Кто в теме, проясните ситуацию. А также может кто литературу какую-нибудь по теме приведёт или примеры.

Что такое "органичное применение" и что такое "библиотека"? Тут ведь всё от конеретного случая зависит.
Вот у меня, к примеру, есть ГУИ, где все примитивы - это закрашенный прямоугольник (без наклона), горизонтальная и вертикальная линия (частный случай прямоугольника), текст и растровое изображение. С их помощью рисуется всё остальное. Так вот, ускоритель легко рисует закрашенный прямоугольник. Текст и картинки отрисовываю по пикселям, работает достаточно шустро, поэтому дальше не оптимизирую. Но если бы тормозило, можно было бы, к примеру, отрисовать шрифт в буфере и копировать буквы на экран при помощи ускорителя. И т.д.
Тут всё от задачи зависит. А придумывать абстрактную библиотеку с то ли нужными, то ли ненужными функциями не интересно.
SasaVitebsk
Ну... "ограниченное применение" это в моей голове. biggrin.gif Я примеряю этот акселератор к той ГУИ, которую я использовал и на которую я ориентировался. Я использовал ГУИ от микрочипа. )) Была она некоторое время с открытыми исходниками. Я там кое что менял, но идеология мне понравилась больше чем от uCOS.
Собственно Вы на вопрос ответили. Меня интересует - кто как подходит к этому вопросу. Кто как подходит к проектированию ГУИ.
У меня к Вам только один вопрос по тексту. За счёт чего будет выигрыш, если я отрисую примитив в буфере и скопирую в видеоозу. За счёт более медленной работы внешней памяти? Но мне кажется, это уже существенной роли не сыграет на отображение картинки.

scifi
Цитата(SasaVitebsk @ Apr 7 2015, 12:29) *
За счёт чего будет выигрыш, если я отрисую примитив в буфере и скопирую в видеоозу.

Сейчас у меня программа при выводе текста декодирует шрифт на лету (там применено сжатие RLE) и выводит на экран пиксель за пикселем. Ясно, что если шрифт уже отрисован, и DMA просто перебросит букву на экран, то получится гораздо быстрее. И процессор не надо занимать.
SasaVitebsk
У меня несколько шрифтов используется. Это всётаки значительный оверхед будет.
Можно правда разворачивать букву а потом ARTом пересылать с окрашиванием цветом. Но всёже это уже, наверное, лишнее.

Итого, с учётом Ваших замечаний вырисовывается следующее:
a) Нижний уровень
1) Отрисовка примитивов типа: Горизонтальная линия, вертикальная линия, прямоугольник.
2) Вывод картинки (Прямоугольника).
3) Сохранение прямоугольника.
б) Верхний уровень
1) вывод предварительно отрисованных виджетов (через вывод картинки).
2) Работа с окнами (типа сохранение/ восстановление области перекрытия)
3) Работа с экранами Если их небольшое количество или если ОЗУ хватает.

То есть надо сначала полностью спроектировать интерфейс программы. Определится какие картинки виджетов лучше делать статическими, а какие динамическими. И только после это писать.
scifi
Цитата(SasaVitebsk @ Apr 7 2015, 14:45) *
... вырисовывается следующее:
a) Нижний уровень

Да, мне кажется очень разумным отделить "нижний уровень", то есть аппаратно-зависимую часть. "Верхний уровень" использует примитивы из нижнего. А "нижний уровень" можно без труда ускорить, воспользовавшись ускорителем, или портировать на другой графический контроллер, при этом "верхний уровень" даже ничего не заметит. Кстати, вывод текста я бы тоже отнёс к "нижнему уровню".
adnega
Неужели фичи "Pixel Format Conversion and Blending" не востребованы? Flash-память можно прилично экономить под картинки.
mantech
Цитата(adnega @ Apr 7 2015, 20:44) *
Неужели фичи "Pixel Format Conversion and Blending" не востребованы? Flash-память можно прилично экономить под картинки.


Каким образом эти фичи позволяют это делать?? Этож не аппаратный jpeg\png кодек...
adnega
Цитата(mantech @ Apr 7 2015, 22:10) *
Каким образом эти фичи позволяют это делать?? Этож не аппаратный jpeg\png кодек...

Дисплей может использовать формат "ARGB8888" - очень удобно. Картинки можно держать в L4.
Сравните 4 байта и пол-байта, у меня получается 8 раз, только за счет использования этих фич.
SasaVitebsk
Вот об этом тоже хотелось бы поговорить.
Я планирую применять Проц + Озу + RGB дисплей. То есть без контролера. Как правило озу используется 16 бит. 2 штуки уже хлопотно.
По-моему при применении 32 бит на цвет на дисплее получается - 16 -> 32. Когда я применял LPC то это значительно нагружало шину проца.
Ну то есть чистая регенерация дисплея. Сейчас правда матрица шин, но всётаки это тоже сказываться будет.
Особенно если с этой памятью будешь работать.
Я как-то планирую 16 бит использовать ОЗУ.
Раньше использовал 5-6-5. А теперь посмотрел может будет поинтереснее использовать ARGB4444.
Я не знаю. Просто советуюсь. У самого опыта нет.

2 adnega. Если вы работали. Проясните мне на пальцах как это "Pixel Format Conversion and Blending" работает.
Я думал что это просто грубо говоря логическая операция между исходной картинкой и той куда кладётся. Ну там ещё LUT есть. Я так понимаю это расширение цвета. Из таблицы.
Как это работает?
Могу ли я ...
... картинку нарисованую в монохроме например (и в каком монохроме?) преобразовать в цветную по таблице цветов?
... в исходной картинке сделать прозрачность фона. И наложить её на результирующую область памяти?
Гре бы про это почитать. Хотелось бы на русском и по подробнее. Или хотя бы на англ.
adnega
2 adnega.
Как это работает?
Могу ли я ...
... картинку нарисованую в монохроме например (и в каком монохроме?) преобразовать в цветную по таблице цветов?
... в исходной картинке сделать прозрачность фона. И наложить её на результирующую область памяти?
Гре бы про это почитать. Хотелось бы на русском и по подробнее. Или хотя бы на англ.
[/quote]
Слишком долго рассказывать тем более, что очень подробно описано "11 Chrom-Art Accelerator™ controller (DMA2D)" в "RM0090" версии 8.
Для DMA2D в части преобразований доступны различные форматы входных и выходных данных.
Например, для монохромной картинки с прозрачностью есть два варианта:
1) AL44 - 4 бита цвет по таблице, 4 бита прозрачность;
2) A4 - цвет холста и фона задаются через регистры DMA2D_FGCOLR и DMA2D_BGCOLR соответственно, а картинка это набор прозрачностей.
SasaVitebsk
Наверное надо кит заказывать какой-нибудь. И экспериментировать.
Я уже, как обычно, хотел сразу рисовать схему и на готовом девайсе работать.
Правда пока нет ещё stm32f7. Пока stm32f429 запаять. Потом перекинуть.
У меня правда пока ещё время есть. Наверное где-то до нового года. ))
ЗЫ: adnega, а субъективно чисто, Вам понравилось с этим работать?
scifi
Цитата(SasaVitebsk @ Apr 8 2015, 09:01) *
Я планирую применять Проц + Озу + RGB дисплей. То есть без контролера. Как правило озу используется 16 бит. 2 штуки уже хлопотно.
По-моему при применении 32 бит на цвет на дисплее получается - 16 -> 32. Когда я применял LPC то это значительно нагружало шину проца.

А я ставлю внешний контроллер.
На случай обновления схемы рассмотрел МК с встроенным контроллером LCD и внешней DRAM, но не увидел никаких преимуществ перед внешним контроллером. Например, таким: S1D13781.
SasaVitebsk
Цитата(adnega @ Apr 8 2015, 09:34) *
Например, для монохромной картинки с прозрачностью есть два варианта:
1) AL44 - 4 бита цвет по таблице, 4 бита прозрачность;
2) A4 - цвет холста и фона задаются через регистры DMA2D_FGCOLR и DMA2D_BGCOLR соответственно, а картинка это набор прозрачностей.

Первый вполне подходит для отрисовки примитивов и стандартных виджетов.
Второй вариант похоже для вывода текста предназначен. Или контуров.
Наверное специально 4 бита использовано. Получается берёшь байт фонта и преобразуешь его в 32-ух битное слово помещаешь в буфер. После буфер выводишь на экран с выдачей цвета.


Цитата(scifi @ Apr 8 2015, 11:02) *
А я ставлю внешний контроллер.
На случай обновления схемы рассмотрел МК с встроенным контроллером LCD и внешней DRAM, но не увидел никаких преимуществ перед внешним контроллером. Например, таким: S1D13781.

Я рассматривал для себя SSD1963. Преимуществ по схемотехнике и цене вообще нет.
Но с учётом рассматриваемого по производительности будет проигрыш. Я так понимаю.
Плюс ОЗУ всётаки можно и для посторонних вещей использовать. В SSD у Вас всётаки чисто видеобуфер.
mantech
Цитата(adnega @ Apr 8 2015, 09:34) *
2 adnega.
Как это работает?
Слишком долго рассказывать тем более, что очень подробно описано "11 Chrom-Art Accelerator™ controller (DMA2D)" в "RM0090" версии 8.
Для DMA2D в части преобразований доступны различные форматы входных и выходных данных.
Например, для монохромной картинки с прозрачностью есть два варианта:
1) AL44 - 4 бита цвет по таблице, 4 бита прозрачность;
2) A4 - цвет холста и фона задаются через регистры DMA2D_FGCOLR и DMA2D_BGCOLR соответственно, а картинка это набор прозрачностей.


Не мучайтесь - возьмите нормальный камень с DDR памятью, если имх сложноват, то тот-же вибрид, например, и будет вам счастье, и графика полноцвет и альфа и много быстрой памяти!

Сам долго мучался при выборе, но считаю, что выбрал правильно...
Rash
Что бы быстро стартануть, и не мучатся вначале с разводкой платы, на STM32F429 можно с дискавери 429. Отпаять её родной LCD и сделать плату переходник на нужный LCD. Запускал таким образом LCD 7" 800*480 по 5-6-5. Альфу использую программно от emWin.
также можно заказать такую платку http://item.taobao.com/item.htm?spm=a230r....amp;ns=1#detail
китайский аналог Eval. Заказывал тоже всё работает (на такой запускал только тестовый пример).
или такой ещё вариант есть
http://item.taobao.com/item.htm?spm=2013.1...64-4b52f9903a47
adnega
Цитата(SasaVitebsk @ Apr 8 2015, 10:55) *
adnega, а субъективно чисто, Вам понравилось с этим работать?

Я не скажу, что являюсь спецом по графике и GUI - немного поигрался с выводом картинок - мне показалось супер удобно.
Использовал возможности F429 для вывода на VGA-монитор, а сам F429 эмулировал китайские матрицы (для светодиодных табло)
+ UART-консоль для вывода логов.
Удобно: на мониторе видишь и логи, и картинку с отлаживаемого контроллера. Хорошо, что есть поддержка SDRAM.
Потом все хозяйство переписал на FPGA, а эмулятор на F429 забросил.

Насчет отладок: я использовал 32F429IDISCOVERY, есть контроллер собственной разработки, куда можно впаять F429.
На днях в соседней ветке TigerSHARC продавал (и таки мне продал) интересную отладку - чуть-чуть вы опоздали).
SasaVitebsk
Всем спасибо за ответы
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.