esp32s3 lvgl 调用 lv_timer_handler 程序卡死解决

记录最近在esp32s3上使用lvgl+lottie动画时,程序出现崩溃卡死,观察剩余堆栈无法反应溢出情况。

环境是在ubuntu下,软件使用esp_lvgl_port+lvgl9.1.1。

在这里插入图片描述

根据espidf官方文档,出现该错误说明程序存在内存溢出问题。
https://docs.espressif.com/projects/esp-idf/zh_CN/v5.3/esp32s3/api-guides/fatal-errors.html#loadprohibited-storeprohibited
在这里插入图片描述

查看Backtrace
在这里插入图片描述
跟踪到esp_lvgl_port.c第250行,确实调用lv_timer_handler();
在这里插入图片描述
查找lvgl_port_task调用关系,在lvgl_port_init中创建了一个LVGL task任务。在这里插入图片描述
将LVGL task任务栈调大,当前任务中实际运行大约需要22k内存。在这里插入图片描述
剩余约8k。
在这里插入图片描述

调整后,程序运行正常。

一开始代码从模拟器搬到esp上时,有时运行一段时间卡死,有时立即卡死。最终发现在app main函数中一旦调用lv_timer_handler,程序就会崩溃,注释掉之后恢复正常运行,出现该情况考虑增加任务的栈大小。

参考:
https://www.bilibili.com/read/cv20086443/
https://blog.csdn.net/2301_79881389/article/details/140306755
https://blog.csdn.net/qq_47736089/article/details/133391409
https://docs.lvgl.io/master/intro/index.html#lvgl-doesn-t-start-randomly-crashes-or-nothing-is-drawn-on-the-display-what-can-be-the-problem

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值