Easyelectronics.ru • Просмотр темы - STemWin на STM32F4. Первый опыт. Вопросы.

Easyelectronics.ru

Электроника для всех
Текущее время: 15 авг 2018, 05:58

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 1224 ]  На страницу Пред.  1 ... 45, 46, 47, 48, 49  След.
Автор Сообщение
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 24 мар 2018, 08:15 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Misaka10032 писал(а):
Ruslan-maniak писал(а):
Подскажите кто знает, как при создании окна установить фокус на конкретный виджет в этом окне? После создания, фокуса нет ни на одном виджете.

У меня работает WM_SetFocus(handle).
Если есть ID, то сначала получаем handle. То есть в итоге так: WM_SetFocus(WM_GetDialogItem(pMsg->hWin, ID));

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 24 мар 2018, 09:17 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Ruslan-maniak писал(а):
В каком месте вызывать эту функцию?

Одноразовый таймер?

Ещё попробуйте что-то типа
Код:
   WM_MESSAGE msg;
   msg.MsgId = WM_TOUCH;
   WM_SendMessage ( hItem, &msg );

Т.е. послать контролу сообщение якобы в него ткнули мышей/тачем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 27 мар 2018, 18:43 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Приветствую. Пара вопросов по EDIT.
1) Можно ли используя AddKey() вводить value а не text? Пробовал устанавливать SetDecMode(), но все равно value остается неизменным, меняется только text. И из этого следующие вопросы. Использую вот так AddKey(obj, '1') .
2) Можно ли text перевести в value посредством функционала EDIT, или это все надо снаружи вручную делать?
3) Какой смысл в функции SetDecMode() имеют параметры min и max? Если отправить value не входящим в этот отрезок, оно все равно устанавливается. И в дальнейшем опять же нет возможности изменять value кроме как SetValue() но при этом эти рамки ни как не учитываются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 28 мар 2018, 10:48 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Я не пользовался контролом EDIT для ввода чисел.
Для целых чисел попробуйте контрол SpinBox. Он вроде как специализированный для этого.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 28 мар 2018, 22:26 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Кто пользуется котролом MULTIPAGE - вопрос
Как можно узнать, что пользователь переключился на какую-то вкладку? Если вкладка первая, то её оконная процедура при этом получает сообщения WM_NOTIFY_PARENT/WM_NOTIFICATION_GOT_FOCUS, всё гуд, меня это устраивает. Но мне надо это на вторую вкладку, а она вообще НИЧЕГО не получает.
Это какой-то баг или я чего-то не понимаю? В доках и примерах ничего про это не нашёл.

Повторюсь, интересует событие не в родителе, а именно во вкладке.

PS. костылить чем-то типа таймера с опросом изменилась ли видимая страница пока не пробовал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 09:08 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2662
я уже задавался таким вопросом, буквально несколько страниц назад. У меня на вкладках мультипейджа довольно нагруженные страницы, которые обновляются по таймеру, и оказалось что они обновляются даже если эта страница не выбрана. Сейчас сделал так:
Код:
      case WM_TIMER:
      {
         WM_RestartTimer(pMsg->Data.v, 500);
         if ( !WM_IsVisible(WM_GetClientWindow(pMsg->hWin)) ) break;
         
         //обновление всех виджетов
      }

Пробовал по всякому, но этот костыль единственный заработал.
У вас корректно работает WM_NOTIFICATION_GOT_FOCUS на страницах? У меня это сообщение срабатывает только при инициализации.
upd: STemWin версии "STemWin532_CM4_OS_IAR.a"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 12:19 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Hold писал(а):
я уже задавался таким вопросом, буквально несколько страниц назад. У меня на вкладках мультипейджа довольно нагруженные страницы, которые обновляются по таймеру, и оказалось что они обновляются даже если эта страница не выбрана. Сейчас сделал так:
Код:
      case WM_TIMER:
      {
         WM_RestartTimer(pMsg->Data.v, 500);
         if ( !WM_IsVisible(WM_GetClientWindow(pMsg->hWin)) ) break;
         
         //обновление всех виджетов
      }

Пробовал по всякому, но этот костыль единственный заработал.
У вас корректно работает WM_NOTIFICATION_GOT_FOCUS на страницах? У меня это сообщение срабатывает только при инициализации.
upd: STemWin версии "STemWin532_CM4_OS_IAR.a"


