Easyelectronics.ru

Электроника для всех
Текущее время: 18 фев 2019, 07:24

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




Начать новую тему Ответить на тему  [ Сообщений: 1234 ]  На страницу Пред.  1 ... 42, 43, 44, 45, 46, 47, 48 ... 50  След.
Автор Сообщение
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 05 окт 2017, 13:06 
Заглядывает иногда

Зарегистрирован: 12 окт 2011, 09:34
Сообщения: 122
На простом GUI проверил. После инициализации и отключения CRC продолжает работать. Спасибо


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 667
Собираю проект GUI и столкнулся с проблемой.
При сборке проекта появилась ошибка Error[Pe020]: identifier "GUI_DEVICE_API" is undefined \inc_emWin\GUIDRV_Lin.h 48.
Подскажите в чем дело? Раньше у меня такой ошибки не было.
Нашел проблему.
Скажите пожалуйста при обновление GUI старые функции работают, или нужно все заново переписывать? Для обновления GUI какие нужно заменить библиотеки?


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
zhilenkov писал(а):
Скажите пожалуйста при обновление GUI старые функции работают, или нужно все заново переписывать?

Переписывать не нужно, всё работает в 99% случаев. При переходе на последнюю 5.40 проблемы заметил только со скинами (знакомый использовал на предыдущей 5.32). Компилятор на что-то ругался (там типа аргументы где-то поменялись). Пока не разбирались, просто выкинули их (оставили на потом).

zhilenkov писал(а):
Для обновления GUI какие нужно заменить библиотеки?

либу+все относящиеся к ней .h файлы. Ну и полная перекомпиляция всего проекта.


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

Зарегистрирован: 08 апр 2014, 16:01
Сообщения: 51
Откуда: Belarus
Не могу найти причину потери фокуса и игнорирование EMwin (эпизодичное) нажатия кнопки энкодера(хотя параметры передает ему)
При этом нажатие от тачскрина обрабатывается нормально
допустим хожу между 2-мя страницами .

страницы создаю таким образом

Прошу прощения за кракозябры, с кейла так копируется код.

Код:
              hWin=Createfrm_main();
         while(open_page)
         {
         GUI_Delay(100);                  
         encoder_menu_encoder1(hWin,(GUI_WIDGET_CREATE_INFO*)_aDialogCreate_main,1,5);   обрабатываю  хождение энкодером      
         }
                WM_DeleteWindow(hWin);// удаляю страницу
                Createfrm_system_settings_main();

void encoder_menu_encoder1(WM_HWIN hWin,GUI_WIDGET_CREATE_INFO *DialogCreate,uint8_t start_count_menu,uint8_t end_count_menu)
{
    WM_HWIN hitem;
    GUI_PID_STATE TS_State;
      int return_encoder=0;   
   
      return_encoder=Get_Enc_value(start_count_menu,end_count_menu);//ïîëó÷àåì çíà÷åíèå ñ ýíêîäåðà ñ íàëîæåíèåì ôèëüòðà

      while(WM_IsWindow(hWin)==0){}//ïðîâåðÿåì äîñòóïíîñòü îêíà
      
      hitem=WM_GetDialogItem(hWin,DialogCreate[return_encoder].Id);// ïîëó÷àåì äåñêðèïíîð ýëåìåíòà
      WM_SetFocus(hitem);//ïåðåìåøàåì ôîêóñ íà íåãî

      if(encoder_button_pressed==true)//ïðîâåðÿåì íàæàòà ëè êíîïêà ýíêîäåðà
      {
         //ïðèñâàèâàåì êîîðäèíàòû ñåðåäèíû ýëåìåíòà
         TS_State.x =DialogCreate[return_encoder].x0+(int)DialogCreate[return_encoder].xSize/2;
         TS_State.y =DialogCreate[return_encoder].y0+(int)DialogCreate[return_encoder].ySize/2;
         TS_State.Pressed = 1;
         TS_State.Layer = 0;
         GUI_TOUCH_StoreStateEx (&TS_State);
         encoder_button_pressed=false;
      }   
}


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 667
Столкнулся с проблемой вылетает функция GUI_DEVICE_CreateAndLink в HardFault_Handler. Подскажите в чем может быть дело?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 27 окт 2017, 12:47 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 667
Оказалось проблема в плохом пропаи конденсаторов питания процессора.


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

