您尚未登录。

楼主 # 2024-05-27 15:35:23

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

比如现在有can和lvgl两个线程。can可能不定期接收到数据,接收到数据后想更新到屏幕上。
那么该如何设计更新逻辑好呢?
1, can线程里收到数据后调用lvgl控件直接更改显示;
2,can线程收到数据后存到全局变量里,lvgl线程里开启个定时器,定时刷新控件读取这个全局变量;
3,can线程收到数据后存到全局变量里,同时发送信号量,通知lvgl线程去读取这个全局变量?

请教,改怎么设计好呢?

离线

#1 2024-05-27 16:43:07

18578292200
会员
所在地: 珠海
注册时间: 2020-01-17
已发帖子: 20
积分: 26

Re: rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

不建议使用方式1
2、3都可以,看你更新周期要多快。

离线

楼主 #2 2024-05-27 17:12:13

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

感谢。
目前暂定大概10秒can收到一组数据。
用2的话,比如定时1秒更新下lvgl控件显示,感觉有点浪费,毕竟实际10秒才有数据变动。

离线

#3 2024-05-27 17:16:49

kin
会员
注册时间: 2020-04-06
已发帖子: 31
积分: 75.5

Re: rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

如果是周期性频繁收到数据,那就选第2种;
如果是偶发性收到数据,那就选第3种;
至于第1种,lvgl官方文档也有详细解释。https://docs.lvgl.io/8.4/porting/os.html#tasks-and-threads

离线

#4 2024-05-28 08:24:41

DDER
会员
注册时间: 2023-08-16
已发帖子: 18
积分: 23

Re: rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

建议3.用信号量去触发界面更新。
如果数据量不大,可以用邮箱把一次性将数据送给显示线程。这样可以避免在显示时,全局变量被CAN线程修改。

离线

楼主 #5 2024-05-28 13:41:14

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,363
积分: 1323.5

Re: rtos+lvgl,其它线程如何通知lvgl线程更新数据?还是直接在其它线程里更新lvgl控件?

感谢各位。那就用线程间消息通知的方式吧。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn