Easyelectronics.ru

Электроника для всех
Текущее время: 25 май 2020, 22:21

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 1252 ]  На страницу Пред.  1 ... 42, 43, 44, 45, 46, 47, 48 ... 51  След.
Автор Сообщение
 Заголовок сообщения: 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
Сообщения: 790
Собираю проект 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
Сообщения: 1789
Откуда: Донецк, ДНР
zhilenkov писал(а):
Скажите пожалуйста при обновление GUI старые функции работают, или нужно все заново переписывать?

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

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

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


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

Зарегистрирован: 08 апр 2014, 16:01
Сообщения: 53
Откуда: 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
Сообщения: 790
Столкнулся с проблемой вылетает функция GUI_DEVICE_CreateAndLink в HardFault_Handler. Подскажите в чем может быть дело?


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

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


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

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


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2870
Такой вопрос. Есть 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
Сообщения: 1789
Откуда: Донецк, ДНР
Таймер где? в основном окне или на станицах?
Я создаю таймер на странице при получении страницей фокуса (WM_NOTIFICATION_GOT_FOCUS), а в событии WM_NOTIFICATION_LOST_FOCUS таймер убиваю.
Попробуйте у себя что-то подобное.


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2870
Таймера на каждой из страниц. Попробовал через 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
Сообщения: 1789
Откуда: Донецк, ДНР
Вот повыдирал куски из своего проекта:
Код:
// Таймер опроса статуса модуля
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
Сообщения: 2870
Я примерно также как вы пытаюсь пока отловиться все эти 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
Сообщения: 2870
Как правильнее сделать следующее - вы вызове допустим 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
Сообщения: 1789
Откуда: Донецк, ДНР
Hold писал(а):
Как сделать так, чтобы значение обновлялось, однако не срабатывало событие WM_NOTIFICATION_VALUE_CHANGED ?


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


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

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


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

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


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


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

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


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

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


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


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

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


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

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


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

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2870
Да, все работает. Функция тупо на каждый байт вызывает коллбэк, адрес которого передаём параметром, куда передаёт следующий байт 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
Сообщения: 117
Hold писал(а):
Да, все работает. Функция тупо на каждый байт вызывает коллбэк, адрес которого передаём параметром, куда передаёт следующий байт bmp файла. В этом коллбэке можно забить поступающими байтами свой буфер в SDRAM и затем его сразу записать. Скрин экрана 800x480 RGB565 весит 750кБ. Однако функция медленная, и видимо она останавливает весь GUI, чтобы безопасно передать все байты не боясь перерисовки.

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


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

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


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

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

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


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

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


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


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


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

Сейчас этот форум просматривают: Jorchick, serglg


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

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

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