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

 
 
> Cortex A8 L1 Cache mode, работа с кэшем в экранной области
mantech
сообщение Aug 19 2018, 15:05
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.

Есть задумка ускорить печать текста в экранной области (framebuffer), которая некэширована. Рисование прямоугольников сейчас выполняется с помощью ДМА, а вот текст приходится печатать просто записью в эту область цветовую составляющую пикселя (24бита+альфа). Вопрос, можно каким-либо образом ускорить этот процесс, кэшированием данной области или еще чем-то, но так, чтобы это не отражалось на выводе на дисплей? Например, использование ускорения кэша только для записи в данную область?

Сообщение отредактировал mantech - Aug 19 2018, 15:06
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Forger
сообщение Aug 19 2018, 16:21
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(mantech @ Aug 19 2018, 18:05) *
Приветствую.

Есть задумка ускорить печать текста в экранной области (framebuffer), которая некэширована. Рисование прямоугольников сейчас выполняется с помощью ДМА, а вот текст приходится печатать просто записью в эту область цветовую составляющую пикселя (24бита+альфа). Вопрос, можно каким-либо образом ускорить этот процесс, кэшированием данной области или еще чем-то, но так, чтобы это не отражалось на выводе на дисплей? Например, использование ускорения кэша только для записи в данную область?


Если позволяет ОЗУ, то я бы создал экранную область еще и там, а содержимое целиком переносил бы в экранную область дисплея по DMA.
Причем, это не обязательно делать с частотой обновления экрана, а желательно синхронизировать с частотой обновления дисплея.
Скажем, частота "кадровой развертки" дисплея 60 Гц, то обновление картинки можно сделать и 20 Гц и даже 10 Гц.
Визуально это будет оч. сложно заметить. Разумеется, если нет видео-анимации и т.п.
В этом случае можно спокойно и фактически не спеша рисовать в этом импровизированном видео-ОЗУ, а в определенные моменты запускать по DMA переброс всего этого ОЗУ во внутреннюю память дисплея.
Если эти две "процедуры" "разнести" во времени, то визуально не будет видно, как например, прорисовывается текст.
К тому же это дает очень строгую детерменированность при обращении к функциям, рисующим/печатающим на дисплее - ведь по сути пишем в собственное ОЗУ, а не куда-то там.
И поэтому уже не нужны мьютексы, чтобы обращаться к этим функциям безопасно из разных RTOS потоков (про printf не вспоминаем - это отдельная "песня").
Фишка тут в том, что скорость записи напрямую во внешний интерфейс всегда будет ниже обращения к собственному ОЗУ, да и она зачастую не детерминирована по времени.

Я так делал даже на обычных копеечных графических монохромных ЖК (без DMA на частоте обновления 10Гц).
Но повторюсь - если есть лишнее ОЗУ и, конечно, если позволяет производительность МК.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th August 2025 - 09:26
Рейтинг@Mail.ru


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