реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Пример от ST для STemWin где-то виснет.
zheka
сообщение Dec 3 2016, 21:04
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, скачал я с сайта ST библиотеку STemWIN.
В архиве есть примеры под разные платы. STM32F4Discovery, которой я пользуюсь, там нет. Выбрал то что ближе всего - STM324XG_EBAL.
Подключил дисплей по FSMC. Ожидал трудностей с адаптацией, ибо контроллеры разные, с разным количеством ног. Опасения не оправдались - заменил пины NE3 на NE1, А0 на A16 и адреса LCD_REG и LCD_DAT подправил - дисплей работает.
Отключил инициализацию светодиодов и SRAM (в дискавери нет внешней SRAM).

Написал маленькую демку из стандартных функций - дисплей, повторюсь, работает, то есть проблем, обусловленных различием в платах, предвидеться не должно, ибо весь дальнейший код
Код
GUI_Init();
  
  GUI_Initialized = 1;

  /* Start Demo */
  GUIDEMO_Main();
}


от железа отвязан.
Тем не менее, где-то в GUI_Init() программа зависает. В функцию залезть не могу и в тексте ее не нашел, я так догадываюсь, что она непосредственно в библиотеке STemWin, в которую доступа нет.
Может ли эта проблема быть связана с тем, что примечик не знает, что у меня нет SRAM? Где это настроить? Возможно ли использовать STemWin без SRAM?
У кого-нибудь получалось на Дискавери запускать STEmWin?

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 3 2016, 22:50
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(zheka @ Dec 3 2016, 23:04) *
Может ли эта проблема быть связана с тем, что примечик не знает, что у меня нет SRAM?



Для этого GUI требуется глубокий стек.
Я б это проверил для начала.

Хотя имея SWD адаптер таких вопросов не должно возникать. Под GCC из командной строки что ли работаете?
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 05:21
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Для этого GUI требуется глубокий стек.


Руководство

Цитата
The basic stack requirement is app. 600 bytes. If using the Window Manager additional
600 bytes should be calculated. For Memory Devices further additional 200
bytes are recommended. Please note that the stack requirement also depends on the
application, the used compiler and the CPU.


И потом - я же брал готовый пример, которорый компилится без единого warning. Я справедливо полагал, что там все нормально. В настройках stack равен 4096 байт.

Виснет в функции LCD_X_Config на строке GUIDRV_FlexColor_Config(pDevice, &Config);
И вот еще - я использую пример "Standalone", то есть без RTOS

Сообщение отредактировал zheka - Dec 4 2016, 05:44
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 05:44
Сообщение #4


Профессионал
*****

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



А какой у Вас размер буфера STemWin?
Драйверу FlexColor нужно задавать указатели на функции доступа к FSMC. Вы их задали?


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 05:49
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
А какой у Вас размер буфера STemWin?

А где его посмотреть?
Я менял #define GUI_NUMBYTES (1024) * 512 на #define GUI_NUMBYTES (320) * 240*2 , если вы об этом.

Цитата
Драйверу FlexColor нужно задавать указатели на функции доступа к FSMC. Вы их задали?

Уважаемый. Вот если бы я писал что-то с нуля, такое предположение было бы кстати.
Но я использую готовое. Значит разработчик задал.
Эти указатели нужно менять в связи с тем, что я перенастроил FSMC под другой банк памяти?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 07:43
Сообщение #6


Профессионал
*****

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



Цитата(zheka @ Dec 4 2016, 08:49) *
Я менял #define GUI_NUMBYTES (1024) * 512 на #define GUI_NUMBYTES (320) * 240*2 , если вы об этом.

Да, я об этом. Осмелюсь предположить, что вы используете дисплей 320x240 sm.gif . Но размер буфера никак не связан с размером дисплея.
320*240*2 = 150 кил -- ну нет в F407 такого объёма памяти одним куском.
На Ф407 (дискавери) я использовал
#define GUI_NUMBYTES 64 *1024
64кила должно хватить для большинства задач.
Стек брал
Код
#define STACK_SIZE       0x00000300      /*!< The Stack size suggest using even number    */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];