У меня 5.40. Сейчас проверил - WM_NOTIFICATION_GOT_FOCUS приходят в процесса инита, когда окно ещё не отрисовано и при закрытии окна. И всё :( Кстати, даже на первой странице ...
Что-то они там сломали. Старое окно (где оно когда-то работало) мне тоже видимо придётся проверять/переделывать.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 29 мар 2018, 20:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 24 июл 2016, 00:07
Сообщения: 104
Ruslan-maniak писал(а):
Приветствую. Пара вопросов по EDIT.
1) Можно ли используя AddKey() вводить value а не text? Пробовал устанавливать SetDecMode(), но все равно value остается неизменным, меняется только text. И из этого следующие вопросы. Использую вот так AddKey(obj, '1') .
2) Можно ли text перевести в value посредством функционала EDIT, или это все надо снаружи вручную делать?
3) Какой смысл в функции SetDecMode() имеют параметры min и max? Если отправить value не входящим в этот отрезок, оно все равно устанавливается. И в дальнейшем опять же нет возможности изменять value кроме как SetValue() но при этом эти рамки ни как не учитываются.

Использовал для вывода данных EDIT буквально вчера.
1) Сейчас проверю в своей программе.
2) EDIT_GetValue не работает?
3) Странно, вроде отправлял не входящими в отрезок - устанавливалось максимальное. Как я понял, min\max нужны для подсчёта количества нулей :D
Допустим, min = 0, max = 100. Если я задаю значение 20, то выводится 020. Если max = 99, выводится уже 20.

EDIT, кстати, в десятичном режиме довольно удобно использовать и для вывода дробных значений. Допустим, задал параметр shift = 1, выдал 1000 а вывелось 100.0. И никакой арифметики с запятой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 30 мар 2018, 20:01 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Hold писал(а):
Пробовал по всякому, но этот костыль единственный заработал.


Да, у меня тоже вроде заработал. Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 09:14 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Приветствую. По мере роста кода GUI начались вываливания в хардфолл. Например при удалении диалога. Мне кажется не хватает памяти. Но какой именно? Куча и Стек выделены линкером по 0х4000 байт. Обычной оперативы под работу билиотеки выделено 63000 байт, больше выделить не дает линкер. Жонглированием диалогами и оптимизацией в одном месте починешь, в другом начнет отваливаться. При этом большинство диалогов не существуют одновременно. А создаются иерархически: один - child от другого. При этом хардфол постоянный появился при добавлении диалога на первом уровне иерархии. То есть есть гораздо глубже диалоги но там нет хардфола. Посоветуйте что делать с этим? Или без вариантов надо увеличивать оперативу физически?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 16:46 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Куча для простого malloc родом из компилятора вообще ни при чём, STemWin её не использует, стек, хз, может и влияет, но я не замечал.
я думаю больше влияет вот эта память: GUI_ALLOC_AssignMemory(extMem, GUI_NUMBYTES);
Может Вы слишком жирный диалог сделали? По моим наблюдениям пик расхода памяти из GUI_ALLOC_AssignMemory приходится именно на создание окна, тогда, когда окно ещё даже не прорисовалось.
Попробуйте упростить диалог. если поможет - ставьте внешний RAM. Я давно переехал на SDRAM, дал гую 3 метра, проблем пока не видел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 02 апр 2018, 21:58 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Так в том то и дело что диалоги простецкие (в частности тот с которым основные проблемы - пара кнопок и один edit). Структура такая:
Есть основной диалог, при его создании также создается дочерний диалог и приаттачивается к основному. Затем если из дочернего создать второй диалог дочерний по отношению к основному и также приаттачить его к основному, а первый дочерний в свою очередь закрыть и удалить - то далее все нормально работает на любую глубину второго дочернего диалога и из него также закрывается и удаляется основной диалог. А вот если после создания первого диалога из него взять и закрыть и удалить основной то все - хардфол. То есть все сыпется когда я пытаюсь удалить основной диалог из первого дочернего. Из второго он удаляется прекрасно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 09 апр 2018, 11:50 
Заглядывает иногда

