Цитата(mantech @ Aug 19 2018, 18:05)

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