Перейти к содержанию
    

STM32H7 работа с SDRAM. Проблема

29 минут назад, nanorobot сказал:

Убедительно. НО. В моем случае курсор не требуется. Возможно в этом случае считывание экранного буфера не потребуется

Рисование курсора не имеет никакого отношения к необходимости чтения видео-ОЗУ.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, jcxz said:

Рисование курсора не имеет никакого отношения к необходимости чтения видео-ОЗУ.

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

Полагаю что не исключена возможность ситуации, когда программа "не знает" что нарисовано в данный момент времени в данной области экрана.  Хотя этот момент для меня сейчас не актуален. Сглаживание беспокоит сильнее.. уж в который раз. Тема про LCD со встроенным контроллером возникла из естественного стремления упростить аппаратную часть. Но, похоже, не "выгорает"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Если пиксел занимает целое число байт, то любой курсор можно нарисовать без чтений.

Решительно невозможно: еще в W2K курсор начал отбрасывать тень :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, aaarrr сказал:

Решительно невозможно: еще в W2K курсор начал отбрасывать тень :)

Даже в w2k возможно - достаточно сказать нижележащему окну: "на тебе тень, перерисуйся!"  :paint2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, jcxz said:

 А обновление области закрываемой курсором, после его удаления, сделать просто обновлением прорисовки фона в данной прямоугольной области.

Спорное утверждение. В моем случае курсоры "следящие", т.е привязаны к данным измерений. Данные динамически меняются, могут быть зашумлены и отфильтрованный усреднением. Очень трудно наложить подвижный курсор на такое изображение. Тут бы пригодился двухслойный дисплей, с отдельным слоем для графики данных и с отдельным для курсора и сетки. Но к сожалению простых графических контроллеров таких нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, khach сказал:

Спорное утверждение. В моем случае курсоры "следящие", т.е привязаны к данным измерений. Данные динамически меняются, могут быть зашумлены и отфильтрованный усреднением. Очень трудно наложить подвижный курсор на такое изображение.

В чём именно трудность? И что Вам кажется спорным? И при чём тут зашумлённость каких-то данных и их фильтрация? На экран выводятся не данные, а их графическое отображение. Которое выполняется некоей функцией. Если курсор (либо другой подвижный объект на экране, перекрывающий поверх другие изображения (это называется "спрайт")) меняет своё положение или форму, то функциям, формирующим нижележащие (фоновые) изображения посылается уведомление с указанием "область с координатами x0,y0-x1,y1 нужно обновить" и данная функция, с использованием клиппинга по границам этой прямоугольной области, делает обновление согласно последним отображённым данным. А потом поверх рисуется новый курсор.

Только и всего. Такой алгоритм применяет винда когда одно окно перемещается поверх другого (посылает нижележащему окну WM_PAINT с указанием области перерисовки), потом следующему окну уровнем выше и т.д. Опционально окно может использовать сохранение битмапа под собой для ускорения перерисовки. Но это опционально. А если эта галка в свойствах класса окна снята, то никаких чтений видео-ОЗУ не нужно вообще.

Изучите как-нить виндовое API - вам будет полезно.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

А потом поверх рисуется новый курсор.

Имея в наличии двухслойный LTDC так делать нет никакого смысла.  Один слой для данных, второй для сетки, пригодился бы третий для курсоров. Но вот памяти на два слоя и их копии не хватает. И шину AXI при двухслойной работе грузит сильно. А делать двухпроцессорную систему где один контроллер целиком занимается дисплеем не бюждетно.

А приведенный алогритм рисования курсора прекрасно иллюстрирует нагрузку на шину внешнего LCD контрллера. Зы. А откуда взять сохраненную битмапу под курсором, чтобы потом ее восстановить, если нет экранного буфера на чтение а переривовыать весь экран с помощю WM_PAINT  при каждом движении курсора накладно?

ps2. А существует что то типа AN4861 LCD-TFT display controller (LTDC) on STM32 MCUs  en.DM00287603.pdf специально для серии H7? А то многие выкладки по времянкам и нагрузкам на шины для F7 b H7 различаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, khach сказал:

Имея в наличии двухслойный LTDC так делать нет никакого смысла.

Имеет смысл или не имеет - дело уже другое. Я всего лишь хотел сказать, что, для отрисовки перемещающихся спрайтов поверх сложного фона, можно обойтись и без чтения видео-ОЗУ.

15 минут назад, khach сказал:

а переривовыать весь экран с помощю WM_PAINT  при каждом движении курсора накладно?

Похоже что Вы ничего не поняли из алгоритма, что я приводил выше. Весь экран отрисовывать не нужно, достаточно обновить только прямоугольную область, в которой ранее находился курсор. Разница в количестве отрисовки между прямоугольником в несколько пикселей на несколько пикселей и всем экраном я думаю очевидна. Естественно - графическое API должно включать опцию клиппинга по краям прямоугольной области.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On ‎1‎/‎6‎/‎2019 at 9:01 AM, nanorobot said:

Не пробовали по FMC подключать LCD с контроллером SSD1963? Интересует как оно будет по сравнению с LTDC.  SDRAM не ставить, корпус процессора в два раза меньше. Заманчиво.  Уже бы сам начал пробовать, ПромЭлектроника до 09.01.19 пьянствует.

 

PS индикатор: https://www.ecom.cz/open_sheet/sheet_name=D59283

 

Нет, не делал пока :( . Подключал только SPI-малявку ILI9163 128x128. Работает.

Да и то SPI этого проца недели 2 раскуривал с помощью коллег с этого форума :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...