Зарегистрирован: 08 апр 2014, 16:01
Сообщения: 51
Откуда: Belarus
проблема решилась, в нескольких формах не проследил за ID элементов(были одинаковыми на разных окнах)


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Такой вопрос. Есть MULTIPAGE, на каждой странице которого довольно увесистая страница с почти сотней виджетов, создаваемая GUI_CreateDialogBox и привязываемая к странице MULTIPAGE_AddPage. На каждой странице куча обновляемой инфы в различных виджетах, обновляются по WM_TIMER. Зараза в том, что даже на не выбранных страницах этот таймер срабатывает, что приводит к тормозам, т.к. инфы обновляется реально много, т.е. куча разных sprintf. Как более грамотно запретить работу таймера, если страница не выбрана? Сейчас на каждой странице в сообщении WM_TIMER делаю
Код:
         WM_RestartTimer(pMsg->Data.v, 1000);
         if ( !WM_IsVisible(WM_GetClientWindow(pMsg->hWin)) ) break;
                        // тут обновление данных

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


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
Таймер где? в основном окне или на станицах?
Я создаю таймер на странице при получении страницей фокуса (WM_NOTIFICATION_GOT_FOCUS), а в событии WM_NOTIFICATION_LOST_FOCUS таймер убиваю.
Попробуйте у себя что-то подобное.


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Таймера на каждой из страниц. Попробовал через WM_NOTIFICATION_GOT_FOCUS / WM_NOTIFICATION_LOST_FOCUS в callback-ах страниц, однако в эти case вообще не попадаем.
Псевдокод коллбэка страницы:
Код:
static   void _cbDialog(WM_MESSAGE * pMsg)
{
   WM_HWIN hItem;
   int     NCode;
   int     Id;

   switch (pMsg->MsgId)
   {
      case WM_INIT_DIALOG:
      case WM_NOTIFICATION_GOT_FOCUS:
      case WM_NOTIFICATION_LOST_FOCUS:
      case WM_NOTIFY_PARENT:
      case WM_TIMER:
      default:
   }
}

UPD: хотя стоп, case WM_NOTIFICATION_GOT_FOCUS это уже коды нотификации сообщения WM_NOTIFY_PARENT, но у какого объекта диалога ждать этот код?
Попробовал в case WM_NOTIFY_PARENT отлавливать любые lost/get focus. lost валятся постоянно, при переключении страниц, а вот get никогда, только при инициализации.
Либо совсем уж радикальный вариант - полностью удалять диалог при переключении страницы MULTIPAGE и заново создавать при возврате, хотя тогда надо думать как сохранять инфу в некоторых виджетах.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
Вот повыдирал куски из своего проекта:
Код:
// Таймер опроса статуса модуля
static WM_HTIMER hTimerStatus = GUI_HMEM_NULL;

static bool isInfoPageCreated;
..................

// Callback вкладки "Информация о ES8266"
static void _cbDialogESP8266Info ( WM_MESSAGE *pMsg )
{
  WM_HWIN hDlg, hItem, hItem1;
  int NCode;

  hDlg = pMsg -> hWin;
  switch ( pMsg -> MsgId )
  {
     case WM_INIT_DIALOG:      // Инициализация вкладки 29
                .............................
      // Создание таймера слежения за статусом - 1000 ms
      hTimerStatus = WM_CreateTimer ( hDlg, ID_TIMER_STATUS, 1000, 0 );
      isInfoPageCreated = true;
      break;

     case WM_TIMER:         // таймер контроля за статусом 0x0113 = 275
                   ................................
        // Перезапуск таймера
        WM_RestartTimer ( pMsg->Data.v, 1000 );
          break;

     case WM_NOTIFY_PARENT:      // 38 = уведомление от потомка
        NCode = pMsg -> Data.v;
        if ( NCode == WM_NOTIFICATION_GOT_FOCUS )
        { // фокус получен
           if ( isInfoPageCreated && hTimerStatus == GUI_HMEM_NULL )
           { //  Страница уже была инициализирована и таймера нет
              // Создание таймера слежения за статусом - 1000 ms
              hTimerStatus = WM_CreateTimer ( hDlg, ID_TIMER_STATUS, 1000, 0 );
           } // if
        } // if

        if ( NCode == WM_NOTIFICATION_LOST_FOCUS )
        {   // Фокус потерян
           if ( hTimerStatus != GUI_HMEM_NULL )
           { // Удаление таймера
              WM_DeleteTimer ( hTimerStatus );
              hTimerStatus = GUI_HMEM_NULL;
           } // if
        } // if
        break;

     default:
        WM_DefaultProc ( pMsg );
        break;
  } // switch
} // _cbDialogESP8266Info


