硬汉嵌入式论坛

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

[LVGL] LVGL 跑在FreeRTOS的一个任务中,其他任务调用有关LVGL的函数,概率性死机

[复制链接]

3

主题

3

回帖

12

积分

新手上路

积分
12
发表于 2021-10-7 23:55:37 | 显示全部楼层 |阅读模式
如题。
环境:FreeRTOS10.2,LVGL8.0
一个任务执行lv_task_handler(), 5ms一次。
目前遇到的问题:在界面切换时,需要等待外设设备(如:网络数据等待,行程开关)响应后才可以切换。等待外设响应采用的是新建任务,等待消息队列,收到数据后在新任务中进行LVGL的函数调用UI的切换,最后删除新任务。在执行界面切换时低概率的出现死机现象。在lv_task_handler()加上信号量锁,新任务中调用LVGL函数也加上信号量锁,现象依然存在。请大佬指导赐教,谢谢!

回复

使用道具 举报

2

主题

180

回帖

186

积分

初级会员

积分
186
发表于 2021-10-8 09:10:04 | 显示全部楼层
我觉得是你的锁没用好,我原来也是,按键触发老是有问题,也是通过消息或者任务通知来创建就没问题了,因为存在线程抢占...1:通过事件在同一线程创建和调用 2:查看锁的使用是否正常
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107220
QQ
发表于 2021-10-8 09:41:23 | 显示全部楼层
先锁定程序死机具体位置,是界面卡死还hardfault了。
回复

使用道具 举报

3

主题

3

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2021-10-8 17:18:40 | 显示全部楼层
qq57379550 发表于 2021-10-8 09:10
我觉得是你的锁没用好,我原来也是,按键触发老是有问题,也是通过消息或者任务通知来创建就没问题了,因为存在 ...

1、现在正在改成用lv timer周期查询消息队列方式
2、锁应该没问题,用的比较熟练了
回复

使用道具 举报

3

主题

3

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2021-10-8 17:21:30 | 显示全部楼层
eric2013 发表于 2021-10-8 09:41
先锁定程序死机具体位置,是界面卡死还hardfault了。

程序跑飞的位置不固定,可以确定是在一个函数里,这个函数里面用了很多LVGL的函数。
回复

使用道具 举报

11

主题

122

回帖

160

积分

初级会员

积分
160
发表于 2021-10-9 09:12:54 | 显示全部楼层
zhuwenfly 发表于 2021-10-8 17:21
程序跑飞的位置不固定,可以确定是在一个函数里,这个函数里面用了很多LVGL的函数。

不建议多个任务调用gui函数,因为gui的api并不是可重入的,可能操作了某些api操作了公共变量。举个例子,绘制曲线图函数,硬件传感器有新数据了直接调用添加点绘制,但此时gui线程处于挂起状态,显然是不合理的,这样使用可能就有意想不到的问题出现,你的问题也是类似的。通常做法是gui线程维护一个消息队列,gui线程在周期性刷新时读取,收到响应消息后做页面跳转,总之保持gui的api只在gui线程被调用。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 03:54 , Processed in 0.162749 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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