硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1873|回复: 31
收起左侧

[GUI] 请教下各位大佬捣鼓lvgl,使用 gui guider 搞的 label 控件,在控件上显示rtc时间工作一会就出现卡死

  [复制链接]

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
发表于 2024-10-11 09:41:44 | 显示全部楼层 |阅读模式



使用 label 控件

请教下各位大佬捣鼓lvgl,使用 gui guider 搞的控件,在控件上显示rtc时间,工作一会就出现卡死

如果不动态显示 rtc 时间, 工作完全正常,也不会出现卡死

这是什么 原因造成的呀 ??





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-10-11 09:53:57 | 显示全部楼层
帮顶,没用过这款Builder
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-11 11:00:03 | 显示全部楼层
eric2013 发表于 2024-10-11 09:53
帮顶,没用过这款Builder

这个就是 nxp 出品的

是专门 真对  lvgl 的图形界面

GUI-Guider-1.8.1-GA


相当于 guix  studio 功能

回复

使用道具 举报

0

主题

273

回帖

273

积分

高级会员

积分
273
发表于 2024-10-11 11:32:12 | 显示全部楼层
你是怎么刷新RTC时间的?不要在多个任务中操作GUI
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-10-12 08:35:51 | 显示全部楼层
hpdell 发表于 2024-10-11 11:00
这个就是 nxp 出品的

是专门 真对  lvgl 的图形界面

这个软件我用过,就是没有研究过。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 09:22:57 | 显示全部楼层
本帖最后由 hpdell 于 2024-10-12 09:25 编辑
regbbs 发表于 2024-10-11 11:32
你是怎么刷新RTC时间的?不要在多个任务中操作GUI

__ALIGN_4BYTES (static char char_buff[256]);


lvgl-rtc-3.png


lvgl-rtc-2.png



lvgl-rtc.png



我是在 一个任务里面调用的,

我吧 screen_main_show 放在 其他任务里面运行也是一样的 ( 当然此时这个 AppTaskGui 里面的  screen_main_show 就会屏蔽)

只要不调用 screen_main_show 这个函数那么系统就不会出现卡死



回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 09:24:15 | 显示全部楼层
本帖最后由 hpdell 于 2024-10-12 10:16 编辑
eric2013 发表于 2024-10-12 08:35
这个软件我用过,就是没有研究过。

据说这个 gui guider 很牛逼呀, 大神有空了搞搞看,保证你一搞就会爱上忘不了哟

只是目前有些功能我不太会使用哟




回复

使用道具 举报

3

主题

11

回帖

20

积分

新手上路

积分
20
发表于 2024-10-12 09:48:47 | 显示全部楼层
这个是可以用于任意MCU的LVGL吗?还是只能基于NXP的芯片使用?
回复

使用道具 举报

5

主题

81

回帖

96

积分

初级会员

积分
96
发表于 2024-10-12 09:50:23 | 显示全部楼层
TechDP 发表于 2024-10-12 09:48
这个是可以用于任意MCU的LVGL吗?还是只能基于NXP的芯片使用?

任意的MCU,它只是负责生成UI
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115490
QQ
发表于 2024-10-12 10:18:50 | 显示全部楼层
hpdell 发表于 2024-10-12 09:24
据说这个 gui guider 很牛逼呀, 大神有空了搞搞看,保证你一搞就会爱上忘不了哟

只是目前有些功能我 ...

早期版本我测评后,容易死机。现在的版本没有测试过了。

各种GUIBuilder体验TouchGFX,AppWizard,GUIX Studio,Embedded Wizard,AWTK,柿饼UI,LVGL,Qt fot MCU等(2021-12-21)
https://www.armbbs.cn/forum.php? ... 0213&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 10:19:12 | 显示全部楼层
本帖最后由 hpdell 于 2024-10-12 10:25 编辑
TechDP 发表于 2024-10-12 09:48
这个是可以用于任意MCU的LVGL吗?还是只能基于NXP的芯片使用?

没有平台限制, 只需搞好 底层驱动接口的驱动就可以了

如果想用在 h7 上,貌似 安大神 有提供例程


lvgl-img.png

目前有很多功能还不太会用,目前只能算是基础入门了



回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 10:22:44 | 显示全部楼层
eric2013 发表于 2024-10-12 10:18
早期版本我测评后,容易死机。现在的版本没有测试过了。

各种GUIBuilder体验TouchGFX,AppWizard,GUI ...

现在貌似这个 GUI-Guider-1.8.1-GA 这个版本的 可以拖动对齐, 貌似目前在 pc 上操作还没有发现卡死的情况


而且 pc 端运行比之前的版本牛肠了不少
回复

使用道具 举报

58

主题

658

回帖

837

积分

金牌会员

积分
837
发表于 2024-10-12 10:55:29 | 显示全部楼层
刷新方式改用LVGL定时器定时刷新试一下,在主循环内刷新是不是容易出问题啊,
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 11:35:16 | 显示全部楼层
ou513 发表于 2024-10-12 10:55
刷新方式改用LVGL定时器定时刷新试一下,在主循环内刷新是不是容易出问题啊,

