Easyelectronics.ru

Электроника для всех
Текущее время: 04 июл 2020, 15:14

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 1259 ]  На страницу Пред.  1 ... 36, 37, 38, 39, 40, 41, 42 ... 51  След.
Автор Сообщение
 Заголовок сообщения: Re: STemWin на STM32F4. Первый опыт. Вопросы.
СообщениеДобавлено: 09 мар 2017, 14:23 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Девайс получает команды по usb и с меню тачскрина. При получение команды с usb должен (не важно на какой странице находиться) перейти на соответствующее окно. Получается очень не удобно в каждом окно заводить таймер.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
Можете по приходу Ваших событий рассылать во все открытые окна сообщения через WM_SendMessage. Если окну интересно каждое конкретное сообщение - оно его обработает в соответствующей ветке диалоговой функции, если нет - пропустит мимо ушей. От этого ничего не сломается.
Это вообще стандартный приём. В той же винде окна никогда не опрашивают мышу/клаву/..., они просто ловят от винды соответствующие сообщения и чего-то там делают по ним.
Я у себя тоже реализовал похожую схему без всяких таймеров. Таймер нужен для опроса чего-то изначально пассивного. Всё остальное можно реализовать без таймера.

Правда, у меня есть подозрения, что при использовании WM_SendMessage начинается большой расход стека, но детально я не исследовал, могу и ошибаться.


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

Зарегистрирован: 21 сен 2016, 01:28
Сообщения: 35
hd44780 писал(а):
logbingo, если Вы мне, то я не понял вопроса. USB девайсами я вообще почти не занимался.
Странно что не занимались, на этом же форуме видел ваши посты по поводу CDC режима юсб. Суть проблеммы есть либа готовая от STM все на ней все делают, но она глючная, а именно передает только размер буфера что в ней задается и дальше непонятно что делать, ведь статус передачи в ней не отследить, а все примеры сводятся к передачи слова хелоу ворд...

Вот пример, я передаю 2048 байт без проблем но дальше бред, что только не вытаскивал из нее , какие только переменные не проверял толку нет. Вот задержку вставляю все передается, но это ужас же, должна быть потоковая сплошная передача. И еще кроме этого, если во время передачи выдернуть юсб МК виснет на глухо, да и если делать проверку на соединение а терминал никакой не запускать тоже делов нет, виснет. я пробовал эту библиотеку и раньше на 103 Мк и тоже плевался, и заменил другой но с RTOS, сейчас не хочу RTOS мне он не нужен ресурсы переводить, но блин что за либо с ЮСБ и нет ничего нормального кроме "хеллоу ворд" нерабочих при настоящей эксплуатации.

Код:
         if (TM_USB_VCP_GetStatus() == TM_USB_VCP_CONNECTED) {           
          /* Send data  */
                uint32_t count;
                uint32_t temp;
               while (count<ADC1_MAX*2){   
            //if (USB_Tx_State==0){         //(APP_Rx_ptr_in==0)&&(APP_Rx_ptr_out==0)&&(APP_Rx_length==0)   
                    temp=VCP_DataTx(&ADC_STM32_Buff_Interleaved_mode[count], 2048);
                    if (temp==0)count+=2048;
                    else {
                        beep(5);
                        if (temp!=1)count+=temp;
                     }
                  //}
                  //_delay_ms(25);
               }
         }


Последний раз редактировалось elisey 10 мар 2017, 22:47, всего редактировалось 1 раз.
Выкладывать код нужно с использованием тегов [code]


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
У void WM_SendMessage(WM_HWIN hWin, WM_MESSAGE * pMsg) есть параметры hWin и * pMsg от куда их взять?


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
zhilenkov писал(а):
У void WM_SendMessage(WM_HWIN hWin, WM_MESSAGE * pMsg) есть параметры hWin и * pMsg от куда их взять?


Кусок из рабочего кода:
Код:
// Отправить окнам сообщение "Накопитель изменился"
// drive_num    - номер изменившегося накопителя
// is_connected - true/false - добавлен/удалён
void SendDriveNotification ( uint8_t drive_num, bool is_connected )
{
   WM_MESSAGE msg;

   // Если окна нет, ничего не делаем
   if ( hWinForMessage == WM_HWIN_NULL )
      return;

   msg.MsgId = WM_MSG_DRIVE_CHANGED;
   msg.Data.v = drive_num;
   if ( is_connected )
      msg.Data.v |= 0x0100;
   WM_SendMessage ( hWinForMessage, &msg );
} // SendDriveNotification

Хэндлы нужных (либо всех) окон вы должны сами где-то хранить. Этого у меня пока нету, дать что-то готовое не могу.
Если параметры передавать не нужно, можете использовать WM_SendMessageNoPara(). У неё второй параметр - просто код сообщения - то, что здесь кладётся в msg.MsgId.
При сами функции и про ограничения на код сообщеня читайте в доке.