Вроде всё ...


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Я примерно также как вы пытаюсь пока отловиться все эти lost/got, и вижу следующую картину при таком коде:
Код:
      case WM_NOTIFY_PARENT:
      {
         Id    = WM_GetId(pMsg->hWinSrc);
         NCode = pMsg->Data.v;

         if (NCode == WM_NOTIFICATION_GOT_FOCUS)
         {
               RtcPutTimeStamp();
               UsartDebugSendString((uint8_t*)"[GUI]->Page \"Info\" got focus\r\n");
         }
         if (NCode == WM_NOTIFICATION_LOST_FOCUS)
         {
               RtcPutTimeStamp();
               UsartDebugSendString((uint8_t*)"[GUI]->Page \"Info\" lost focus\r\n");
         }
                        // тут пошли обработки всех виджетов

В дебаге вижу следующее:
Нужная вкладка(2) не выбрана, изначально стоим на 0-й вкладке
Код:
17/11/14 16:21:34->[GUI]->Start                                                       // старт гуи, инициализация MULTIPAGE, который тянет инициализацию всех вкладок
17/11/14 16:21:34->[GUI]->Page "Info" got focus                                 // видим, что сработала нотификация WM_NOTIFICATION_GOT_FOCUS
17/11/14 16:21:34->[GUI]->Page "Info" lost focus
17/11/14 16:21:34->[GUI]->Page "Info" lost focus

Переключаемся на вкладку 2, видим множественные срабатывания WM_NOTIFICATION_LOST_FOCUS
Код:
17/11/14 16:21:53->[GUI]->Page "Info" lost focus
17/11/14 16:21:53->[GUI]->Page "Info" lost focus
17/11/14 16:21:53->[GUI]->Page "Info" lost focus
17/11/14 16:21:53->[GUI]->Page "Info" lost focus

Переключаемся обратно на 0-ю вкладку, страница опять теряет фокус.
Код:
17/11/14 16:22:04->[GUI]->Page "Info" lost focus
17/11/14 16:22:04->[GUI]->Page "Info" lost focus
17/11/14 16:22:04->[GUI]->Page "Info" lost focus

В итоге WM_NOTIFICATION_GOT_FOCUS срабатывает один раз при ините.
UPD: кстати, как контролируете ID виджетов в разных окнах? Дико неудобно вручную следить за ID, особенно в нагруженных страницах. Сейчас пока вручную на каждой странице добавляю фиксированное смещение, типа +100,+200, с запасом на каждую страницу, но как-то не очень красиво.


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Как правильнее сделать следующее - вы вызове допустим SPINBOX_SetValue() установка значения автоматически вызывает срабатывает WM_NOTIFY_PARENT этого виджета. Как сделать так, чтобы значение обновлялось, однако не срабатывало событие WM_NOTIFICATION_VALUE_CHANGED ? Пока видится лишь ручное выставление флага при вызове SPINBOX_SetValue() и при срабатывании WM_NOTIFY_PARENT проверять этот флаг и не выполнять функцию.
Для чего это может понадобится:
Допустим по изменению значения виджета SPINBOX вызывается пользовательская функция MyFunc(), которая пишет в переменную MyVar значение этого SPINBOX. Однако MyVar может изменится и независимо от GUI, поэтому по событию WM_TIMER мы регулярно обновляем SPINBOX значением MyVar. В случае, когда переменная обновляется вне GUI, т.е. вызывается функция MyVar(), при обновлении значения SPINBOX эта же самая функция вызывается еще раз. В принципе не критично, но не красиво.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
Hold писал(а):
Как сделать так, чтобы значение обновлялось, однако не срабатывало событие WM_NOTIFICATION_VALUE_CHANGED ?


Как по мне - то никак. Это событие и призвано оповещать приложение о подобном изменении, что оно исправно делает.
Ну а "лекарство" от этого Вы и сами уже придумали :) .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 23 ноя 2017, 15:06 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Да, уже проверил, слегка костыльно, но работает. Думал, что можно как-то отследить кто послал WM_NOTIFY_PARENT - то ли было касание тача, и срабатывание PID-уведомлений, толи просто кто-то установил значение виджета.


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

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


