Hi,
When I'm trying to use LVGL along with Zephyr, I get the following:
[00:00:00.294,952] <err> os: ***** MPU FAULT ***** [00:00:00.294,952] <err> os: Stacking error (context area might be not valid) [00:00:00.294,982] <err> os: Data Access Violation [00:00:00.294,982] <err> os: MMFAR Address: 0x2001c2ec [00:00:00.295,013] <err> os: r0/a1: 0xede3fca2 r1/a2: 0xa80f657f r2/a3: 0xc7352ee7 [00:00:00.295,013] <err> os: r3/a4: 0xa86a4f81 r12/ip: 0x24be55dd r14/lr: 0x260300df [00:00:00.295,043] <err> os: xpsr: 0x41000000 [00:00:00.295,043] <err> os: Faulting instruction address (r15/pc): 0x000273f6 [00:00:00.295,074] <err> os: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0 [00:00:00.295,074] <err> os: Current thread: 0x20000438 (unknown) [00:00:01.488,098] <err> os: Halting system
I already tried to "play" with different CONFIG_MAIN_STACK_SIZE and CONFIG_IDLE_STACK_SIZE values with no success.
Here is the code I use to test the display
#include <lvgl.h> void view_lvgl() { // Runs in a dedicated k_thread uint32_t count = 0U; char count_str[11] = {0}; const struct device *display_dev; lv_obj_t *hello_world_label; lv_obj_t *count_label; display_dev = DEVICE_DT_GET(DT_CHOSEN(zephyr_display)); if (!device_is_ready(display_dev)) { printk("Device not ready, aborting test"); return; } if (IS_ENABLED(CONFIG_LV_Z_POINTER_KSCAN)) { lv_obj_t *hello_world_button; hello_world_button = lv_btn_create(lv_scr_act()); lv_obj_align(hello_world_button, LV_ALIGN_CENTER, 0, 0); hello_world_label = lv_label_create(hello_world_button); } else { hello_world_label = lv_label_create(lv_scr_act()); } lv_label_set_text(hello_world_label, "Hello world!"); lv_obj_align(hello_world_label, LV_ALIGN_CENTER, 0, 0); count_label = lv_label_create(lv_scr_act()); lv_obj_align(count_label, LV_ALIGN_BOTTOM_MID, 0, 0); lv_task_handler(); // <------------ Crashes here ! display_blanking_off(display_dev); while (1) { if ((count % 100) == 0U) { sprintf(count_str, "%d", count/100U); lv_label_set_text(count_label, count_str); } lv_task_handler(); k_sleep(K_MSEC(10)); ++count; } }
The vars :
CONFIG_GPIO=y CONFIG_DEBUG_OPTIMIZATIONS=y CONFIG_NEWLIB_LIBC=y CONFIG_DEBUG_THREAD_INFO=y #CONFIG_THREAD_STACK_INFO=y CONFIG_HEAP_MEM_POOL_SIZE=50512 #CONFIG_IDLE_STACK_SIZE=4096 #CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096 CONFIG_MAIN_STACK_SIZE=4096 CONFIG_PRINTK=y CONFIG_CONSOLE=y CONFIG_RESET_ON_FATAL_ERROR=n CONFIG_THREAD_NAME=y # USB #CONFIG_USB=y #CONFIG_USB_DEVICE_STACK=y #CONFIG_USB_DEVICE_PRODUCT="DFKI zephyr SPI sample" #CONFIG_USB_UART_CONSOLE=y #CONFIG_USB_UART_DTR_WAIT=y # I2C CONFIG_I2C=n # SPI CONFIG_SPI=y CONFIG_SSD1333=y CONFIG_DISPLAY=y CONFIG_LOG=y CONFIG_DISPLAY_LOG_LEVEL_DBG=y CONFIG_LVGL=y CONFIG_LV_MEM_CUSTOM=y CONFIG_LV_Z_MEM_POOL_NUMBER_BLOCKS=8 CONFIG_LV_USE_LOG=y CONFIG_LV_USE_LABEL=y CONFIG_LV_USE_BTN=y CONFIG_LV_USE_IMG=y
Please note that using the display driver alone (without LVGL) is working fine.
Any idea ?
Thanks !