ccschen 发表于 2024-4-4 22:47:23

有不有GUIX的实体按键的例程?

如题。

eric2013 发表于 2024-4-5 10:00:41

这个里面摄像头的例子,看DMCI中断的消息通知方式即可,实体按键也是用的这个方式。

https://www.armbbs.cn/forum.php?mod=viewthread&tid=98429&extra=page%3D1

ccschen 发表于 2024-4-5 16:02:58

eric2013 发表于 2024-4-5 10:00
这个里面摄像头的例子,看DMCI中断的消息通知方式即可,实体按键也是用的这个方式。

https://www.armbbs ...

GUIX, 屏幕上能不能分区域显示多个window?几个窗口分区显示在一个界面上。

eric2013 发表于 2024-4-6 08:10:16

ccschen 发表于 2024-4-5 16:02
GUIX, 屏幕上能不能分区域显示多个window?几个窗口分区显示在一个界面上。

可以的,句柄不同。

多窗口创建可以使用GUIX Studio完成。

ccschen 发表于 2024-4-6 23:33:50

eric2013 发表于 2024-4-6 08:10
可以的,句柄不同。

多窗口创建可以使用GUIX Studio完成。

        gx_studio_named_widget_create("window_root", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);
        gx_studio_named_widget_create("window_language", (GX_WIDGET *)GX_NULL, (GX_WIDGET **)GX_NULL);       
        gx_widget_attach((GX_WIDGET *)root, &window_language);

/* 显示根窗口 */
        gx_widget_show(root);
/* 启动GUIX */
        gx_system_start();

//定时器到了后,删除启动画面,然后显示状态条
        gx_widget_delete((GX_WIDGET **)&window_language);
        gx_studio_named_widget_create("window_status_bar", (GX_WIDGET *)root,(GX_WIDGET **)GX_NULL);       
        gx_widget_attach((GX_WIDGET *)root, &window_status_bar);

结果状态条不显示。

UI打算这样做,先启动画面,启动画面显示完后,启动画面窗口就删除。然后进入主界面,主界面由桌面和状态条两个窗口并列显示。

eric2013 发表于 2024-4-7 08:01:50