Зарегистрирован: 14 авг 2012, 14:40
Сообщения: 68
Нет, дело точно не в недостатке памяти. Выделил уже под 200 КБайт. Все тоже самое. Создаю основное диалоговое окно. Если в нем создать дочернее диалоговое окно и приаттачить его к основному, то из обработчика дочернего диалога без проблем можно закрывать основной диалог - все отлично работает. Но если в дочернее окно добавить EDIT и установить на него фокус, и определить для этого EDITа кастомный обработчик нажатий кнопок EDIT_SetpfAddKeyEx(). И затем из этого обработчика отправить месседж дочернему (по отношению к основному) окну чтобы тот закрыл основное, или же прямо из обработчика попробовать закрыть основное диалоговое окно, то фукция закрытия окна выполняется, а далее когда выходим из функции откуда вызывали закрытие - происходит хардфол. Судя по трассировке в асме, это происходит при вызове функции WM_Invalidate().
Приведу мой код:
Определение диалогов (основной и дочерний соответственно)
Код:
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
  { WINDOW_CreateIndirect, "WindowSettings", ID_WINDOW_0, 0, 0, 480, 272, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textMenuName",  GUI_ID_TEXT0, 20, 5, 440, 30, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textEnter",     GUI_ID_TEXT1, 65, 235, 150, 30, 0, 0, 0 },
  { TEXT_CreateIndirect,   "textEsc",       GUI_ID_TEXT2, 265, 235, 150, 30, 0, 0, 0 },
};

static const GUI_WIDGET_CREATE_INFO _aDialogCreateSettingsPasswordIn[] =
{
  { FRAMEWIN_CreateIndirect, "frame1", ID_FRAMEWIN,     60,  40, 360, 185, 0, 0, 0 },
  { TEXT_CreateIndirect,     "text1", GUI_ID_TEXT0,     0, 40, 360, 30,  0, 0, 0 },
  { BUTTON_CreateIndirect,   "button1", GUI_ID_BUTTON0, 75, 115, 100,  30,  0, 0, 0 },
  { BUTTON_CreateIndirect,   "button2", GUI_ID_BUTTON1, 185, 115, 100,  30,  0, 0, 0 },
  { EDIT_CreateIndirect,     "edit1", GUI_ID_EDIT0,     130, 75, 100, 30,  0, 6, 0 },   
};

создание и удаление основного диалогового окна
Код:
WM_HWIN WindowSettingsCreate (void)
{
    hWindow = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),
                                  _cbDialog, WM_HBKWIN, 0, 0);   
   
    hPassword = GUI_CreateDialogBox(_aDialogCreateSettingsPasswordIn,
                                    GUI_COUNTOF(_aDialogCreateSettingsPasswordIn),
                                    _cbDialogSettingsPasswordIn, WM_HBKWIN, 0, 0);
    FRAMEWIN_SetTitleVis(hPassword, 0); 
   
    WM_AttachWindow(hPassword, hWindow);
    return hWindow;
}

void WindowSettingsDelete (void)
{   
    GUI_EndDialog(hWindow, 0);
    WM_DeleteWindow(hWindow);
}


обработчик основного окна
Код:
static void _cbDialog (WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
   
    switch (pMsg->MsgId)
    {
        case WM_INIT_DIALOG:
        {
            //
            // Initialization of 'WindowSettings'
            //
            hItem = pMsg->hWin;
            WINDOW_SetBkColor(hItem, 0x0000FFFF);
            //
            // Initialization of 'textMenuName'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, winStateNames[0]);
            TEXT_SetFont(hItem, &GUI_FontArial22HB);
            TEXT_SetBkColor(hItem, GUI_LIGHTGRAY);
            WM_HideWindow(hItem);
            //
            // Initialization of 'textEnter'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, "Enter - изменить");
            TEXT_SetFont(hItem, &GUI_FontArial18HB);
            WM_HideWindow(hItem);
            //
            // Initialization of 'textEsc'
            //
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2);
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetText(hItem, "Esc - выход");
            TEXT_SetFont(hItem, &GUI_FontArial18HB);
            WM_HideWindow(hItem);
        }
        break;
        case WM_NOTIFY_PARENT:
        break;
        case WM_POST_PAINT:
        {
            if(password)
            {
                GUI_RECT rect;           
                GUI_SetColor(GUI_BLACK);   
                GUI_DrawRectEx(&rect);
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);           
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);
                WM_GetWindowRectEx(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2), &rect);
                GUI_DrawRoundedFrame(rect.x0 - 3, rect.y0 - 3, rect.x1 + 3, rect.y1 + 3, 0, 3);
            }
        }
        break;
        case MSG_SWITCH_STATE:
        {     
            uint8_t state = pMsg->Data.v;
            hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
            if(state == 0)
            {
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0));
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT1));
                WM_ShowWindow(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT2));
            }
            if(state >= 6)
            {
                char str[50];
                sprintf (str, winStateNames[state], choosenOutput+1);
                TEXT_SetText(hItem, str);
            }
            else
                TEXT_SetText(hItem, winStateNames[state]);
           
            TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
            TEXT_SetFont(hItem, &GUI_FontArial22HB);
            TEXT_SetBkColor(hItem, GUI_LIGHTGRAY);           
        }   
        break;
        default:
        {
            WM_DefaultProc(pMsg);           
        }
        break;
    }
}

