Simulation doesn't match hardware

What simulation shows me does not match what I see on hardware.

More specifically, the code is ported from a project made by a colleague for different hardware. On that original hardware the LVGL behavior does match the simulator. The old project was made using LVGL 8.3.10, but the simulation and new hardware are both using 8.4.0.

I’m looking for ideas about where to look for the difference between the simulation and my hardware. The hardware seems like the most obvious place to look, or maybe a configuration in the simulator that doesn’t match what I am using in the hardware. I can display images on the screen and manipulate them and animate text so I’m fairly confident that my display flush callback driver is working correctly.

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

STM32U5A9 on custom PCB with 1024x768 monochrome display using LTDC and DMA2D with internal SRAM buffer. Compiler is gcc 13.2.Rel1 arm-none-eabi. FreeRTOS is being used in addition to LVGL.

Menu system

Rather than use the LVGL menu system we have created our own using lvgl object created with lv_obj_create() and adding images, text, and callbacks as needed. The code block below shows an example menu structure that is to be displayed.

Main Menu
-> Feature Menu:
   About
   Exit

On the original hardware the screen is small so only 3 lines are displayed and it will scroll as needed. On the simulator and new hardware the screen is large enough to display the entire menu at once. However, the new hardware only displays a single line - the line that is currently selected/highlighted. And it never shows the “Main Menu” text object.

Screenshot and/or video

This is from the simulator and matches the old hardware.
image

This is on the new hardware.
IMG_4233 (002)

My thanks for any suggestions on where to look for this issue. Also my thanks to the creators and contributors of LVGL.

As usual, if after a few days of debug you can’t figure it out then ask for help. Best way I know of to suddenly find the problem. The text was there, is was just too dim to be visible. The highlighted text is white and the normal text is grey.

This new display is monochrome red, but you still have to drive all 24 bits of the RGB888 to get full brightness. In the simulator and the other hardware apparently need a less strong grey to show up on the screen. I’m going to see if I can make the simulator match this hardware more closely, but at least I’m up a running now.