MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Скажите, а ChomART (DMA2D) приносит какую-нибудь пользу тогда, когда нужно и рисовать и вычислять что-то? У меня задачи нетривиальные - получить из пары десятков глобальных переменных значения и вывести их на экран, послать что-то по UART, включить какую-нибудь ножку. Пока что, отключив ChromART, я не заметил снижения быстродействия. А проверял я его хоть и на глазок, но жестко - делал смещение картинки 1024х600 целиком. Разницы, действительно, не заметил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 1 час назад, MementoMori сказал: TouchGFX работает либо в RGB565 (с ним как раз проблем нет) либо в RGB888. Как там тогда альфа-наложение работает? Или там не поддерживается прозрачность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 1 minute ago, mantech said: Как там тогда альфа-наложение работает? Или там не поддерживается прозрачность? Поддерживается. Для справки, если что - TouchGFX работает только с одним слоем. Так что если вы о "железной" альфе, то она тут ни при чем. Вот по поводу железа и настроек https://touchgfx.zendesk.com/hc/en-us/articles/360010921760-TouchGFX-HAL-Development Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 49 23 февраля, 2020 Опубликовано 23 февраля, 2020 (изменено) · Жалоба 8 минут назад, MementoMori сказал: Поддерживается Какая-то странная поддержка, у меня в iMX6 прозрачность работает только на 2м слое в режиме АRGB8888, первый слой (основной может работать и в простом RGB888). Похоже тут работает только с глобальной альфой, т.е. прозрачность задается на весь слой отдельные элементы, как в png картинке работать не будут. Изменено 23 февраля, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Ну проблема то не в альфе. Простой прямоугольник нарисовать проблема. На том этапе, на котором TouchGFX'ом еще и не пахнет. В 32-битном режиме SDRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sst78rus 0 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 6 часов назад, MementoMori сказал: Обнаружил некую закономерность. Наличие артефакта зависит от того, где линия начинается и где заканчивается. При одной и той же длине линии результат зависит от координат начала и координат конца. В конце зеленый артефакт наблюдается если его координаты нечетны. То есть под одному через один. В начале красный артефакт появляется если координаты начала - по два через два. Есть мысли? Конечно есть. Вы же читали тему, где я спрашивал о такой проблеме и там же выложил в чем проблема. В Вашей таблице видно, что проблем нет у линий которые начинаются с адреса кратного 4. У вас прерывание по ошибкам ltdc включено? Посмотрите, какие флаги взводятся при выводе линий с артефактами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 7 minutes ago, sst78rus said: Вы же читали тему, где я спрашивал о такой проблеме и там же выложил в чем проблема. Сейчас прочту 7 minutes ago, sst78rus said: В Вашей таблице видно, что проблем нет у линий которые начинаются с адреса кратного 4. К сожалению, эта таблица была создана при работе с графикой "ручками". В TouchGFX я двигал элементы по горизонтали - проблемы были всегда. Но, полагаю, если корень проблемы устранить, то и в TOuchGFX все будет ОК. Quote У вас прерывание по ошибкам ltdc включено? Посмотрите, какие флаги взводятся при выводе линий с артефактами. Включены. Как ни странно - ошибок нет. Я брейкпоинты даже ставил. Надо попробовать программный флажок для надежности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sst78rus 0 23 февраля, 2020 Опубликовано 23 февраля, 2020 (изменено) · Жалоба 6 минут назад, MementoMori сказал: Включены. Как ни странно - ошибок нет. Я брейкпоинты даже ставил. Надо попробовать программный флажок для надежности. Просто на всякий случай: вы же знаете, что на ошибки у ltdc отдельный обработчик прерывания? Ну я так, на всякий случай, на что сам натыкался :) Да, и тут можно подобрать небольшую линию с артефактами и проверить,например в отладчике , что лежит у вас в видеобуфере. Т.е. где появляются артефакты - в выводе в видеобуфер или в ltdc. Изменено 23 февраля, 2020 пользователем sst78rus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 7 minutes ago, sst78rus said: вы же знаете, что на ошибки у ltdc отдельный обработчик прерывания? Это Вы о чем? Я знаю один. И он у меня мониторит LTDC_IER_TERRIE и LTDC_IER_FUIE. Это оно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sst78rus 0 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 24 минуты назад, MementoMori сказал: Это Вы о чем? Я знаю один. И он у меня мониторит LTDC_IER_TERRIE и LTDC_IER_FUIE. Это оно? Ну у ltdc два обработчика, LTDC_ER_IRQHandler и LTDC_IRQHandler. Соответственно ошибки в одном, а преревыния по номеру строки в другом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 7 minutes ago, sst78rus said: LTDC_ER_IRQHandler и LTDC_IRQHandler. Вот оно что... гляну. А пока вот что. Я поместил прямоугольник в координаты X=2 (чтоб вывело ошибку) Y=0. Залил цветом 0x0000FF Получил вот что первые 6 пар пропускаем (это точки с X= 0 и X=1). 70 00 00 - это тянет на красноватый цвет - так и есть, красная полоса. А дальше 0x0000FF - синий. Заканчивается это безобразие последовательностью 00 00 F3 E0 8F 03 - два испорченых пикселя, последний зеленоватый (и в реале и судя по байтам). Почитал Вашу тему про выравнивания. Честно... те идиоматические выражения, которыми Вы настраивали выравнивание - для меня китайская грамота, тем более, что у меня проект, где это запаковано где-то в глубине HAL. Не расскажете поподробнее, где это выравнивание настроить? Я так, на всякий случай попытался сместить адрес буфера с 0xD0000000 на 2,4,6,8 байт - не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sst78rus 0 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 3 минуты назад, MementoMori сказал: Вот оно что... гляну. А пока вот что. Я поместил прямоугольник в координаты X=2 (чтоб вывело ошибку) Y=0. Залил цветом 0x0000FF Получил вот что первые 6 пар пропускаем (это точки с X= 0 и X=1). 70 00 00 - это тянет на красноватый цвет - так и есть, красная полоса. А дальше 0x0000FF - синий. Получается у вас отображается правильно, а в видеобуфере лежит с артефактами. Как вы буфер заполняете? И чтоб проще смотреть было, очистите буфер перед заполнением, и прямоугольник поменьше возьмите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Как я заполняю буфер - писал выше, на предыдущей странице. Перед рисованием прямоугольника я заполняю экран черным. Прямоугольник - нарисую поменьше. Вот Не ловится ни один брейкпоинт. Но, как я понял после последней вашей реплики - и не должен? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Да.... я не обратил внимания.... Посмотрите... Я вывожу синий цвет, то есть 0x00 00 FF. А теперь поделите байты в вышеприведенном скрине мысленно на тройки - там получается не только первый пиксель испорчен, но и какое-то смещение и по чтению и по записи. Я хочу записать 00 00 00 | 00 00 00 | 00 00 FF | 00 00 FF Пишется 00 00 00 | 00 0F E0 | 70 00 00 | FF 00 00 Последний пиксель должен читаться как красный, а читается как синий. При этом я и пытался записать его как синий. То есть при записи промахивание. При чтении тоже промахивание. Оба промахивания в совокупности дают правильный результат кроме первого и послденего пикселей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sst78rus 0 24 февраля, 2020 Опубликовано 24 февраля, 2020 (изменено) · Жалоба 10 часов назад, MementoMori сказал: Как я заполняю буфер - писал выше, на предыдущей странице. Перед рисованием прямоугольника я заполняю экран черным. Прямоугольник - нарисую поменьше. Но, как я понял после последней вашей реплики - и не должен? Да, раз артефакты есть в видеобуфере, то ltdc может и не иметь ошибок. Попробуйте локализовать проблему. Сначала сделайте рисование прямоугольника "руками" (всмысле просто записью значений в цикле в видеобуфер). Тут можно даже без экрана проверить - очищаем память, рисуем прямоугольник, читаем обратно и проверяем записанное. Если с "одиночной" записью проблем нет, попробуйте обычным DMA в режиме mem2mem. Т.е. как-то определить где у вас проблема - в работе с sdram, в настройках dma2d или еще где. Да, чтоб проще глазами поверять содержимое, можно сделать небольшим размер слоя. В идеальном варианте - чтобы ширина была такой, сколько у вас в окне отладчика помещается. Тогда просто сразу видно, что куда пишется. При ширине слоя в 1024 не очень удобно это смотреть :) Изменено 24 февраля, 2020 пользователем sst78rus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться