@@ -209,10 +209,11 @@ static esp_err_t app_touch_deinit(void)
209209 return ESP_OK ;
210210}
211211
212- static esp_err_t app_lvgl_init (void )
212+ static esp_err_t app_lvgl_init (int task_affinity )
213213{
214214 /* Initialize LVGL */
215- const lvgl_port_cfg_t lvgl_cfg = ESP_LVGL_PORT_INIT_CONFIG ();
215+ lvgl_port_cfg_t lvgl_cfg = ESP_LVGL_PORT_INIT_CONFIG ();
216+ lvgl_cfg .task_affinity = task_affinity ;
216217 ESP_RETURN_ON_ERROR (lvgl_port_init (& lvgl_cfg ), TAG , "LVGL port initialization failed" );
217218
218219 /* Add LCD screen */
@@ -306,7 +307,7 @@ static void app_main_display(void)
306307}
307308
308309// Some resources are lazy allocated in the LCD driver, the threadhold is left for that case
309- #define TEST_MEMORY_LEAK_THRESHOLD (50 )
310+ #define TEST_MEMORY_LEAK_THRESHOLD (200 )
310311
311312static void check_leak (size_t start_free , size_t end_free , const char * type )
312313{
@@ -333,8 +334,8 @@ TEST_CASE("Main test LVGL port", "[lvgl port]")
333334
334335 ESP_LOGI (TAG , "Initilize LVGL." );
335336
336- /* LVGL initialization */
337- TEST_ASSERT_EQUAL (app_lvgl_init (), ESP_OK );
337+ /* LVGL initialization - no task affinity */
338+ TEST_ASSERT_EQUAL (app_lvgl_init (-1 ), ESP_OK );
338339
339340 /* Show LVGL objects */
340341 app_main_display ();
@@ -349,11 +350,36 @@ TEST_CASE("Main test LVGL port", "[lvgl port]")
349350
350351 ESP_LOGI (TAG , "LVGL deinitialized." );
351352
353+ esp_reent_cleanup ();
352354 size_t end_lvgl_freemem_8bit = heap_caps_get_free_size (MALLOC_CAP_8BIT );
353355 size_t end_lvgl_freemem_32bit = heap_caps_get_free_size (MALLOC_CAP_32BIT );
354356 check_leak (start_lvgl_freemem_8bit , end_lvgl_freemem_8bit , "8BIT LVGL" );
355357 check_leak (start_lvgl_freemem_32bit , end_lvgl_freemem_32bit , "32BIT LVGL" );
356358
359+ ESP_LOGI (TAG , "Initilize LVGL - task affinity to core 1" );
360+
361+ /* LVGL initialization - task affinity to core 1 */
362+ TEST_ASSERT_EQUAL (app_lvgl_init (1 ), ESP_OK );
363+
364+ /* Show LVGL objects */
365+ app_main_display ();
366+
367+ vTaskDelay (5000 / portTICK_PERIOD_MS );
368+
369+ /* LVGL deinit */
370+ TEST_ASSERT_EQUAL (app_lvgl_deinit (), ESP_OK );
371+
372+ /* When using LVGL8, it takes some time to release all memory */
373+ vTaskDelay (1000 / portTICK_PERIOD_MS );
374+
375+ ESP_LOGI (TAG , "LVGL deinitialized." );
376+
377+ esp_reent_cleanup ();
378+ end_lvgl_freemem_8bit = heap_caps_get_free_size (MALLOC_CAP_8BIT );
379+ end_lvgl_freemem_32bit = heap_caps_get_free_size (MALLOC_CAP_32BIT );
380+ check_leak (start_lvgl_freemem_8bit , end_lvgl_freemem_8bit , "8BIT LVGL" );
381+ check_leak (start_lvgl_freemem_32bit , end_lvgl_freemem_32bit , "32BIT LVGL" );
382+
357383 /* Touch deinit */
358384 TEST_ASSERT_EQUAL (app_touch_deinit (), ESP_OK );
359385
@@ -364,6 +390,7 @@ TEST_CASE("Main test LVGL port", "[lvgl port]")
364390
365391 ESP_LOGI (TAG , "LCD deinitilized." );
366392
393+ esp_reent_cleanup ();
367394 size_t end_freemem_8bit = heap_caps_get_free_size (MALLOC_CAP_8BIT );
368395 size_t end_freemem_32bit = heap_caps_get_free_size (MALLOC_CAP_32BIT );
369396 check_leak (start_freemem_8bit , end_freemem_8bit , "8BIT" );
0 commit comments