|
|
  |
Пример от ST для STemWin где-то виснет. |
|
|
|
Dec 12 2016, 20:24
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Заработало с Вашими файликами, когда SSD1963 подключил. Вот только очень уж медленно. Неужели в памяти дело.... Та же самая демка на 429 (всего-то на 12 МГц больше) проце просто летает. Хм... тестилка заливки случайных прямоугольников показала 52,9 млн пикселей в сек. На 429 диско показывала около 62-х . То есть с шиной FSMC аппаратно все нормально... Но иконка не более чем 30х30 - видно как рисуется сверху вниз.... Гляньте, что может быть не так?
Сообщение отредактировал zheka - Dec 12 2016, 20:41
|
|
|
|
|
Dec 13 2016, 06:26
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Просто обалдеть.... Чего нашел... Как выводится в этом ГУИ картинка - в цикле выводятся пиксели Цитата _SetPixelIndex(pDevice, x, y, *p); Что же представляет из себя _SetPixelIndex А вот что Цитата SSD1963_SetCursor ( x, y );
FSMC_LcdWriteCmd ( 0x2C ); // SSD1963_WRITE_MEMORY_START FSMC_LcdWriteData ( color ); В свою очередь SSD1963_SetCursor это Цитата SSD1963_SetDisplayWindow ( Xpos, Ypos, Xpos, Ypos, SSD1963_Hor_DecrDecr ); А SSD1963_SetDisplayWindow это Цитата FSMC_LcdWriteCmd ( 0x2A ); // SSD1963_SET_COLUMN_ADDRESS hi = x1 >> 8; lo = x1 & 0x00ff; FSMC_LcdWriteData ( hi ); // Hi FSMC_LcdWriteData ( lo ); // Low hi = x2 >> 8; lo = x2 & 0x00ff; FSMC_LcdWriteData ( hi ); // Hi FSMC_LcdWriteData ( lo ); // Low
// set_page_addres FSMC_LcdWriteCmd ( 0x2B ); // SSD1963_SET_PAGE_ADDRESS hi = y1 >> 8; lo = y1 & 0x00ff; FSMC_LcdWriteData ( hi ); // Hi FSMC_LcdWriteData ( lo ); // Low hi = y2 >> 8; lo = y2 & 0x00ff; FSMC_LcdWriteData ( hi ); // Hi FSMC_LcdWriteData ( lo ); // Low Столько плясок из-за одного пикселя. У меня вопрос - кто это писал вообще и на какую мощь контроллера расчитывал?
Сообщение отредактировал zheka - Dec 13 2016, 06:29
|
|
|
|
|
Dec 13 2016, 07:38
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Цитата В цветных ЖКИ видеопамять адресуется попиксельно (3 байта на пиксель "вдуй" и не жужжи) секунду... можно один раз установить курсор (задать область) и гнать поток данных - один пиксель -> одна команда. Вы посмотрите в коде, сколько плясок вокруг одного пикселя. Не... на фиг этот STemWin, он даже на 429 проце со SDRAM и то подтормаживал. Скажите, может есть какая-нибудь библиотечка попроще? Безо всяких окон и виджетов, но чтобы кроме пикселя, прямоугольника и круга еще что-то могла делать?
|
|
|
|
|
Dec 14 2016, 05:29
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Цитата(zheka @ Dec 12 2016, 23:24)  Заработало с Вашими файликами, когда SSD1963 подключил. Вот только очень уж медленно. Неужели в памяти дело.... Та же самая демка на 429 (всего-то на 12 МГц больше) проце просто летает.
Хм... тестилка заливки случайных прямоугольников показала 52,9 млн пикселей в сек. На 429 диско показывала около 62-х . То есть с шиной FSMC аппаратно все нормально... Но иконка не более чем 30х30 - видно как рисуется сверху вниз....
Гляньте, что может быть не так? Сорри, долго не заглядывал сюда. Сравнивать любой FSMC дисп с LTDC (а именно он стоит на 429 дискавери) по определению неверно. совершенно разные технологии. Запись точки в SSD1963 - это 6 команд (запись x1, y1; x2, y2, потом команда засылки данных). Если брать в циклах обмена по FSMC - минимум в 2 раза больше. А для LTDC - просто запись 2-3 байтов в память по прямому адресу .... Хотите скорости - выкиньте FSMC и пользуйтесь LTDC. Но он есть только в F4x9 и выше. 407 такого не умеет. другие либы есть, но в плане окошек они и рядом с emWin не стояли ...
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Dec 15 2016, 06:56
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
А как бы мне проследить иерархию от от функций GUI до базовых функций? Лезу я в демку вижу там вызов функции GUI_DrawBitmap. А проследить что эта функция в себе содержит и что вызывает невозможно, это ведь библиотека, инструмент "Go to definition" в KEIL не работает. Где прописывается соответствие функций EMWin базовым функциям, написанным пользователем? Здесь? Код const GUI_DEVICE_API GUIDRV_API = { // // Data // DEVICE_CLASS_DRIVER, // // Drawing functions // _DrawBitmap, _DrawHLine, _DrawVLine, _FillRect, _GetPixelIndex, _SetPixelIndex, _XorPixel, // // Set origin // _SetOrg, // // Request information // _GetDevFunc, _GetDevProp, _GetDevData, _GetRect, };
Сообщение отредактировал zheka - Dec 15 2016, 06:57
|
|
|
|
|
Dec 15 2016, 08:24
|

Частый гость
 
Группа: Участник
Сообщений: 133
Регистрация: 5-11-16
Пользователь №: 94 050

|
Ой-ой-ой! Непорядок!.... Сколько работал с такого рода дисплеями (STN, TFT, OLED) -так у них всех вначале задаётся прямоугольная область по размерам изображения с привязкой к координатам, а потом дают команду рисования пикселей, и наконец идет пакет RGB (или код цвета для палитровых режимов) - линейная последовательность пикселей. Делать каждый раз позиционирование для какждого пикселя и давать команду на каждый пиксель - ИМХО главный тормоз в отрисовке графики... Впрочем, буферизация тут необходима: рисуем весь кадр в буфере (оператива CPU),затем даем команду на отрисовку всего экрана с буфера. Иначе будут мерцания и затирания при движущихся объектах. Ну и стирать буфер перед новой прорисовкой конечно! Самый верный путь - найти даташит с описанием регистров и накидать макросы через дефайны на сях какие нужны. Тогда ничего тормозить не будет. P.S. работал с каким-то OLED-дисплеем, так его контроллер позволял несколько интересные вещи: круги и прямоугольники с линиями отрисовывать аппаратно  128x128 цветной 65 тыс. цветов. Шина: 16 бит, 8 бит или SPI - любую выбрать можно было. Я брал 16 bit и к AT91RM9200 подключал к EBI  Цитата(Obam @ Dec 13 2016, 07:30)  А чему тут удивляться? В цветных ЖКИ видеопамять адресуется попиксельно (3 байта на пиксель "вдуй" и не жужжи), единственно что помогает, автоинкремент/автодекремент по горизонтали/вертикали (как задашь) и окно вывода. Ну и 8 бит на точку в режиме палитры(настраивается отдельно - 256 цветов из 32768 возможных) или напрямую R:G:B=3:3:2 bit
Сообщение отредактировал Mister_DSP - Dec 15 2016, 08:18
--------------------
SPY vs. SPY Хорошо там, где нет ничего...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|