обработчик дочернего окна
Код:
static void _cbDialogSettingsPasswordIn (WM_MESSAGE * pMsg)
{
     WM_HWIN hItem;
     int     NCode;
     int     Id;     
     switch (pMsg->MsgId)
     {     
         case WM_INIT_DIALOG:
         {             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
             TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             TEXT_SetText(hItem, winItemNamesPasswordIn[0]);
             TEXT_SetFont(hItem, &GUI_FontArial22HB);
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON0);
             BUTTON_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             BUTTON_SetText(hItem, winItemNamesPasswordIn[1]);
             BUTTON_SetFont(hItem, &GUI_FontArial18HB);
             BUTTON_SetFocussable(hItem, 0);
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_BUTTON1);
             BUTTON_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             BUTTON_SetText(hItem, winItemNamesPasswordIn[2]);
             BUTTON_SetFont(hItem, &GUI_FontArial18HB);
             BUTTON_SetFocussable(hItem, 0);   
             
             hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_EDIT0);
             EDIT_SetFont(hItem, &GUI_FontArial22HB);
             EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
             EDIT_EnableBlink(hItem, 300, 1);   
             EDIT_SetpfAddKeyEx(hItem, _cbEditAddKeyPassword);
             WM_SetFocus(hItem);
         }
         break;
         case MSG_CHECK_PASSWORD:
         {       
                WindowSettingsDelete();
         }
         break;     
         default:
         {
             WM_DefaultProc(pMsg);           
         }
         break;
     }
}


и кастомный обработчик кнопок для edit
Код:
static void _cbEditAddKeyPassword (EDIT_Handle hObj, int Key)
{   
    EDIT_SetpfAddKeyEx(hObj, 0);
    switch (Key)
    {
        case eMatrixKeyboardKey_ENTER:
        {       
            WM_MESSAGE msg;
            msg.MsgId = MSG_CHECK_PASSWORD;
            msg.Data.v = EDIT_GetNumChars(hObj);
            WM_SendMessage(WM_GetParent(hObj),&msg); 
            return;           
        }
        break;
        case eMatrixKeyboardKey_ESC:
        {             
            WindowSettingsDelete();
            return;           
        }     
        break;
        case eMatrixKeyboardKey_1:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '1';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_2:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '2';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_3:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '3';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_4:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '4';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_5:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '5';
            EDIT_AddKey(hObj, '*');           
        }
        break;         
        case eMatrixKeyboardKey_6:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '6';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_7:
         { 
            str[EDIT_GetCursorCharPos(hObj)] = '7';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_8:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '8';
            EDIT_AddKey(hObj, '*');           
        }
        break;
        case eMatrixKeyboardKey_9:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '9';
            EDIT_AddKey(hObj, '*');           
        }
        break;       
        case eMatrixKeyboardKey_0:
        { 
            str[EDIT_GetCursorCharPos(hObj)] = '0';
            EDIT_AddKey(hObj, '*');           
        }
        break;
    }
    EDIT_SetpfAddKeyEx(hObj, _cbEditAddKeyPassword);
}