Цитата(zheka @ Dec 4 2016, 08:49) *
Уважаемый. Вот если бы я писал что-то с нуля, такое предположение было бы кстати.
Но я использую готовое. Значит разработчик задал.
Эти указатели нужно менять в связи с тем, что я перенастроил FSMC под другой банк памяти?


От адреса не зависит, т.к. ему пофиг на какие-то адреса. Там просто функции типа записать команду/данные и пр. А по каким адресам и как Вы это делаете - Ваше личное дело. Хоть через уарт rolleyes.gif
Вот как я делал:
CODE
void LCD_X_Config ( void )
{
GUI_DEVICE *pDevice;
CONFIG_FLEXCOLOR Config = {0};
GUI_PORT_API PortAPI = {0};

// Set display driver and color conversion
pDevice = GUI_DEVICE_CreateAndLink ( GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0 );

// Display driver configuration, required for Lin-driver
LCD_SetSizeEx ( 0, XSIZE_PHYS , YSIZE_PHYS );
LCD_SetVSizeEx ( 0, VXSIZE_PHYS, VYSIZE_PHYS );

// Orientation
Config.Orientation = 0; // (GUI_MIRROR_X | GUI_MIRROR_Y);
Config.FirstCOM = 0x01;
Config.FirstSEG = 0x02;
GUIDRV_FlexColor_Config ( pDevice, &Config );

/*
+ void (* pfWrite16_A0) (U16 Data); // Запись в регистр команд
+ void (* pfWrite16_A1) (U16 Data); // Запись в регистр данных
+ void (* pfWriteM16_A1)(U16 * pData, int NumItems); // Запись блока в регистр данных
+ void (* pfReadM16_A1) (U16 * pData, int NumItems); // Чтение блока из регистр данных
+ U16 (* pfRead16_A1) (void); // Чтение регистра данных

void (* pfWriteM16_A0)(U16 * pData, int NumItems);
U16 (* pfRead16_A0) (void);
void (* pfReadM16_A0) (U16 * pData, int NumItems);
*/
// Set controller and operation mode
PortAPI.pfWrite16_A0 = SSD1963_WriteCmd; // Функция посылки команды в SSD1963
PortAPI.pfWrite16_A1 = SSD1963_WriteData; // Функция посылки данных в SSD1963
PortAPI.pfWriteM16_A1 = SSD1963_WriteBlock; // Функция записи блока в SSD1963
PortAPI.pfReadM16_A1 = SSD1963_ReadBlock; // Функция чтения блока из SSD1963
PortAPI.pfRead16_A1 = SSD1963_ReadData; // Функция чтения данных из SSD1963
GUIDRV_FlexColor_SetFunc ( pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720, GUIDRV_FLEXCOLOR_M16C0B16 );

GUIDRV_FlexColor_SetReadFunc66720_B16 ( pDevice, GUIDRV_FLEXCOLOR_IF_TYPE_II );
} // LCD_X_Config

.....................
////////////////////////////////////////////////////
// Функции для драйвера FlexColor

// Запись команды в SSD1963
void SSD1963_WriteCmd ( uint16_t cmd )
{
FSMC_LcdWriteCmd ( cmd );
} // SSD1963_WriteCmd

// Запись данных в SSD1963
void SSD1963_WriteData ( uint16_t data )
{
FSMC_LcdWriteData ( data );
} // SSD1963_WriteCmd

// Чтение данных из SSD1963
uint16_t SSD1963_ReadData ( void )
{
return FSMC_LcdReadData ( );
} // SSD1963_ReadData

// Запись блока в SSD1963
void SSD1963_WriteBlock ( uint16_t *pData, int NumItems )
{
// FSMC_TransferDataDMAToLCD ( pData, NumItems * 2, true );
for ( ; NumItems; NumItems -- )
FSMC_LcdWriteData ( *pData++ );
} // SSD1963_WriteCmd

