记录最近在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.youkuaiyun.com/2301_79881389/article/details/140306755
https://blog.youkuaiyun.com/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