Что делать не знаю. Все перепробовал. Посмотрите, может кто-то найдет ошибку. Последнее что происходит в обработчиках перед хардфоллом это сообщения об удалении дочек дочернего окна. А затем программа возвращается в кастомный обработчик нажатий (либо туда откуда отправляли месседж либо туда откуда вызывали функцию закрытия основного окна), а EDIT то уже удален. Думаю проблема в этом. Но как правильно это исправить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 12:59 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
Добрый день!

Прошу помощи у знатоков emWIN, нужен ликбез.

Работаю на STM32f429, freertos. Как подключить к библиотеке современный цветной ЖК экран через LTDC по демо примеру разобрался, все работает, рисуется.

А теперь хочу использовать библиотеку с старым экранчиком - монохромный PG12864, контроллер LH155BA5, работа через SPI. Самописный драйвер и простой генератор экрана есть, техническая часть рабочая.

А вот как подружить библиотеку с таким устройством? Как вообще emWin работает с последовательными экранами?

Пытался разобраться - но какой мне нужен драйвер и как его адаптировать? Или нужно полностью писать свой?

Если с функциями LCD_X_DisplayDriver и LCD_X_Config еще хоть что-то понятно, то как библиотека поймет какие функции реализованы в пользовательском драйвере?

Почитал мануал, там есть раздел касаемо SPI, но не совсем понятно как его задействовать и опять же, это касается передачи данных в дисплей, а само построение примитивов как будет работать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 14:58 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Elrandir писал(а):
А теперь хочу использовать библиотеку с старым экранчиком - монохромный PG12864, контроллер LH155BA5, работа через SPI. Самописный драйвер и простой генератор экрана есть, техническая часть рабочая.

А вот как подружить библиотеку с таким устройством? Как вообще emWin работает с последовательными экранами?

Пытался разобраться - но какой мне нужен драйвер и как его адаптировать? Или нужно полностью писать свой?

Если с функциями LCD_X_DisplayDriver и LCD_X_Config еще хоть что-то понятно, то как библиотека поймет какие функции реализованы в пользовательском драйвере?

Почитал мануал, там есть раздел касаемо SPI, но не совсем понятно как его задействовать и опять же, это касается передачи данных в дисплей, а само построение примитивов как будет работать?


За работу с SPI/параллельными дисплеями в STemWin отвечает драйвер FlexColor. Поищите в доке, поддерживает ли он Ваш дисп. Я лично его там не нашёл.
Если не найдёте, то про те функции можете смело забыть и писать свой кастомный драйвер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 15:25 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
hd44780 писал(а):
Если не найдёте, то про те функции можете смело забыть и писать свой кастомный драйвер.

Хорошо, но с чего начать написание? Я так понял там есть GUIDRV_Template.c и его вроде бы нужно адаптировать?
Но как тогда сказать библиотеке чтобы она использовала именно его? Просто добавить в проект?

И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 19 апр 2018, 19:54 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1716
Откуда: Донецк, ДНР
Elrandir писал(а):
Хорошо, но с чего начать написание? Я так понял там есть GUIDRV_Template.c и его вроде бы нужно адаптировать?
Но как тогда сказать библиотеке чтобы она использовала именно его? Просто добавить в проект?

И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?


Да, по сути на бзе GUIDRV_Template.c.
Но я приложил вам свой рабочий кастомный драйвер для SSD1963. Можете ознакомиться/передрать что-то :).
flexColor поддерживает SSD1963, но он у меня работал хреново и неустойчиво, возможно из-за плохой разводки той платы. Поэтому я написал свой. Может криво, зато пахало :)))
С ч.б дисплеями я не работал вообще, по ним не подскажу.
В моём примере сам драйвер и прослойка для STemWinа - LCDConf.c. Там есть нюанс - в функции _InitLcdController прослойки надо инитить дисплей, но я там этого не делаю, т.к. у меня он инитился раньше, ещё до запуска гуя.

Elrandir писал(а):
И получится библиотека сможет выполнять только те функции, что есть в этом драйвере? Или она более сложные стоит на их базе?

Там, по сути, только вывод точек, вертикальных/горизонтальных линий и заливка прямоугольников цветом. Остальное она вроде сама компонует.


Вложения:
Custom.zip [43.53 Кб]
Скачиваний: 13
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 23 апр 2018, 13:21 
Здравствуйте!