Нету там такого :( .


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 667
Подскажите как сделать аналоговые часы в GUI?


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
zhilenkov писал(а):
Подскажите как сделать аналоговые часы в GUI?


Аналоговые - со стрелками что-ли? Если да - посмотрите на стандартный пример "Спидометр", там рисуется какая-то стрелка с циферблатом, может найдёте что-то полезное для себя.
Пример приложил, т.к. в современных "кубовых" версиях STemWin этого примера я не видел (хотя особо сильно и не искал).


Вложения:
GUIDEMO_Speedometer.c [158.62 Кб]
Скачиваний: 268
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 05 дек 2017, 14:39 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Задумался тут, как можно сделать функцию скриншотов?
Видится следующий вариант:
1. Выделяем буфер под размер экрана, размером для формата RGB888
2. Через DMA2D копируем в этот буфер экран, попутно конвертируя цвет
3. Уже этот буфер приводим к формату bmp и сохраняем на карточку.
Возможно есть путь проще?
UPD: конечно же есть... GUI_BMP_Serialize() функция. Надо только понять, как она работает, пока не совсем понял что там за функция колбэк.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1755
Откуда: Донецк, ДНР
Я не знаю, не делал. Если сам гуй не умеет такого, то так, как Вы сказали.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 05 дек 2017, 16:35 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Да, все работает. Функция тупо на каждый байт вызывает коллбэк, адрес которого передаём параметром, куда передаёт следующий байт bmp файла. В этом коллбэке можно забить поступающими байтами свой буфер в SDRAM и затем его сразу записать. Скрин экрана 800x480 RGB565 весит 750кБ. Однако функция медленная, и видимо она останавливает весь GUI, чтобы безопасно передать все байты не боясь перерисовки.

Код:
__no_init   uint8_t   ScreenData[1*1024*1024]   __attribute__((section(".sdram")));
uint32_t    ByteToWrite = 0;

f_open(&fil, (char const*)f_name, FA_OPEN_ALWAYS | FA_WRITE);

ByteToWrite = 0;
GUI_BMP_Serialize(_WriteByte2File, NULL);
f_write(&fil, (const void*)ScreenData, ByteToWrite, NULL);
f_close(&fil);

static void _WriteByte2File(U8 Data, void * p)
{
   ScreenData[ByteToWrite++] = Data;
}


UPD: Как-то так
Изображение


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

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 114
Hold писал(а):
Да, все работает. Функция тупо на каждый байт вызывает коллбэк, адрес которого передаём параметром, куда передаёт следующий байт bmp файла. В этом коллбэке можно забить поступающими байтами свой буфер в SDRAM и затем его сразу записать. Скрин экрана 800x480 RGB565 весит 750кБ. Однако функция медленная, и видимо она останавливает весь GUI, чтобы безопасно передать все байты не боясь перерисовки.

Я копировал экран в буферную зону SDRAM, затем формировал bmp файл, приаттачивая заголовок и разворачивая буфер.


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2746
Не осталось примера кода? Интересует сравнение быстродействия.


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

Зарегистрирован: 17 апр 2013, 21:00
Сообщения: 114
Hold писал(а):
Не осталось примера кода? Интересует сравнение быстродействия.

Конечно осталось.
Show


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

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1626
Код конечно хорошо, но внешний вид удручает.


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

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


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

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


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

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

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