Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Вс мар 20, 2022 22:07:41
The Rock
[uquote="VladislavS",url="/forum/viewtopic.php?p=4201400#p4201400"]Сколько кадров, кстати, сейчас получается?[/uquote]
Этот цикл отрабатывает за 0.3 сек ( по видеозаписи с телефона)
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 08:29:05
VladislavS
64М/320/480*0.3 = 125 тактов на запись 8 констант в порты, адресация которых доступна от одной базы по смещению. Овердофига. Раза в 3-4 быстрее должно быть. Пришло время листинги смотреть.
Спойлер
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 11:01:23
The Rock
VladislavS писал(а):64М/320/480*0.3 = 125 тактов на запись 8 констант в порты, адресация которых доступна от одной базы по смещению. Овердофига. Раза в 3-4 быстрее должно быть. Пришло время листинги смотреть.
Пока искал где посмотреть листинг(к сожалению, так и не нашел) увидел коды оптимизации. Сделал -О3 и мой цикл отработал очень быстро, визуально думаю уже будет сложно замерить время при помощи камерой, т.к. он просто моргнул и полностью перекрасился.
Но с листингом думаю будет беда
Замерил мой не оптимизированный вывод(где идет расчёт и тп)Спойлер
// Функция заливки области
void TFT9488_Flood(unsigned short color, unsigned long len) {
unsigned short blocks;
unsigned char i, hi = color >> 8, lo = color;
TFT9488_CS_Active();
TFT9488_RS_Command();
TFT9488_Write8(0x2C);
TFT9488_RS_Data();
TFT9488_Write16BitColor(hi, lo);
len--;
blocks = (unsigned short) (len / 64); //64 pixels/block
if (hi == lo) {
while (blocks--) {
i = 16;
do {
// тут было раньше 8 раз TFT9488_WR_Strobe(); но текст ниже в разы быстрее выполняется
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
} while (--i);
}
//Fill any remaining pixels(1 to 64)
for (i = (unsigned char) len & 63; i--;) {
// тут было раньше 2 раз TFT9488_WR_Strobe(); но текст ниже в разы быстрее выполняется
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
GPIOA->BSRR = GPIO_BSRR_BR1;
GPIOA->BSRR = GPIO_BSRR_BS1;
}
} else {
while (blocks--) {
i = 16;
do {
TFT9488_Write16BitColor(hi, lo);
TFT9488_Write16BitColor(hi, lo);
TFT9488_Write16BitColor(hi, lo);
TFT9488_Write16BitColor(hi, lo);
} while (--i);
}
//Fill any remaining pixels(1 to 64)
for (i = (unsigned char) len & 63; i--;) {
TFT9488_Write16BitColor(hi, lo);
}
}
TFT9488_CS_Idle();
}
Экран обновился гдето за 0.1 сек, но движение видно.
А максимально скоростной цикл обновляется просто через мигание , был черный -миг - желтый
Добавлено after 25 minutes 33 seconds:
Подскажите пожалуйста ещё, если я например хочу рисовать как бы поверх того что уже отрисовано, правильно ли я понимаю логику?
1. Сначала читаю что находится в памяти дисплея
2. Вычисляю какие ячейки мне нужно перекрасить и формирую новый буфер кадра
3. Этот буфер загоняю на дисплей
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 11:10:58
VladislavS
Я в рисовании не силён. Но точно знаю, когда данные перестанут быть константные, то от табличного методы вычисления будет не отвертеться.
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 11:29:17
The Rock
VladislavS писал(а):от табличного методы вычисления будет не отвертеться.
обязательно вернусь к этому,сейчас изучаю матрицыСпойлер
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 11:46:55
Reflector
[uquote="The Rock",url="/forum/viewtopic.php?p=4201507#p4201507"]Подскажите пожалуйста ещё, если я например хочу рисовать как бы поверх того что уже отрисовано, правильно ли я понимаю логику?[/uquote]
Что рисовать собираешься?
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 12:14:36
COKPOWEHEU
Подскажите пожалуйста ещё, если я например хочу рисовать как бы поверх того что уже отрисовано, правильно ли я понимаю логику?
Зависит от того что рисовать.
В случае наклонных линий проще рисовать попиксельно. То есть команда "нарисовать область от (x,y) до (x,y)" и 2 байта данных. Потом следующая такая же команда и т.д.
Если прямоугольные картинки (особенно текст), когда можно игнорировать фон, тоже "нарисовать область" и куча данных, без чтения.
Чтение нужно скорее если нужна прозрачность кусков картинки. Тот же текст, если требуется сохранить фон, иногда геометрические фигуры (если окажется, что считать область - модифицировать - записать окажется быстрее работы с отдельными пикселями).
Но вообще-то, я бы таких задач избегал. Если уж текст, то на монотонном фоне. Ради каждой буквы читать ее область или высчитывать по какому-то алгоритму будет слишком медленно.
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 14:47:13
The Rock
Демонстрация результата, тут я ещё поставил кварц на 8 MHz и перевел МК на 72 MHz. Огромное всем спасибо, без вас такого результата не было ! VladislavS, Вам отдельное спасибо!
Reflector писал(а):Что рисовать собираешься?
Мне очень интересно сделать любительского уровня Primary Fllight Display (PFD) Его и собираюсь обрисовывать СпойлерCOKPOWEHEU, огромное спасибо за ценнейшие советы!
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 16:25:50
COKPOWEHEU
Рисовать цифры под углом будет весело!
А в остальном там же цвет фона заранее задан, даже градиентов нет. Хотя от варианта реализации зависит. В любом случае самое веселье будет скорее с наклонными цифрами, чем с прозрачной картинкой.
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Пн мар 21, 2022 20:03:39
The Rock
к счастью, наклонный шрифт у меня скорее всего будет отсутствовать ) Будут стрелочки
Добавлено after 3 hours 33 minutes 4 seconds:
Посмотрев на картинки PFD, понял как можно ускорить ещё в 2 раза вывод. Если перейти в 8 битный цвет(а этой палитры мне хватит за глаза), то все ускорится.
Добавлено after 1 minute 56 seconds:
8 битный цвет мне пригодится, так как дисплей 800х480 скучает
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Вт мар 22, 2022 15:11:31
The Rock
Получил корпус для прибора, теперь не понятно радиационный он или нет. И второе, дисплей мелковат и не хватает яркости. Буду делать при помощи двух дисплеев )
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Вт мар 22, 2022 18:49:16
jcxz
[uquote="The Rock",url="/forum/viewtopic.php?p=4202105#p4202105"]Получил корпус для прибора, теперь не понятно радиационный он или нет.[/uquote] Вы его с разборки АЭС заказывали???
Re: Медленный вывод на STM32 8 битной шины (дисплей)
Добавлено: Вт мар 22, 2022 19:41:04
The Rock
jcxz писал(а): Вы его с разборки АЭС заказывали???
Нет, в старых прибор применялась светомасса постоянного свечения с радиоактивным радием-226