logbingo, я с VCP на F4Discovery игрался в начале 2013 года. Куба в те времена вообще не было, да и старые некубовые либы с тех пор обновлялись раза 3. Потом я этим не занимался. Недавно делал Generic HID device на F103, сам девайс заработал, но та поделка не пошла, забросил я её :D
Про VCP, я только туманно помню, что не мог отослать больше 64 (кажется) байт. Но в какую сторону, я уже забыл :D.
Меньше 64 проходили без каких-либо проблем.


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
WM_SendMessageNoPara() В какое место окна шлет данные? В окне нужен какой то специальный обработчик для WM_SendMessageNoPara()?


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

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


В стандартную оконную процедуру.
Для моего сообщения WM_MSG_DRIVE_CHANGED (кидал пример выше), я пишу:

Код:
      case WM_MSG_DRIVE_CHANGED:   // Накопитель добавился/исчез
         // Извлечение номера накопителя
         drive_num = pMsg->Data.v & 0x00FF;
         if ( pMsg->Data.v & 0x0100 )
         { // накопитель подключен
         } // if
         else
         { // USB накопитель отключен
         } // else
                break;


Этот case на том же уровне, что и WM_INIT_DIALOG.


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

Зарегистрирован: 13 мар 2012, 15:24
Сообщения: 70
Откуда: Татарстан
Подскажите кто понимает. Я создал два отдельных окна с двумя кнопками. При нажатии кнопку создается второе окно и при нажатии на нем кнопки создается первое. Но как я понял создавая кучу окон заполняется память и перестает работать как правильно открыть второе окно уничтожив первое?


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

Зарегистрирован: 20 июл 2012, 00:10
Сообщения: 73
Откуда: Макеевка
Позволю себе процитировать, а вообще курите тему, на последних 5 страницах инфы много.
hd44780 писал(а):
warder, Вы создаёте окно командой GUI_CreateDialogBox, закрываете его GUI_EndDialog. А почему Вы его не удаляете?
GUI_EndDialog только закрывает окно, но не удаляет его.
Вы должны сделать нечто типа такого:

Код:
      // Вызов окна конвертирования
      hWin = CreateBMPConvertDLG ( );
      retCode = GUI_ExecCreatedDialog ( hWin );
      WM_DeleteWindow ( hWin );


Главное здесь - WM_DeleteWindow. Она удаляет окно и освобождает всю занимаемую память.
Т.е. на каждый вызов GUI_CreateDialogBox должен быть WM_DeleteWindow. Иначе Вы будете постоянно терять память.


hd44780 писал(а):
Сейчас библиотека STemWin532_CM4_OS_GCC.a (FreeRTOS, процы F439/F39).
Окно вызываю так:
Код:
   WM_HWIN hWin;
   int retCode;
   uint8_t day_of_week;

   hWin = CreateOptionDLG ( );
   retCode = GUI_ExecCreatedDialog ( hWin );
   WM_DeleteWindow ( hWin );

GUI_ExecCreatedDialog -- вот это не возвращается, пока диалог не закроется.

CreateOptionDLG такой же, как его генерит GUI билдер:
Код:
WM_HWIN CreateOptionDLG ( void )
{
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
} // CreateOptionDLG




А у меня вопрос следующего характера.
Я использую FreeRTOS в своем проекте, в одном потоке у меня сделан большой switch для переключения между окнами, вызов окон произвожу через GUI_ExecCreatedDialog ( hWin );
Вчера сделал профайлинг процессов, т.к. после прикручивания утилиты по оценке загруженности проца увидел 100 % загрузку. Профайлиг сделал через Traceanalyzer, он показал, что все время отъедает задача по отрисовке графики, не могу понять, что не так?
Сам EmWin настроен на работу с ОС, т.е. я использую GUI_X_OS.c
Никто не подскажет куда копнуть?


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
Nikopol_86 писал(а):
А у меня вопрос следующего характера.
Я использую FreeRTOS в своем проекте, в одном потоке у меня сделан большой switch для переключения между окнами, вызов окон произвожу через GUI_ExecCreatedDialog ( hWin );
Вчера сделал профайлинг процессов, т.к. после прикручивания утилиты по оценке загруженности проца увидел 100 % загрузку. Профайлиг сделал через Traceanalyzer, он показал, что все время отъедает задача по отрисовке графики, не могу понять, что не так?
Сам EmWin настроен на работу с ОС, т.е. я использую GUI_X_OS.c
Никто не подскажет куда копнуть?


Если дисп типа SSD1963 на FSMC, то это нормально. И, соответственно, оценка загрузки проца - фигня полная.
Единственное, чего я не знаю - какая будет загрузка при использовании драйвера FlexColor. Я им почти не пользовался, т.к., наверное, из-за плохой разводки моей старой платы дисп с использованием FlexColor очень часто белеет и виснет.
А с использованием кастомного драйвера всё пашет очень стабильно, но загрузка проца - 100% и меняется очень редко.

Мой вывод о влиянии драйвера дисплея основан на том, что когда я перенёс всё приложение на LTDC (LIN драйвер, встроенный в STemWin), загрузка проца стала порядка 1-2%, независимо от того, какие окна у меня открыты.
Да и сама загрузка стала адекватно меняться в соответствии с тем, что делает проц. Например, при втыкании USB мышки/флэшки она кратковременно подскакивает (хост детектит девайс), потом возвращается обратно.
Всё остальное - CPU, SDRAM, алгоритмы одни и те же.
Кардинальное отличие старого изделия от нового - только LTDC. Ну и SDRAM на старой плате работала на 66МГц, на новой - 90 MHZ (опять же влияние разводки и 4 слоёв вместо 2). Но я не склонен думать, что изменение частоты памяти так сильно влияет на загрузку CPU. Не знаю ...

