From 2ebe3593434bb800cd143a64dcdab4e04d82711c Mon Sep 17 00:00:00 2001 From: shentou Date: Sat, 20 Dec 2025 16:09:44 +0800 Subject: [PATCH] =?UTF-8?q?lvgl=E7=A7=BB=E6=A4=8D=E5=AE=8C=E6=AF=95?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E5=85=A5dma=E5=8F=8A=E5=8F=8C=E7=BC=93?= =?UTF-8?q?=E5=86=B2=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/porting/lv_port_disp_template.c | 8 ++-- controler/User/task/config.yaml | 7 +-- controler/User/task/display.c | 48 ++++++++++++++----- controler/User/task/init.c | 2 +- controler/User/task/user_task.c | 8 ++-- controler/User/task/user_task.h | 16 +++---- 6 files changed, 56 insertions(+), 33 deletions(-) diff --git a/controler/User/lvgl/examples/porting/lv_port_disp_template.c b/controler/User/lvgl/examples/porting/lv_port_disp_template.c index 1b98507..0797c35 100755 --- a/controler/User/lvgl/examples/porting/lv_port_disp_template.c +++ b/controler/User/lvgl/examples/porting/lv_port_disp_template.c @@ -18,12 +18,12 @@ *********************/ #ifndef MY_DISP_HOR_RES #warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen width, default value 320 is used for now. - #define MY_DISP_HOR_RES 320 + #define MY_DISP_HOR_RES 240 #endif #ifndef MY_DISP_VER_RES #warning Please define or replace the macro MY_DISP_HOR_RES with the actual screen height, default value 240 is used for now. - #define MY_DISP_VER_RES 240 + #define MY_DISP_VER_RES 320 #endif @@ -43,7 +43,7 @@ void lcd_draw_fast_rgb_color(int16_t sx, int16_t sy,int16_t ex, int16_t ey, uint while (__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_TCIF0_4)!=HAL_OK)//如果DMA传输完成,获取标志位,返回值是1 { __HAL_DMA_CLEAR_FLAG(&hdma_memtomem_dma2_stream0, DMA_FLAG_TCIF0_4); //清除标志位 - } + } // for(uint32_t i = 0; i < draw_size; i++) // { // lcd_wr_data(color[i]); @@ -117,7 +117,7 @@ void lv_port_disp_init(void) static lv_disp_draw_buf_t draw_buf_dsc_2; static lv_color_t buf_2_1[MY_DISP_HOR_RES * 20]; /*A buffer for 10 rows*/ static lv_color_t buf_2_2[MY_DISP_HOR_RES * 20]; /*An other buffer for 10 rows*/ - lv_disp_draw_buf_init(&draw_buf_dsc_2, buf_2_1, buf_2_2, MY_DISP_HOR_RES * 40); /*Initialize the display buffer*/ + lv_disp_draw_buf_init(&draw_buf_dsc_2, buf_2_1, buf_2_2, MY_DISP_HOR_RES * 20); /*Initialize the display buffer*/ // /* Example for 3) also set disp_drv.full_refresh = 1 below*/ // static lv_disp_draw_buf_t draw_buf_dsc_3; diff --git a/controler/User/task/config.yaml b/controler/User/task/config.yaml index ec932fa..b62ac73 100644 --- a/controler/User/task/config.yaml +++ b/controler/User/task/config.yaml @@ -1,6 +1,7 @@ - delay: 0 description: '' - freq_control: false - function: Task_lvgl - name: lvgl + freq_control: true + frequency: 1000.0 + function: Task_display + name: display stack: 1024 diff --git a/controler/User/task/display.c b/controler/User/task/display.c index 358b5b6..02a752e 100644 --- a/controler/User/task/display.c +++ b/controler/User/task/display.c @@ -1,5 +1,5 @@ /* - lvgl Task + display Task */ @@ -17,33 +17,55 @@ /* Private macro ------------------------------------------------------------ */ /* Private variables -------------------------------------------------------- */ /* USER STRUCT BEGIN */ - +void lv_ex_label(void) +{ + char* github_addr = "hahahahahahahahah"; + lv_obj_t * label = lv_label_create(lv_scr_act()); + lv_label_set_recolor(label, true); + lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/ + lv_obj_set_width(label, 120); + lv_label_set_text_fmt(label, "#ff0000 hahahahahahahahaha %s#", github_addr); + lv_obj_align(label, LV_ALIGN_CENTER, 0, 10); + + lv_obj_t * label2 = lv_label_create(lv_scr_act()); + lv_label_set_recolor(label2, true); + lv_label_set_long_mode(label2, LV_LABEL_LONG_SCROLL_CIRCULAR); /*Circular scroll*/ + lv_obj_set_width(label2, 120); + lv_label_set_text_fmt(label2, "#ff0000 hahahahahahaha# #0000ff hahahahahahaha#"); + lv_obj_align(label2, LV_ALIGN_CENTER, 0, -10); +} /* USER STRUCT END */ /* Private function --------------------------------------------------------- */ /* Exported functions ------------------------------------------------------- */ -void Task_lvgl(void *argument) { +void Task_display(void *argument) { (void)argument; /* 鏈娇鐢╝rgument锛屾秷闄よ鍛 */ + + /* 璁$畻浠诲姟杩愯鍒版寚瀹氶鐜囬渶瑕佺瓑寰呯殑tick鏁 */ + const uint32_t delay_tick = osKernelGetTickFreq() / DISPLAY_FREQ; + + osDelay(DISPLAY_INIT_DELAY); /* 寤舵椂涓娈垫椂闂村啀寮鍚换鍔 */ + + uint32_t tick = osKernelGetTickCount(); /* 鎺у埗浠诲姟杩愯棰戠巼鐨勮鏃 */ + /* USER CODE INIT BEGIN */ + lcd_init(); lv_init(); lv_port_disp_init(); - - lv_demo_stress(); - // osDelay(LVGL_INIT_DELAY); /* 寤舵椂涓娈垫椂闂村啀寮鍚换鍔 */ - - /* USER CODE INIT BEGIN */ - + lv_ex_label(); + // lv_demo_stress(); /* USER CODE INIT END */ - + while (1) { + tick += delay_tick; /* 璁$畻涓嬩竴涓敜閱掓椂鍒 */ + /* USER CODE BEGIN */ // lcd_fill(100, 100,200,200,RED); lv_task_handler(); - // lv_timer_handler(); - /* USER CODE BEGIN */ - + lv_tick_inc(1); /* USER CODE END */ + osDelayUntil(tick); /* 杩愯缁撴潫锛岀瓑寰呬笅涓娆″敜閱 */ } } diff --git a/controler/User/task/init.c b/controler/User/task/init.c index 1c0d5ec..036e9bf 100644 --- a/controler/User/task/init.c +++ b/controler/User/task/init.c @@ -30,7 +30,7 @@ void Task_Init(void *argument) { osKernelLock(); /* 閿佸畾鍐呮牳锛岄槻姝换鍔″垏鎹 */ /* 鍒涘缓浠诲姟绾跨▼ */ - task_runtime.thread.lvgl = osThreadNew(Task_lvgl, NULL, &attr_lvgl); + task_runtime.thread.display = osThreadNew(Task_display, NULL, &attr_display); // 鍒涘缓娑堟伅闃熷垪 /* USER MESSAGE BEGIN */ diff --git a/controler/User/task/user_task.c b/controler/User/task/user_task.c index 93e0d4f..b0cd7c5 100644 --- a/controler/User/task/user_task.c +++ b/controler/User/task/user_task.c @@ -9,8 +9,8 @@ const osThreadAttr_t attr_init = { }; /* User_task */ -const osThreadAttr_t attr_lvgl = { - .name = "lvgl", +const osThreadAttr_t attr_display = { + .name = "display", .priority = osPriorityNormal, - .stack_size = 1024 * 8, -}; + .stack_size = 1024 * 4, +}; \ No newline at end of file diff --git a/controler/User/task/user_task.h b/controler/User/task/user_task.h index 1b06217..c0fc0ba 100644 --- a/controler/User/task/user_task.h +++ b/controler/User/task/user_task.h @@ -13,11 +13,11 @@ extern "C" { /* USER INCLUDE END */ /* Exported constants ------------------------------------------------------- */ /* 浠诲姟杩愯棰戠巼 */ - +#define DISPLAY_FREQ (1000.0) /* 浠诲姟鍒濆鍖栧欢鏃秏s */ #define TASK_INIT_DELAY (100u) -#define LVGL_INIT_DELAY (0) +#define DISPLAY_INIT_DELAY (0) /* Exported defines --------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ @@ -27,7 +27,7 @@ extern "C" { typedef struct { /* 鍚勪换鍔★紝涔熷彲浠ュ彨鍋氱嚎绋 */ struct { - osThreadId_t lvgl; + osThreadId_t display; } thread; /* USER MESSAGE BEGIN */ @@ -49,17 +49,17 @@ typedef struct { /* 鍚勪换鍔$殑stack浣跨敤 */ struct { - UBaseType_t lvgl; + UBaseType_t display; } stack_water_mark; /* 鍚勪换鍔¤繍琛岄鐜 */ struct { - + float display; } freq; /* 浠诲姟鏈杩戣繍琛屾椂闂 */ struct { - + float display; } last_up_time; } Task_Runtime_t; @@ -69,11 +69,11 @@ extern Task_Runtime_t task_runtime; /* 鍒濆鍖栦换鍔″彞鏌 */ extern const osThreadAttr_t attr_init; -extern const osThreadAttr_t attr_lvgl; +extern const osThreadAttr_t attr_display; /* 浠诲姟鍑芥暟澹版槑 */ void Task_Init(void *argument); -void Task_lvgl(void *argument); +void Task_display(void *argument); #ifdef __cplusplus }