// Чтение блока из SSD1963
void SSD1963_ReadBlock ( uint16_t *pData, int NumItems )
{
// FSMC_TransferDataDMAFromLCD ( pData, NumItems * 2 );
for ( ; NumItems; NumItems -- )
*pData++ = FSMC_LcdReadData ( );
} // SSD1963_ReadBlock

////////////////////////////////////////////////////


Ну и ещё ложка дёгтя про FlexColor. В нём есть какой-то древнющий баг - не работает чтение пикселей с дисплея.
Проявляется это в виде чёрного следа, тянущегося за любым спрайтом (курсор мыши тоже спрайт).
Я знаю 2 лекарства этой беды:
1. Не использовать Flexcolor. Использовать свои функции для работы с дисплеем.
2. Использовать большой буфер STemWin (GUI_NUMBYTES). Сколько именно надо - не знаю, на F439+SDRAM я использовал 3 метра. В этом случае, видимо, включается некое кэширование и чтение с дисплея не используется (проверял лично). В функции Read вообще никогда не попадает. Но этот вариант на дискаверине не реализуем вообще sad.gif .

На дискавери я использовал вариант 1. Проблем не было.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 08:24
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Куда это вставлять? ТАм же где GUI_NUMBYTES ?
Код
define STACK_SIZE       0x00000300      /*!< The Stack size suggest using even number    */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];


Что-то не помогло. Все также виснет на GUIDRV_FlexColor_Config ( pDevice, &Config );


Цитата
1. Не использовать Flexcolor. Использовать свои функции для работы с дисплеем.

Так со своими (а точнее имеющимися все в том же примере от ST, функциями, названия которых отличаются от тех, что прописаны указателями) дисплей работает.
Дальше GUI_Init не идет.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 08:31
Сообщение #8


Профессионал
*****

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



Цитата(zheka @ Dec 4 2016, 11:24) *
Куда это вставлять? ТАм же где GUI_NUMBYTES ?
Код
define STACK_SIZE       0x00000300      /*!< The Stack size suggest using even number    */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];


Нет, не там. Это размер стека. У меня оно в файле startup_stm32f439xx.c Но в разных компиляторах/средах это выглядеть по-разному.
Я привёл пример для Coocox. Но и в нём стартовый код бывает или на Си, или на асме. У меня на Си.

Поэтому ориентируйтесь на месте.

Цитата(zheka @ Dec 4 2016, 11:24) *
Так со своими (а точнее имеющимися все в том же примере от ST, функциями, названия которых отличаются от тех, что прописаны указателями) дисплей работает.
Дальше GUI_Init не идет.


Свои функции - я имел в виду полностью Ваш драйвер дисплея. Не flexColor.
если хотите - выложу полный пример STemWinDemo с полностью моим драйвером SSD1969. Драйвер сами подмените на ваш. Там требуются только функции типа записать/считать пиксель.
Ну и инициализация дисплея конечно.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 08:36
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата(hd44780 @ Dec 4 2016, 11:31) *
Нет, не там. Это размер стека. У меня оно в файле startup_stm32f439xx.c Но в разных компиляторах/средах это выглядеть по-разному.
Я привёл пример для Coocox. Но и в нём стартовый код бывает или на Си, или на асме. У меня на Си.

Поэтому ориентируйтесь на месте.


У меня такой же файл, только с расширением .S и это выглядит вот так
Цитата
Stack_Size EQU 0x2000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
</h>

Heap_Size EQU 0x2000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit


Цитата
Не использовать Flexcolor. Использовать свои функции для работы с дисплеем.

А где его отключать и как использовать свои функции? Все в том же LCD_X_Config?
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 08:37
Сообщение #10


Профессионал
*****

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



стек 0x2000 - вполне достаточно. Прочитайте мой предыдущий пост. Я его обновил.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 08:39
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
если хотите - выложу полный пример STemWinDemo с полностью моим драйвером SSD1969

Буду благодарен, потому как конечная моя цель - это именно SSD1969, просто для начала я хотел запустить то, что как бы оттестировано разработчиком - ILI9325
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 08:41
Сообщение #12


Профессионал
*****

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



Цитата(zheka @ Dec 4 2016, 11:36) *
А где его отключать и как использовать свои функции? Все в том же LCD_X_Config?


см. вложение. Для Вашего диспа реализуете те же функции, которые вызываются в LCDConf.c

Но!! если будете использовать SSD1963, используйте свою инициализацию дисплея. Т.к. она всегда разная. Моя может не подойти.
это зависит от матрицы и способа её подключения к SSD1963. Разные тайминги плюс перевороты/зеркалирования изображения бывают по-разному сделаны.
Прикрепленные файлы
Прикрепленный файл  STemWinLibrary_drv.7z ( 13.65 килобайт ) Кол-во скачиваний: 21
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 08:56
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
..\SSD1963_Driver\SSD1963.c(9): error: #5: cannot open source input file "System.h": No such file or directory

Это где искать?

Какая то фигня... заменил свои GUICOnf и LCDConf на ваши - стали появляться ошибки, чего-то в них не хватает...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 08:58
Сообщение #14


Профессионал
*****

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



Сорри. Там просто функция задержки на указанное кол-во мс. В инициализации SSD надо.
Приложил. Можете свою использовать, если такая у Вас есть.
Прикрепленные файлы
Прикрепленный файл  System.7z ( 614 байт ) Кол-во скачиваний: 20
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 09:02
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Еще вопрос. У меня был файл GUIConf_stm3240g_eval, стал Ваш файл GUIConf. То же самое и с LCDConf.
Не нашел в проекте, где нужно перепрописать имя.
И вообще- такое ощущение, что находящиеся в них функции вызываются из самой библиотеки.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 10:23
Сообщение #16


Профессионал
*****

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



Цитата(zheka @ Dec 4 2016, 12:02) *
Еще вопрос. У меня был файл GUIConf_stm3240g_eval, стал Ваш файл GUIConf. То же самое и с LCDConf.
Не нашел в проекте, где нужно перепрописать имя.
И вообще- такое ощущение, что находящиеся в них функции вызываются из самой библиотеки.


Ничего переписывать не надо. Находящиеся там функции вызываются из недр библиотеки. Имя файла роли вообще не играет.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 4 2016, 10:43
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ну у меня пока ситуация с ошибками компиляции как со змей-горынычем. ОТрубаешь одну голову - вырастает 3.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 4 2016, 14:34
Сообщение #18


Профессионал
*****

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



а покажите ошибки, может подскажу чего ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 5 2016, 13:08
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Я пока к старому варианту вернул, хочу попробовать запустить на своих функциях SSD1963 хотя бы заливку экрана, без оболочки.
Потом выложу.
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 12 2016, 20:24
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Заработало с Вашими файликами, когда SSD1963 подключил.
Вот только очень уж медленно. Неужели в памяти дело....
Та же самая демка на 429 (всего-то на 12 МГц больше) проце просто летает.

Хм... тестилка заливки случайных прямоугольников показала 52,9 млн пикселей в сек.
На 429 диско показывала около 62-х . То есть с шиной FSMC аппаратно все нормально... Но иконка не более чем 30х30 - видно как рисуется сверху вниз....


Гляньте, что может быть не так?

Сообщение отредактировал zheka - Dec 12 2016, 20:41
Прикрепленные файлы
Прикрепленный файл  Standalone.rar ( 1.21 мегабайт ) Кол-во скачиваний: 15
 
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 13 2016, 06:26
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Obam
сообщение Dec 13 2016, 07:30
Сообщение #22


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



А чему тут удивляться?
В цветных ЖКИ видеопамять адресуется попиксельно (3 байта на пиксель "вдуй" и не жужжи), единственно что помогает, автоинкремент/автодекремент по горизонтали/вертикали (как задашь) и окно вывода.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 13 2016, 07:38
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
В цветных ЖКИ видеопамять адресуется попиксельно (3 байта на пиксель "вдуй" и не жужжи)


секунду...
можно один раз установить курсор (задать область) и гнать поток данных - один пиксель -> одна команда. Вы посмотрите в коде, сколько плясок вокруг одного пикселя.

Не... на фиг этот STemWin, он даже на 429 проце со SDRAM и то подтормаживал.

Скажите, может есть какая-нибудь библиотечка попроще? Безо всяких окон и виджетов, но чтобы кроме пикселя, прямоугольника и круга еще что-то могла делать?
Go to the top of the page
 
+Quote Post
Obam
сообщение Dec 13 2016, 08:03
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Вот чесслово, за всё время перетираний, если не три, то одну свою либу давно бы написали sm.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 14 2016, 05:29
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 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 не стояли ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 14 2016, 05:57
Сообщение #26


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Запись точки в SSD1963 - это 6 команд (запись x1, y1; x2, y2, потом команда засылки данных). Если брать в циклах обмена по FSMC - минимум в 2 раза больше.
А для LTDC - просто запись 2-3 байтов в память по прямому адресу ....

Похоже мы друг друга не понимаем....

Я не спорю что на одну точку уходит 6 команд. Но когда выводишь картинку на одну точку не должно уходить 6 команд. Точно так же задаете регион и сплошным потоком шлются данные. Я через FSMC подобным образом заполняю весь экран 800х480 где-то за 20 мсек. А тут простой прямоугольник 200х100 напоминает опускающийся занавес.
Go to the top of the page
 
+Quote Post
Rash
сообщение Dec 14 2016, 06:41
Сообщение #27


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Так никто не мешает переписать часть ф-ций в драйвере дисплея которые не устраивают по скорости.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 14 2016, 09:08
Сообщение #28


Профессионал
*****

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



Попробуйте переписать функции в LCDConf.c. Я этого не делал, меня и так всё устаивало biggrin.gif
А сейчас вообще переехал на LTDC..


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
zheka
сообщение Dec 15 2016, 06:56
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Mister_DSP
сообщение Dec 15 2016, 08:24
Сообщение #30


Частый гость
**

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



Ой-ой-ой! Непорядок!.... Сколько работал с такого рода дисплеями (STN, TFT, OLED) -так у них всех вначале задаётся прямоугольная область по размерам изображения с привязкой к координатам, а потом дают команду рисования пикселей, и наконец идет пакет RGB (или код цвета для палитровых режимов) - линейная последовательность пикселей.

Делать каждый раз позиционирование для какждого пикселя и давать команду на каждый пиксель - ИМХО главный тормоз в отрисовке графики...

Впрочем, буферизация тут необходима: рисуем весь кадр в буфере (оператива CPU),затем даем команду на отрисовку всего экрана с буфера.
Иначе будут мерцания и затирания при движущихся объектах.

Ну и стирать буфер перед новой прорисовкой конечно!

Самый верный путь - найти даташит с описанием регистров и накидать макросы через дефайны на сях какие нужны. Тогда ничего тормозить не будет.

P.S. работал с каким-то OLED-дисплеем, так его контроллер позволял несколько интересные вещи: круги и прямоугольники с линиями отрисовывать аппаратно sm.gif 128x128 цветной 65 тыс. цветов. Шина: 16 бит, 8 бит или SPI - любую выбрать можно было. Я брал 16 bit и к AT91RM9200 подключал к EBI sm.gif

Цитата(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
Хорошо там, где нет ничего...
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 15 2016, 16:54
Сообщение #31


Профессионал
*****

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



Цитата(zheka @ Dec 15 2016, 09:56) *
Здесь?


Да. Но что из тех функций и когда она вызывает - я не исследовал.

Mister_DSP, конечно, Вы правы, но в данном случае мы ограничены функционалом графического шлюза emWin (LCDConf.c) и логикой его работы.
А как он работает - повторюсь, я не исследовал.

Я работал с FlexColor, он работает гораздо быстрее, а про его недостатки и баги я уже писал выше. Повторяться незачем.
Могу только добавить, что при его использовании конструкция получается весьма чувствительной к качеству разводки платы. У меня разводка весьма хреновая и на FlexColor мой SSD1963 частенько подвисал (экран белеет и перестаёт показывать). Это баг самого SSD, но факт остаётся фактом.
С тем шлюзом таких багов нет.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 23:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01717 секунд с 7
ELECTRONIX ©2004-2016