Я вообще сперва думал, что сам способ измерения загрузки некорректен. До тех пор, пока у меня не появилась возможность использовать LTDC :D .

Других данных у меня нет.

Но исходя из вышесказанного - если хотите каким-либо образом использовать загрузку CPU - переходите на LTDC. Ну или подбирайте другую оболочку вместо STemWin :D .


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

Зарегистрирован: 20 июл 2012, 00:10
Сообщения: 73
Откуда: Макеевка
Спасибо за ответ.
Вы совершенно верно определили, что у меня контроллер SSD1963, драйвер FlexColor, работа через FSMC без DMA.
Ход Ваших мыслей понятен, но мне интересно было что происходит в моем случае, переход на LTDC пока что не рассматриваю, девайс в количестве 2 шт.
В дальнейшем учту Ваш опыт.


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Подскажите как можно убрать со Slider фокус (рамку во круг когда коснешься)?


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
Переставить фокус на какой-то другой контрол (например, кнопку ОК)?


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Почему-то когда задаю цвет кнопки BUTTON_SetBkColor(hItem,BUTTON_CI_DISABLED ,GUI_RED); не чего не происходит а когда задаю цвет текста BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED ,GUI_YELLOW); все работает.
Show


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
zhilenkov писал(а):
Почему-то когда задаю цвет кнопки BUTTON_SetBkColor(hItem,BUTTON_CI_DISABLED ,GUI_RED); не чего не происходит


а Вы сделали WM_DisableWindow (hItem)?
BUTTON_CI_DISABLED -- цвет для задизейбленой кнопки. Если не ошибаюсь :)


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Цитата:
а Вы сделали WM_DisableWindow (hItem)
Нет. Но я не понимаю для чего это надо ? Если сделать так
Show
то кнопка перестает работать.


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
Дока гласит:

BUTTON_CI_DISABLED Sets the color to be used when button is disabled.

Т.е. этот цвет используется, когда вы сделаете кнопке disable. Да, она перестанет работать, но при этом будет отрисована указанным цветом.
А вы как хотите?


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
я хочу чтобы цвет кнопки при нажатие был красным, а при отпуске желтым. Так тоже не работает
Show


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
а так:
Код:
BUTTON_SetBkColor(hItem,BUTTON_CI_PRESSED ,GUI_RED);
BUTTON_SetBkColor(hItem,BUTTON_CI_UNPRESSED,GUI_YELLOW);

?


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Нет не работает. Текст меняет цвет, а кнопка не хочет. Окна рисую с помощью guibilder. И что самое интересное SLIDER_SetFocusColor(hItem,GUI_WHITE); тоже не работает.


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

Зарегистрирован: 20 июн 2012, 12:56
Сообщения: 61
если используете версию старше 5.24, то по умолчанию включены скины на виджеты. При скинах обработчик изменения цвета другой. Выход:
1. Отключить скины глобально
2. Отключить скин только для данной кнопки
3. Использовать обработчик для скинов, см. примеры где используются скины.


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
написал для skin
Show
, а фокус как был черным так и остался.
Для кнопки цвета работают. Почитал тему и так и не понял как правильно закрывать окно и переходить в новое ?
Делаю так
Show


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

Зарегистрирован: 20 июл 2012, 00:10
Сообщения: 73
Откуда: Макеевка
zhilenkov писал(а):
написал для skin
Show
, а фокус как был черным так и остался.


А разве вместо SLIDER_GetSkinFlexProps(&Props,SLIDER_SKINFLEX_PI_PRESSED); не должно быть SLIDER_SetSkinFlexProps(&Props,SLIDER_SKINFLEX_PI_PRESSED); в третьей строчке кода?


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

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 790
Да затупил. Хочу еще раз уточнить, как правильно закрывать окно и переходить в новое? Делаю так, но не знаю правильно ли это?
Show


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

Зарегистрирован: 23 янв 2013, 12:33
Сообщения: 1791
Откуда: Донецк, ДНР
Да, правильно.
Только я GUI_EndDialog(pMsg->hWin, 0); делаю в оконной функции, а WM_Delete вне её. Но критично это или нет, не знаю.
В итоге вызов/удаление каждого окна у меня выглядит так:
Код:
   hWin = CreateFileBrowserDLG (  &hWinForMessage, (char *)pImgExtensions, (char *)title, CalcSizeInMM );
   retCode = GUI_ExecCreatedDialog ( hWin );
   WM_DeleteWindow ( hWin );

GUI_EndDialog ( hDlg, retCode ); здесь не видна, т.к. она сидит в оконной функции.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1259 ]  На страницу Пред.  1 ... 36, 37, 38, 39, 40, 41, 42 ... 51  След.


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


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

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


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

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

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