Jump to content

    
Sign in to follow this  
Николандр

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites
12 minutes ago, jcxz said:

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

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

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

Share this post


Link to post
Share on other sites
1 hour ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites
11 минут назад, aaarrr сказал:

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

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

Share this post


Link to post
Share on other sites
13 hours ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites
1 час назад, khach сказал:

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

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

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

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

 

 

Share this post


Link to post
Share on other sites
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 различаются.

Share this post


Link to post
Share on other sites
15 минут назад, khach сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this