Зарегистрирован: 19 апр 2018, 12:40
Сообщения: 3
hd44780 писал(а):
Но я приложил вам свой рабочий кастомный драйвер для SSD1963. Можете ознакомиться/передрать что-то :).

Большое спасибо за ответ и пример, буду пробовать)). Если что - отпишусь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 09:08 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 565
При компилирование в iar8.xx выдается предупреждение iar Warning[Lt009]: Inconsistent wchar_t size. IAR изменили размер wchar_t , в версии 7.xx wchar_t был 2 байта в 8.xx стал 4 байта.
Не добавили опции изменения размера wchar_t в линковщики IAR8.xx.
Предлагаемое решение IAR отключить предупреждение на свой страх и риск или пересобрать библиотеки
Show


Вот у меня возник вопрос есть ли библиотеки для IAR8.xx от emwin?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 09:42 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Господа, вы ерундой занимаетесь, вы в курсе?
Нормального интерфейса вы все равно не напишите, иначе придется убить кучу времени.

Пользователи уже привыкли к качественному GUI с тачскринами и проч. плюшками, будут плеваться на ваши поделки.
Обсуждалось уже неоднократно, оставьте на микроконтроллере только низкоуровневые железячно-исполнительные функции(ногодрыг, опрос датчиков и проч)
Выносите все функции мониторинга, контроля и управления через UART(via Bluetooth, WIFi, wire) на мобильники и компы.

тем более с BlackBox это стало делать очень просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:04 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2098
Ой, да че ты понимаешь, сидя в своем Китае? Ясен пень, что китайцы готовы "за еду" написать любые плюшки для ваших малиновых смузи-интерфейсов.
Но зачастую (даже очень часто!) пользователям нахрен не нужны красявые слайд-эффекты. Вы станок с ЧПУ видали? Нах там ваши няшные плюшки, вместе с блюпупом. Няшности только отвлекают и затрудняют работу. Нет, ну есть Smart Factory, но там мобильники - только для биг-босса отчеты доставляют в виде няшных графиков о том, сколько тонн чугуна наплавил завод в закрома родины. А манагеры помельче наблюдуют со специализированных планшетов в фирмовых корпусах с резиновыми уголками и ручками по краям. Но обычный персонал трудится возле стационарных постов, на стационарных и вовсе не няшных панелях, у которых большинство кнопок - физические, а не экранные. Так что не надо свои китайские хотелки распространять на нормальных людей. Ты там в своем китае уже вконец китаяйцизировался, как еще глаза то не поускоглазили.

Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:23 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Пользователю нужен удобный интерфейс, за который он готов платить.
Разработчику нужен удобный, легко расширяемый инструмент для создания таких интерфейсов.

Тут с клепанием формочек на JAVA под андроид с его автоматической сборкой мусора, многопоточностью и поддержкой мощнейшей IDE, бывает не все очевидно.

Писать интерфейс на Си.... мдяяя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:31 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
Цитата:
Изображение


вот, правильно! вынесли интерфейс управления на мобильное устройство.
правда старье, под виндоус мобайл помоему... и стоит около $3000

сейчас устройства на андроиде подобного уровня защиты можно купить за $500


Последний раз редактировалось cheblin 01 май 2018, 10:40, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:38 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2098
Во-первых, планшеты во многом не для управления, а для показомеров - показывать шефу как круто работает его завод. Планшеты чаще всего только собирают инфу и показуют еёйную. Во-вторых, для серьезных заводов - и $3000 - не вопрос. Если надо - значит будет.
А с китайской мобилы Ксаоми (или как ее кличут) по няшному ванильному интерфейсу запустить даже циркулярную пилу - это срань господня. а если не сработает? нет, ну ево нах! Нет, в Китае ты можешь делать как угодно - там пох, одним китайцем больше, одним меньше, всё равно. Но у нас или в Европе такой пофигизм не проканает. Кто поручится за безопасность Андроида? У него есть сертификат безопасности? А мобила Ксаоми сертифицирована для управления производственными процессами?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 01 май 2018, 10:50 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 1175
Откуда: Китай, Пекин
реально пофиг, что именно используется для отображения информации будь это PC, планшет или мобильник...
мой пойнт в том что микроконтроллеру - микроконтролево, а все остальное на вынос.
dixi


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1224 ]  На страницу Пред.  1 ... 45, 46, 47, 48, 49  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB