完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我将lv_task_handler()放在main函数中就能够正常刷新图像,但是将lv_task_handler()放在其它线程的入口函数就不能正常刷新图像,会卡在调用lv_task_handler()的位置。请问,为什么lv_task_handler()只放在main函数中可以用? |
|
相关推荐
6个回答
|
|
|
|
|
|
您好,其它线程的入口函数定义于其它目录: 就比如图中名为Gui的目录,这个目录中的Gui.c中有一个名为”GUIRT”的线程的入口函数,在这个入口函数中有一个while(1)循环,循环内调用延时函数和lv_task_handler(),用来定时刷新LVGL界面以确保正常显示,如图: 这个线程通过如下图函数创建和启动: 这个线程是这样运行的: 在入口函数中等待上一步执行结束后发送的事件,如果收到了事件则调用lv_task_handler()刷新显示界面,调用结束后发送一个事件标志着Gui刷新完成了,如下图: 这个线程的优先级与main是同级的,如图: (main的优先级) (这个刷新线程的优先级) 可以看到Gui刷新线程与main线程优先级相同,都为10。 然后就是确认初始化部分的确是先于lv_task_handler()执行了,因为在Gui初始化和Gui刷新线程创建与启动函数中是先初始化屏幕再lv_init()然后再启动Gui刷新线程的,而lv_task_handler()是在Gui刷新线程的入口函数中调用的,如图: (Gui初始化和Gui刷新线程创建与启动函数) (Gui刷新线程入口函数) |
|
|
|
现在就是,将lvtaskhandler()放在Gui刷新线程的入口函数中时,控制台打印”Gui”后就停止了,”GuiOK”没有被打印,rt_event_send(EVENT, EVENT_GUIwan2cheng2)也没有被执行: 但是,将lv_task_handler()放在main函数中的while(1)中则界面能正常显示: |
|
|
|
也就是把 lvgl 线程 while 内的几行代码挪到 main 线程的 while 循环里就能跑起来?
你的系统里除了 lvgl 还有没有其它组件? 界面部分程序很复杂吗?有试过极简的但界面 demo 吗?只加一个界面啥控件也不添加的。 当 lvgl 线程出问题的时候,整个系统还运行没有?线程调度还能回到 lvgl 线程不能? |
|
|
|
好的,我试一下极简demo,刚下班。lvgl线程出问题时整个系统就不运行了,就卡在lv_task_handler()这儿了。
|
|
|
|
有内存非法写的地方,调整代码后,被破坏的内存变的不那么重要了,所以程序又能跑起来了。可以肯定的是不是这两行代码位置不同引起的
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
764 浏览 0 评论
3847 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2479 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2901 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31185 浏览 11 评论
72809 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 07:31 , Processed in 0.671856 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号