现在就是在 gui 任务里面刷新显示一会后卡死了,

lvgl 定时器里面刷新 我试试看 会不会出现 卡死
回复

使用道具 举报

58

主题

658

回帖

837

积分

金牌会员

积分
837
发表于 2024-10-12 11:46:41 | 显示全部楼层
hpdell 发表于 2024-10-12 11:35
现在就是在 gui 任务里面刷新显示一会后卡死了,

lvgl 定时器里面刷新 我试试看 会不会出现 卡死

具体不清楚,讨论一下,如果直接在任务里刷新,这个会不会跟LVGL那个心跳时钟有冲突
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 12:16:46 | 显示全部楼层
ou513 发表于 2024-10-12 11:46
具体不清楚,讨论一下,如果直接在任务里刷新,这个会不会跟LVGL那个心跳时钟有冲突

估计关系不大, 我把 刷新显示函数放在其他任务里面也试过,结果都是一样的
回复

使用道具 举报

0

主题

18

回帖

18

积分

新手上路

积分
18
QQ
发表于 2024-10-12 12:35:39 | 显示全部楼层
加大一下线程栈空间以及LVGL的内存LV_MEM_SIZE
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 15:09:05 | 显示全部楼层
SunHaoArm 发表于 2024-10-12 12:35
加大一下线程栈空间以及LVGL的内存LV_MEM_SIZE

LV_MEM_SIZE  这个我分配了 16MB 的 SDRAM 空间,

gui 线程 栈 我分配了 8KB
回复

使用道具 举报

5

主题

144

回帖

159

积分

初级会员

积分
159
发表于 2024-10-12 15:39:16 | 显示全部楼层
lv_timer_handler 和 lv_task_handler 是一个函数,不过感觉这个应该不影响,可以先模拟器上试试,或者把lvgl的log信息打开,看看log
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-12 16:18:29 | 显示全部楼层
本帖最后由 hpdell 于 2024-10-12 17:13 编辑
无关风月 发表于 2024-10-12 15:39
lv_timer_handler 和 lv_task_handler 是一个函数,不过感觉这个应该不影响,可以先模拟器上试试,或者把lv ...

貌似现在 在 codeblocks 上模拟仿真, codeblocks 对应的 lvgl 库版本是 v8.3.11

而 目前 nxp GUI-Guider-1.8.1-GA 对应的版本是 lvgl v8.3.10 ,

v8.3.11 的版本里面竟然没有 radio 按钮 驱动, 我从 v8.3.10 里面复制过去在 codeblocks 里面编译通过, 但是只要点击进入到 有 radio 按钮的页面模拟器就会出现错误退出 ??

我试着吧 模拟器里面的 v8.3.11 替换成 v8.3.10 版本,模拟器 编译出现找不到路径,还真是麻烦呀  ???





回复

使用道具 举报

2

主题

32

回帖

38

积分

新手上路

积分
38
发表于 2024-10-17 09:55:09 | 显示全部楼层
建议不要在while里面进行页面刷新,在guider的页面里面创建lvgl的定时器进行页面数据赋值。
这是页面中创建定时器:

这是guitask中的内容:

出现问题的情况比较多,卡死的话可以打开lvgl的log进行串口查看:
在lv_conf.h文件中的LV_USE_LOG这个宏

根据你需要的等级设置就能看到相应的log了。
后面定位也方便一些。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-21 09:26:16 | 显示全部楼层
本帖最后由 hpdell 于 2024-10-21 11:12 编辑
浅末哈哈 发表于 2024-10-17 09:55
建议不要在while里面进行页面刷新,在guider的页面里面创建lvgl的定时器进行页面数据赋值。
这是页面中创 ...

貌似图片显示不出来呀,能不能重新发一下啊 !
回复

使用道具 举报

2

主题

32

回帖

38

积分

新手上路

积分
38
发表于 2024-10-22 08:45:06 | 显示全部楼层
hpdell 发表于 2024-10-21 09:26
貌似图片显示不出来呀,能不能重新发一下啊 !

图片挂了,重新发一下, lvgl8.4。

页面定时器:

在你需要的页面中创建,在退出有定时器的页面时,需要将定时器清除(前提是整个页面进行切换)
guitask中的内容

只需要包含gui页面的初始化和线程安全的互斥锁就行了,页面进行切换依靠lv_time_handler()
关于lvgl调试部分,需要找到lv_conf.h这个文件,找到LV_USE_LOG

根据自身的需求打开相应的宏就行了,这样方便调试定位
回复

使用道具 举报

13

主题

68

回帖

107

积分

初级会员

积分
107
发表于 2024-10-22 08:49:17 | 显示全部楼层
没接触lvgl,很好奇,现在lvgl开发是通过这种软件生成代码的吗,还是自己手搓代码?
回复

使用道具 举报

5

主题

81

回帖

96

积分

初级会员

积分
96
发表于 2024-10-22 09:14:51 | 显示全部楼层
myNameIsLin 发表于 2024-10-22 08:49
没接触lvgl,很好奇,现在lvgl开发是通过这种软件生成代码的吗,还是自己手搓代码?

都有,有些厂家(汇顶,炬芯)的话会提供一个比较完善的SDK框架给你,里面页面管理都做好了,你只需要往里面写自己的逻辑和一些需要的控件就可以,那么你只能手搓,如果是st或者esp这种没有页面管理框架的,可以先用软件生成一个页面框架,再自己编写控件和逻辑。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-22 09:16:12 | 显示全部楼层
浅末哈哈 发表于 2024-10-22 08:45
图片挂了,重新发一下, lvgl8.4。

页面定时器:

貌似图片还是显示不出来呀

你吧图片打开,然后使用 qq 截图出来估计应该就可以了,

如果图片太高清的话,估计会有图片大小限制吧
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-22 09:17:08 | 显示全部楼层
myNameIsLin 发表于 2024-10-22 08:49
没接触lvgl,很好奇,现在lvgl开发是通过这种软件生成代码的吗,还是自己手搓代码?

lvgl 使用 gui guider nxp 出品的图形界面工具可以生成初始化代码, 有些功能可以参考初始化代码代码,有些也需要自己 单独捣鼓
回复

使用道具 举报

2

主题

32

回帖

38

积分

新手上路

积分
38
发表于 2024-10-22 09:39:07 | 显示全部楼层
hpdell 发表于 2024-10-22 09:17
lvgl 使用 gui guider nxp 出品的图形界面工具可以生成初始化代码, 有些功能可以参考初始化代码代码,有 ...

阿这,又挂了,那我直接贴代码

页面上的定时器,用于更新rtc
[C] 纯文本查看 复制代码
static void Task_Create(void)
{
    timer = lv_timer_create(Task_1000msUpdata, 1000, NULL);
}

guitask里面只需要进行初始化和加线程锁
[C] 纯文本查看 复制代码
void gui_task(void *param)
{
    gui_init();

    while (1)
    {
        if (pdTRUE == xSemaphoreTake(xMutex, portMAX_DELAY))
        {
  lv_timer_handler();
            xSemaphoreGive(xMutex);
            delay_ms(5);
        }
    }
}


调试lvgl的话在lv_conf.h中找到LV_USE_LOG这个宏
[C] 纯文本查看 复制代码
#define LV_USE_LOG 1
#if LV_USE_LOG

    /*How important log should be added:
    *LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
    *LV_LOG_LEVEL_INFO        Log important events
    *LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't cause a problem
    *LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
    *LV_LOG_LEVEL_USER        Only logs added by the user
    *LV_LOG_LEVEL_NONE        Do not log anything*/
    #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN

回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-22 10:19:24 | 显示全部楼层
浅末哈哈 发表于 2024-10-22 09:39
阿这,又挂了,那我直接贴代码

页面上的定时器,用于更新rtc


不错不错呀,

回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-22 11:32:06 | 显示全部楼层
浅末哈哈 发表于 2024-10-22 09:39
阿这,又挂了,那我直接贴代码

页面上的定时器,用于更新rtc




你好,问一下,你的 lvgl LV_MEM_ADR 这个地址是使用的单片机内部 sram 还是外部 sdram 啊 ?

我目前设置的为 单片机内部的 sram ,

lvgl-addr.png



回复

使用道具 举报

2

主题

32

回帖

38

积分

新手上路

积分
38
发表于 2024-10-22 13:10:58 | 显示全部楼层
hpdell 发表于 2024-10-22 11:32
你好,问一下,你的 lvgl LV_MEM_ADR 这个地址是使用的单片机内部 sram 还是外部 sdram 啊 ?

...

[C] 纯文本查看 复制代码
/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/
#define LV_MEM_CUSTOM 0
#if LV_MEM_CUSTOM == 0
    /*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
    #define LV_MEM_SIZE (48 * 1024U)          /*[bytes]*/

    /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/
    #define LV_MEM_ADR 0     /*0: unused*/
    /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/
    #if LV_MEM_ADR == 0
        #undef LV_MEM_POOL_INCLUDE
        #undef LV_MEM_POOL_ALLOC
    #endif

#else       /*LV_MEM_CUSTOM*/
    #define LV_MEM_CUSTOM_INCLUDE <stdlib.h>   /*Header for the dynamic memory function*/
    #define LV_MEM_CUSTOM_ALLOC   malloc
    #define LV_MEM_CUSTOM_FREE    free
    #define LV_MEM_CUSTOM_REALLOC realloc
#endif     /*LV_MEM_CUSTOM*/



我的是这样的,我用的单片机上的ram。
回复

使用道具 举报

678

主题

3465

回帖

5524

积分

论坛元老

积分
5524
 楼主| 发表于 2024-10-22 14:31:09 | 显示全部楼层
浅末哈哈 发表于 2024-10-22 13:10
[mw_shl_code=c,true]
/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_me ...

好的, 明白了, 感谢感谢啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-28 23:04 , Processed in 0.479551 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表