ccschen 发表于 2024-4-6 23:33
        gx_studio_named_widget_create("window_root", (GX_WIDGET *)root, (GX_WIDGET ** ...

这种的切换效果,完全可以使用GUIX Studio的Screen Flow设计正常后,添加到你的工程。

ccschen 发表于 2024-4-7 09:09:19

eric2013 发表于 2024-4-7 08:01
这种的切换效果,完全可以使用GUIX Studio的Screen Flow设计正常后,添加到你的工程。

设计器能模拟物理按键操作?物理按键不是键盘这种规范的ASCII码值的。

eric2013 发表于 2024-4-8 07:55:18

ccschen 发表于 2024-4-7 09:09
设计器能模拟物理按键操作?物理按键不是键盘这种规范的ASCII码值的。

设计的时候用GUIX Studio,设计完毕移植到工程里面,将其修改为按键触发。

ccschen 发表于 2024-4-14 22:48:52

eric2013 发表于 2024-4-8 07:55
设计的时候用GUIX Studio,设计完毕移植到工程里面,将其修改为按键触发。

按键检测不太灵光,很多时候不响应。。。FREERTOS里就没这种情况,看了寄存器,IO口确实电平变了。

void button_key_thread_entry(ULONG thread_input)
{
        (void)thread_input;
       
        user_button_init();
        while (1)
        {
                flex_button_scan();
                tx_thread_sleep(MS_TO_TICK(10));
        }       
}

miss-you 发表于 2024-4-15 11:21:35

#include <rtthread.h>
#include "include.h"

#define DBG_TAG "options_menu"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

static rt_uint8_t options_now = GX_PIXELMAP_ID_OPTIONS_CHECK;

static void options_menu_changed(rt_uint8_t mode)
{
    if (mode)
      options_now++;
    else
      options_now--;

    if (options_now > GX_PIXELMAP_ID_OPTIONS_SET)
      options_now = GX_PIXELMAP_ID_OPTIONS_CHECK;
    else if (options_now < GX_PIXELMAP_ID_OPTIONS_CHECK)
      options_now = GX_PIXELMAP_ID_OPTIONS_SET;

    gx_icon_pixelmap_set(&window_menu.window_menu_options_icon, options_now, GX_NULL);
    gx_prompt_text_id_set(&window_menu.window_menu_menu_text, options_now - GX_PIXELMAP_ID_OPTIONS_CHECK + 1);
}

static void task_options_menu_key_event_handler(void *arg)
{
    flex_button_t *btn = (flex_button_t *)arg;
    /********************* btn1 ***********************/
    if (btn->id == USER_BUTTON_1)
    {
      switch (btn->event)
      {
      case FLEX_BTN_PRESS_SHORT_UP:
            options_menu_changed(0);
            break;
      }
    }

    /********************* btn2 ***********************/
    else if (btn->id == USER_BUTTON_2)
    {
      if (btn->event == FLEX_BTN_PRESS_SHORT_UP)
      {
            switch (options_now)
            {
            case GX_PIXELMAP_ID_OPTIONS_CHECK:
                user_system.state = STATE_MEASURING;
                break;

            case GX_PIXELMAP_ID_OPTIONS_LOG:
                user_system.state = STATE_LOG;
                break;

            case GX_PIXELMAP_ID_OPTIONS_SET:
                user_system.state = STATE_SET;
                break;
            }
      }
    }

    /********************* btn3 ***********************/
    else if (btn->id == USER_BUTTON_3)
    {
      switch (btn->event)
      {
      case FLEX_BTN_PRESS_SHORT_UP:
            options_menu_changed(1);
            break;
      }
    }

    default_btn_evt_cb(arg);
}

void task_options_menu(void)
{
    LOG_W("in task_options_menu...");

    window_jump((GX_WIDGET *)&window_main, GX_USER_EVENT_IN_MENU);

    button_callback_set(task_options_menu_key_event_handler);

    while (user_system.state == STATE_OPTIONS_MENU)
    {
      rt_thread_mdelay(10);
    }

    window_jump((GX_WIDGET *)&window_menu, GX_USER_EVENT_OUT_MENU);
    LOG_W("exit task_options_menu...");
}

ccschen 发表于 2024-4-15 18:17:25

miss-you 发表于 2024-4-15 11:21
#include
#include "include.h"



我那个问题是,按键检测都检测不到,打了断点,按键状态检测都不对,有时候执行得到。不知道是不是任务优先级有问题。

eric2013 发表于 2024-4-16 08:35:03

ccschen 发表于 2024-4-15 18:17
我那个问题是,按键检测都检测不到,打了断点,按键状态检测都不对,有时候执行得到。不知道是不是任务优 ...
简单的按键都检测不到,必须程序设计问题,得排查下了。

ccschen 发表于 2024-4-16 10:02:38

eric2013 发表于 2024-4-16 08:35
简单的按键都检测不到,必须程序设计问题,得排查下了。

在FREERTOS下,也是任务中加检测函数,扫描方式,然后加任务延时,好用得很,不知道THREADX下这样就不好使了

eric2013 发表于 2024-4-17 08:07:46

ccschen 发表于 2024-4-16 10:02
在FREERTOS下,也是任务中加检测函数,扫描方式,然后加任务延时,好用得很,不知道THREADX下这样就不好 ...

可以肯定,程序是有问题,这个是我们的综合模板Demo,各种外设均正常。

ThreadX全家桶所有组件综合模板发布,史上最强安全认证综合模板,稳如泰山,含AC5,AC6,IAR和GCC(2023-12-23)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=103554&fromuid=58
(出处: 硬汉嵌入式论坛)

ccschen 发表于 2024-4-17 20:57:57

eric2013 发表于 2024-4-17 08:07
可以肯定,程序是有问题,这个是我们的综合模板Demo,各种外设均正常。

ThreadX全家桶所有组件综合模 ...

也可能是优先级问题,我看综合DEMO是7级,我这程序都默认是10级。空了调整下。是不是加了休眠函数的问题。
页: [1]
查看完整版本: 有不有GUIX的实体按键的例程?