Problem cycling through screens on Zephyr/PineTime


I have a simple program which cycles through three screens, displaying the next each time I click the hardware button. When I test it and cycle through the screens, I get to the 3rd screen a 2nd time and the cycling stops. The automatic sleep continues to work, but the screens will not cycle anymore. I think I’m running into a memory problem and it’s likely due to the way I am handling progressing from one screen to the next.

What MCU/Processor/Board and compiler are you using?

Zephyr on a PineTime_DevKit0 board with PineTime DK using VS Code and the nRF Connect Visual Studio add-in.

What LVGL version are you using?


What do you want to achieve?

Cycling between screens.

What have you tried so far?

Calling lv_obj_clean(lv_scr_act()); between screen initializations which build the screens which look like this:

lv_obj_t *settings_label;
settings_label = lv_label_create(lv_scr_act());
lv_label_set_text(settings_label, Settings);
lv_obj_align(settings_label, LV_ALIGN_TOP_MID, 0, 0);

I have looked at examples, the best of which is the Infinitime software for the PineTime but I see that uses a separate thread for lvgl, is using a 7.* version of lvgl, and makes use of lv_task_handler(), which I don’t see in the 8.* documentation.

There is not much Zephyr specific documentation on the site.