Skip to content

Commit 1e589aa

Browse files
feat(esp_lvgl_port): Add LVGL task stack capabilities
Closes #567
1 parent a1b40b3 commit 1e589aa

File tree

4 files changed

+23
-16
lines changed

4 files changed

+23
-16
lines changed

components/esp_lvgl_port/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## [Unreleased]
4+
### Features
5+
- Added option to place LVGL task stack to external RAM
6+
37
## 2.6.0
48

59
### Features

components/esp_lvgl_port/include/esp_lvgl_port.h

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#pragma once
1313

1414
#include "esp_err.h"
15+
#include "esp_heap_caps.h"
1516
#include "lvgl.h"
1617
#include "esp_lvgl_port_disp.h"
1718
#include "esp_lvgl_port_touch.h"
@@ -48,24 +49,26 @@ typedef struct {
4849
* @brief Init configuration structure
4950
*/
5051
typedef struct {
51-
int task_priority; /*!< LVGL task priority */
52-
int task_stack; /*!< LVGL task stack size */
53-
int task_affinity; /*!< LVGL task pinned to core (-1 is no affinity) */
54-
int task_max_sleep_ms; /*!< Maximum sleep in LVGL task */
55-
int timer_period_ms; /*!< LVGL timer tick period in ms */
52+
int task_priority; /*!< LVGL task priority */
53+
int task_stack; /*!< LVGL task stack size */
54+
int task_affinity; /*!< LVGL task pinned to core (-1 is no affinity) */
55+
int task_max_sleep_ms; /*!< Maximum sleep in LVGL task */
56+
unsigned task_stack_caps; /*!< LVGL task stack memory capabilities (see esp_heap_caps.h) */
57+
int timer_period_ms; /*!< LVGL timer tick period in ms */
5658
} lvgl_port_cfg_t;
5759

5860
/**
5961
* @brief LVGL port configuration structure
6062
*
6163
*/
62-
#define ESP_LVGL_PORT_INIT_CONFIG() \
63-
{ \
64-
.task_priority = 4, \
65-
.task_stack = 7168, \
66-
.task_affinity = -1, \
67-
.task_max_sleep_ms = 500, \
68-
.timer_period_ms = 5, \
64+
#define ESP_LVGL_PORT_INIT_CONFIG() \
65+
{ \
66+
.task_priority = 4, \
67+
.task_stack = 7168, \
68+
.task_affinity = -1, \
69+
.task_max_sleep_ms = 500, \
70+
.task_stack_caps = MALLOC_CAP_DEFAULT, \
71+
.timer_period_ms = 5, \
6972
}
7073

7174
/**

components/esp_lvgl_port/src/lvgl8/esp_lvgl_port.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ esp_err_t lvgl_port_init(const lvgl_port_cfg_t *cfg)
7878

7979
BaseType_t res;
8080
if (cfg->task_affinity < 0) {
81-
res = xTaskCreate(lvgl_port_task, "taskLVGL", cfg->task_stack, NULL, cfg->task_priority, &lvgl_port_ctx.lvgl_task);
81+
res = xTaskCreateWithCaps(lvgl_port_task, "taskLVGL", cfg->task_stack, NULL, cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_stack_caps);
8282
} else {
83-
res = xTaskCreatePinnedToCore(lvgl_port_task, "taskLVGL", cfg->task_stack, NULL, cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_affinity);
83+
res = xTaskCreatePinnedToCoreWithCaps(lvgl_port_task, "taskLVGL", cfg->task_stack, NULL, cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_affinity, cfg->task_stack_caps);
8484
}
8585
ESP_GOTO_ON_FALSE(res == pdPASS, ESP_FAIL, err, TAG, "Create LVGL task fail!");
8686

components/esp_lvgl_port/src/lvgl9/esp_lvgl_port.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ esp_err_t lvgl_port_init(const lvgl_port_cfg_t *cfg)
8585

8686
BaseType_t res;
8787
if (cfg->task_affinity < 0) {
88-
res = xTaskCreate(lvgl_port_task, "taskLVGL", cfg->task_stack, xTaskGetCurrentTaskHandle(), cfg->task_priority, &lvgl_port_ctx.lvgl_task);
88+
res = xTaskCreateWithCaps(lvgl_port_task, "taskLVGL", cfg->task_stack, xTaskGetCurrentTaskHandle(), cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_stack_caps);
8989
} else {
90-
res = xTaskCreatePinnedToCore(lvgl_port_task, "taskLVGL", cfg->task_stack, xTaskGetCurrentTaskHandle(), cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_affinity);
90+
res = xTaskCreatePinnedToCoreWithCaps(lvgl_port_task, "taskLVGL", cfg->task_stack, xTaskGetCurrentTaskHandle(), cfg->task_priority, &lvgl_port_ctx.lvgl_task, cfg->task_affinity, cfg->task_stack_caps);
9191
}
9292
ESP_GOTO_ON_FALSE(res == pdPASS, ESP_FAIL, err, TAG, "Create LVGL task fail!");
9393

0 commit comments

Comments
 (0)